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>
This commit is contained in:
parent
550a7375fe
commit
f362a47560
1 changed files with 8 additions and 10 deletions
|
@ -1710,17 +1710,15 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver)
|
|||
|
||||
spin_unlock_irqrestore(&musb->lock, flags);
|
||||
|
||||
if (retval == 0)
|
||||
retval = driver->bind(&musb->g);
|
||||
if (retval != 0) {
|
||||
DBG(3, "bind to driver %s failed --> %d\n",
|
||||
driver->driver.name, retval);
|
||||
musb->gadget_driver = NULL;
|
||||
musb->g.dev.driver = NULL;
|
||||
}
|
||||
|
||||
/* start peripheral and/or OTG engines */
|
||||
if (retval == 0) {
|
||||
retval = driver->bind(&musb->g);
|
||||
if (retval != 0) {
|
||||
DBG(3, "bind to driver %s failed --> %d\n",
|
||||
driver->driver.name, retval);
|
||||
musb->gadget_driver = NULL;
|
||||
musb->g.dev.driver = NULL;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&musb->lock, flags);
|
||||
|
||||
/* REVISIT always use otg_set_peripheral(), handling
|
||||
|
|
Loading…
Reference in a new issue