aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb
diff options
context:
space:
mode:
authorFelipe Balbi <felipe.balbi@nokia.com>2008-08-04 06:53:52 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2008-08-13 20:33:00 -0400
commitf362a47560070ec0aaf68ac6b45901eeed1c844f (patch)
tree13712fa7b938488a35ab16777133e6adabec17df /drivers/usb
parent550a7375fe720924241f0eb76e4a5c1a3eb8c32f (diff)
usb: musb: fix hanging when rmmod gadget driver
If we try to modprobe a second gadget driver before rmmoding the first one, the reference for the first gadget driver would get NULLed avoiding usb to change gadget drivers later. Cc: David Brownell <david-b@pacbell.net> Cc: Tony Lindgren <tony@atomide.com> Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/musb/musb_gadget.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
index b3773f13ee0a..d6a802c224fa 100644
--- a/drivers/usb/musb/musb_gadget.c
+++ b/drivers/usb/musb/musb_gadget.c
@@ -1710,17 +1710,15 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver)
1710 1710
1711 spin_unlock_irqrestore(&musb->lock, flags); 1711 spin_unlock_irqrestore(&musb->lock, flags);
1712 1712
1713 if (retval == 0) 1713 if (retval == 0) {
1714 retval = driver->bind(&musb->g); 1714 retval = driver->bind(&musb->g);
1715 if (retval != 0) { 1715 if (retval != 0) {
1716 DBG(3, "bind to driver %s failed --> %d\n", 1716 DBG(3, "bind to driver %s failed --> %d\n",
1717 driver->driver.name, retval); 1717 driver->driver.name, retval);
1718 musb->gadget_driver = NULL; 1718 musb->gadget_driver = NULL;
1719 musb->g.dev.driver = NULL; 1719 musb->g.dev.driver = NULL;
1720 } 1720 }
1721 1721
1722 /* start peripheral and/or OTG engines */
1723 if (retval == 0) {
1724 spin_lock_irqsave(&musb->lock, flags); 1722 spin_lock_irqsave(&musb->lock, flags);
1725 1723
1726 /* REVISIT always use otg_set_peripheral(), handling 1724 /* REVISIT always use otg_set_peripheral(), handling