usb: dwc3: gadget: use udc-core's reset notifier
authorFelipe Balbi <balbi@ti.com>
Thu, 6 Nov 2014 06:27:53 +0000 (14:27 +0800)
committerFelipe Balbi <balbi@ti.com>
Mon, 10 Nov 2014 23:19:34 +0000 (17:19 -0600)
Replace usb_gadget_driver's disconnect with udc-core's reset notifier at
bus reset handler.

Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Peter Chen <peter.chen@freescale.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/dwc3/gadget.c

index 398c12f5efe31f26b089fab1b29d563a56c3db8c..f03b136ecfce33b3b6936314d1fdebabb4ce936d 100644 (file)
@@ -2041,6 +2041,17 @@ static void dwc3_resume_gadget(struct dwc3 *dwc)
        if (dwc->gadget_driver && dwc->gadget_driver->resume) {
                spin_unlock(&dwc->lock);
                dwc->gadget_driver->resume(&dwc->gadget);
+       }
+}
+
+static void dwc3_reset_gadget(struct dwc3 *dwc)
+{
+       if (!dwc->gadget_driver)
+               return;
+
+       if (dwc->gadget.speed != USB_SPEED_UNKNOWN) {
+               spin_unlock(&dwc->lock);
+               usb_gadget_udc_reset(&dwc->gadget, dwc->gadget_driver);
                spin_lock(&dwc->lock);
        }
 }
@@ -2185,11 +2196,7 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc)
                        dwc3_gadget_disconnect_interrupt(dwc);
        }
 
-       /* after reset -> Default State */
-       usb_gadget_set_state(&dwc->gadget, USB_STATE_DEFAULT);
-
-       if (dwc->gadget.speed != USB_SPEED_UNKNOWN)
-               dwc3_disconnect_gadget(dwc);
+       dwc3_reset_gadget(dwc);
 
        reg = dwc3_readl(dwc->regs, DWC3_DCTL);
        reg &= ~DWC3_DCTL_TSTCTRL_MASK;