mirror of https://gitee.com/openkylin/linux.git
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: Peter Chen <peter.chen@freescale.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
parent
afbe47758a
commit
90834d3ecb
|
@ -1283,6 +1283,33 @@ static int pxa25x_udc_start(struct usb_gadget *g,
|
|||
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
|
||||
stop_activity(struct pxa25x_udc *dev, struct usb_gadget_driver *driver)
|
||||
{
|
||||
|
@ -1721,7 +1748,7 @@ pxa25x_udc_irq(int irq, void *_dev)
|
|||
/* reset driver and endpoints,
|
||||
* in case that's not yet done
|
||||
*/
|
||||
stop_activity (dev, dev->driver);
|
||||
reset_gadget(dev, dev->driver);
|
||||
|
||||
} else {
|
||||
DBG(DBG_VERBOSE, "USB reset end\n");
|
||||
|
|
Loading…
Reference in New Issue