usb: gadget: r8a66597-udc: fix cannot connect after rmmod gadget driver
authorYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Fri, 8 Jul 2011 05:51:21 +0000 (14:51 +0900)
committerFelipe Balbi <balbi@ti.com>
Fri, 8 Jul 2011 09:47:37 +0000 (12:47 +0300)
When we run rmmod a gadget driver, the driver will call
disable_controller(). Then, because the bit of USBE in SYSCFG0 was
cleared in on_chip=1 mode, we could not connect the usb when we run
insmod a gadget driver next time.
This patch also cleans up probe() and ->stop() about unnecessary
init_controller().

Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/gadget/r8a66597-udc.c

index 7ee69152ec9eb5e28c29c95074ce8d163943f675..4f3f1ce0424bf0cccc4945a5e81f027c0a78ec90 100644 (file)
@@ -1444,6 +1444,7 @@ static int r8a66597_start(struct usb_gadget_driver *driver,
                goto error;
        }
 
+       init_controller(r8a66597);
        r8a66597_bset(r8a66597, VBSE, INTENB0);
        if (r8a66597_read(r8a66597, INTSTS0) & VBSTS) {
                r8a66597_start_xclock(r8a66597);
@@ -1474,15 +1475,12 @@ static int r8a66597_stop(struct usb_gadget_driver *driver)
        spin_lock_irqsave(&r8a66597->lock, flags);
        if (r8a66597->gadget.speed != USB_SPEED_UNKNOWN)
                r8a66597_usb_disconnect(r8a66597);
-       spin_unlock_irqrestore(&r8a66597->lock, flags);
-
        r8a66597_bclr(r8a66597, VBSE, INTENB0);
+       disable_controller(r8a66597);
+       spin_unlock_irqrestore(&r8a66597->lock, flags);
 
        driver->unbind(&r8a66597->gadget);
 
-       init_controller(r8a66597);
-       disable_controller(r8a66597);
-
        device_del(&r8a66597->gadget.dev);
        r8a66597->driver = NULL;
        return 0;
@@ -1646,8 +1644,6 @@ static int __init r8a66597_probe(struct platform_device *pdev)
                goto clean_up3;
        r8a66597->ep0_req->complete = nop_completion;
 
-       init_controller(r8a66597);
-
        ret = usb_add_gadget_udc(&pdev->dev, &r8a66597->gadget);
        if (ret)
                goto err_add_udc;