Commit 90834d3e authored by Peter Chen's avatar Peter Chen Committed by Felipe Balbi

usb: gadget: pxa25x_udc: use udc-core's reset notifier

Replace usb_gadget_driver's disconnect with udc-core's reset notifier at
bus reset handler.
Signed-off-by: default avatarPeter Chen <peter.chen@freescale.com>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent afbe4775
...@@ -1283,6 +1283,33 @@ static int pxa25x_udc_start(struct usb_gadget *g, ...@@ -1283,6 +1283,33 @@ static int pxa25x_udc_start(struct usb_gadget *g,
return retval; return retval;
} }
static void
reset_gadget(struct pxa25x_udc *dev, struct usb_gadget_driver *driver)
{
int i;
/* don't disconnect drivers more than once */
if (dev->gadget.speed == USB_SPEED_UNKNOWN)
driver = NULL;
dev->gadget.speed = USB_SPEED_UNKNOWN;
/* prevent new request submissions, kill any outstanding requests */
for (i = 0; i < PXA_UDC_NUM_ENDPOINTS; i++) {
struct pxa25x_ep *ep = &dev->ep[i];
ep->stopped = 1;
nuke(ep, -ESHUTDOWN);
}
del_timer_sync(&dev->timer);
/* report reset; the driver is already quiesced */
if (driver)
usb_gadget_udc_reset(&dev->gadget, driver);
/* re-init driver-visible data structures */
udc_reinit(dev);
}
static void static void
stop_activity(struct pxa25x_udc *dev, struct usb_gadget_driver *driver) stop_activity(struct pxa25x_udc *dev, struct usb_gadget_driver *driver)
{ {
...@@ -1721,7 +1748,7 @@ pxa25x_udc_irq(int irq, void *_dev) ...@@ -1721,7 +1748,7 @@ pxa25x_udc_irq(int irq, void *_dev)
/* reset driver and endpoints, /* reset driver and endpoints,
* in case that's not yet done * in case that's not yet done
*/ */
stop_activity (dev, dev->driver); reset_gadget(dev, dev->driver);
} else { } else {
DBG(DBG_VERBOSE, "USB reset end\n"); DBG(DBG_VERBOSE, "USB reset end\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment