usb: gadget: bcm63xx_udc: use udc-core's reset notifier
authorPeter Chen <peter.chen@freescale.com>
Thu, 6 Nov 2014 06:28:08 +0000 (14:28 +0800)
committerFelipe Balbi <balbi@ti.com>
Mon, 10 Nov 2014 23:19:38 +0000 (17:19 -0600)
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>
drivers/usb/gadget/udc/bcm63xx_udc.c

index 9319ff27c73f0fee16ccc7db443202f91b4be3d8..c790918b337b8291765bac874a9480f720de1a80 100644 (file)
@@ -1962,7 +1962,7 @@ static irqreturn_t bcm63xx_udc_ctrl_isr(int irq, void *dev_id)
 {
        struct bcm63xx_udc *udc = dev_id;
        u32 stat;
-       bool disconnected = false;
+       bool disconnected = false, bus_reset = false;
 
        stat = usbd_readl(udc, USBD_EVENT_IRQ_STATUS_REG) &
               usbd_readl(udc, USBD_EVENT_IRQ_MASK_REG);
@@ -1990,7 +1990,7 @@ static irqreturn_t bcm63xx_udc_ctrl_isr(int irq, void *dev_id)
 
                udc->ep0_req_reset = 1;
                schedule_work(&udc->ep0_wq);
-               disconnected = true;
+               bus_reset = true;
        }
        if (stat & BIT(USBD_EVENT_IRQ_SETUP)) {
                if (bcm63xx_update_link_speed(udc)) {
@@ -2013,6 +2013,8 @@ static irqreturn_t bcm63xx_udc_ctrl_isr(int irq, void *dev_id)
 
        if (disconnected && udc->driver)
                udc->driver->disconnect(&udc->gadget);
+       else if (bus_reset && udc->driver)
+               usb_gadget_udc_reset(&udc->gadget, udc->driver);
 
        return IRQ_HANDLED;
 }