Replace usb_gadget_driver's disconnect with udc-core's reset notifier at
bus reset handler.

Signed-off-by: Peter Chen <peter.c...@freescale.com>
---
 drivers/usb/gadget/udc/bcm63xx_udc.c |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/gadget/udc/bcm63xx_udc.c 
b/drivers/usb/gadget/udc/bcm63xx_udc.c
index e969eb8..871039e 100644
--- a/drivers/usb/gadget/udc/bcm63xx_udc.c
+++ b/drivers/usb/gadget/udc/bcm63xx_udc.c
@@ -1963,7 +1963,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);
@@ -1991,7 +1991,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)) {
@@ -2014,6 +2014,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;
 }
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to