diff options
Diffstat (limited to 'drivers/usb/gadget/legacy/inode.c')
-rw-r--r-- | drivers/usb/gadget/legacy/inode.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/usb/gadget/legacy/inode.c b/drivers/usb/gadget/legacy/inode.c index 7e179f81d05c..87fb0fd6aaab 100644 --- a/drivers/usb/gadget/legacy/inode.c +++ b/drivers/usb/gadget/legacy/inode.c | |||
@@ -130,7 +130,8 @@ struct dev_data { | |||
130 | setup_can_stall : 1, | 130 | setup_can_stall : 1, |
131 | setup_out_ready : 1, | 131 | setup_out_ready : 1, |
132 | setup_out_error : 1, | 132 | setup_out_error : 1, |
133 | setup_abort : 1; | 133 | setup_abort : 1, |
134 | gadget_registered : 1; | ||
134 | unsigned setup_wLength; | 135 | unsigned setup_wLength; |
135 | 136 | ||
136 | /* the rest is basically write-once */ | 137 | /* the rest is basically write-once */ |
@@ -1179,7 +1180,8 @@ dev_release (struct inode *inode, struct file *fd) | |||
1179 | 1180 | ||
1180 | /* closing ep0 === shutdown all */ | 1181 | /* closing ep0 === shutdown all */ |
1181 | 1182 | ||
1182 | usb_gadget_unregister_driver (&gadgetfs_driver); | 1183 | if (dev->gadget_registered) |
1184 | usb_gadget_unregister_driver (&gadgetfs_driver); | ||
1183 | 1185 | ||
1184 | /* at this point "good" hardware has disconnected the | 1186 | /* at this point "good" hardware has disconnected the |
1185 | * device from USB; the host won't see it any more. | 1187 | * device from USB; the host won't see it any more. |
@@ -1847,6 +1849,7 @@ dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr) | |||
1847 | * kick in after the ep0 descriptor is closed. | 1849 | * kick in after the ep0 descriptor is closed. |
1848 | */ | 1850 | */ |
1849 | value = len; | 1851 | value = len; |
1852 | dev->gadget_registered = true; | ||
1850 | } | 1853 | } |
1851 | return value; | 1854 | return value; |
1852 | 1855 | ||