]> Pileus Git - ~andy/linux/commitdiff
usb: dwc3: enable ACCEPT{U1,U2}ENA when SetConfiguration received
authorPratyush Anand <pratyush.anand@st.com>
Mon, 2 Jul 2012 04:51:54 +0000 (10:21 +0530)
committerFelipe Balbi <balbi@ti.com>
Mon, 2 Jul 2012 07:03:55 +0000 (10:03 +0300)
As per databook, ACCEPT{U1,U2}ENA bits should be set after receiving
SetConfiguration Command.

Signed-off-by: Pratyush Anand <pratyush.anand@st.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/dwc3/ep0.c
drivers/usb/dwc3/gadget.c

index 1315e787a31696733cc9376e346da9ac00933e38..9b94886b66e589ee3040556bf284985a01a64bc6 100644 (file)
@@ -474,6 +474,7 @@ static int dwc3_ep0_set_config(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
 {
        u32 cfg;
        int ret;
+       u32 reg;
 
        dwc->start_config_issued = false;
        cfg = le16_to_cpu(ctrl->wValue);
@@ -488,6 +489,14 @@ static int dwc3_ep0_set_config(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
                /* if the cfg matches and the cfg is non zero */
                if (cfg && (!ret || (ret == USB_GADGET_DELAYED_STATUS))) {
                        dwc->dev_state = DWC3_CONFIGURED_STATE;
+                       /*
+                        * Enable transition to U1/U2 state when
+                        * nothing is pending from application.
+                        */
+                       reg = dwc3_readl(dwc->regs, DWC3_DCTL);
+                       reg |= (DWC3_DCTL_ACCEPTU1ENA | DWC3_DCTL_ACCEPTU2ENA);
+                       dwc3_writel(dwc->regs, DWC3_DCTL, reg);
+
                        dwc->resize_fifos = true;
                        dev_dbg(dwc->dev, "resize fifos flag SET\n");
                }
index e7450931125ac1deb2aa1857af8413130ba0a60c..39626e366a829d7195bd923e9ae6939914a8d46c 100644 (file)
@@ -2020,7 +2020,6 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc)
 
        reg = dwc3_readl(dwc->regs, DWC3_DCTL);
        reg &= ~DWC3_DCTL_TSTCTRL_MASK;
-       reg |= (DWC3_DCTL_ACCEPTU1ENA | DWC3_DCTL_ACCEPTU2ENA);
        dwc3_writel(dwc->regs, DWC3_DCTL, reg);
        dwc->test_mode = false;