Commit 236e5064 authored by Peter Chen's avatar Peter Chen Committed by Felipe Balbi

usb: gadget: at91_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 363ea206
...@@ -840,6 +840,31 @@ static void udc_reinit(struct at91_udc *udc) ...@@ -840,6 +840,31 @@ static void udc_reinit(struct at91_udc *udc)
} }
} }
static void reset_gadget(struct at91_udc *udc)
{
struct usb_gadget_driver *driver = udc->driver;
int i;
if (udc->gadget.speed == USB_SPEED_UNKNOWN)
driver = NULL;
udc->gadget.speed = USB_SPEED_UNKNOWN;
udc->suspended = 0;
for (i = 0; i < NUM_ENDPOINTS; i++) {
struct at91_ep *ep = &udc->ep[i];
ep->stopped = 1;
nuke(ep, -ESHUTDOWN);
}
if (driver) {
spin_unlock(&udc->lock);
usb_gadget_udc_reset(&udc->gadget, driver);
spin_lock(&udc->lock);
}
udc_reinit(udc);
}
static void stop_activity(struct at91_udc *udc) static void stop_activity(struct at91_udc *udc)
{ {
struct usb_gadget_driver *driver = udc->driver; struct usb_gadget_driver *driver = udc->driver;
...@@ -1426,7 +1451,7 @@ static irqreturn_t at91_udc_irq (int irq, void *_udc) ...@@ -1426,7 +1451,7 @@ static irqreturn_t at91_udc_irq (int irq, void *_udc)
at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_ENDBUSRES); at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_ENDBUSRES);
VDBG("end bus reset\n"); VDBG("end bus reset\n");
udc->addr = 0; udc->addr = 0;
stop_activity(udc); reset_gadget(udc);
/* enable ep0 */ /* enable ep0 */
at91_udp_write(udc, AT91_UDP_CSR(0), at91_udp_write(udc, AT91_UDP_CSR(0),
......
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