|
@@ -1183,8 +1183,10 @@ dev_release (struct inode *inode, struct file *fd)
|
|
|
|
|
|
/* closing ep0 === shutdown all */
|
|
|
|
|
|
- if (dev->gadget_registered)
|
|
|
+ if (dev->gadget_registered) {
|
|
|
usb_gadget_unregister_driver (&gadgetfs_driver);
|
|
|
+ dev->gadget_registered = false;
|
|
|
+ }
|
|
|
|
|
|
/* at this point "good" hardware has disconnected the
|
|
|
* device from USB; the host won't see it any more.
|
|
@@ -1677,9 +1679,10 @@ static void
|
|
|
gadgetfs_suspend (struct usb_gadget *gadget)
|
|
|
{
|
|
|
struct dev_data *dev = get_gadget_data (gadget);
|
|
|
+ unsigned long flags;
|
|
|
|
|
|
INFO (dev, "suspended from state %d\n", dev->state);
|
|
|
- spin_lock (&dev->lock);
|
|
|
+ spin_lock_irqsave(&dev->lock, flags);
|
|
|
switch (dev->state) {
|
|
|
case STATE_DEV_SETUP: // VERY odd... host died??
|
|
|
case STATE_DEV_CONNECTED:
|
|
@@ -1690,7 +1693,7 @@ gadgetfs_suspend (struct usb_gadget *gadget)
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
- spin_unlock (&dev->lock);
|
|
|
+ spin_unlock_irqrestore(&dev->lock, flags);
|
|
|
}
|
|
|
|
|
|
static struct usb_gadget_driver gadgetfs_driver = {
|