aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/core
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/core')
-rw-r--r--drivers/usb/core/driver.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
index 0a0e8cea0af..8da1a56659b 100644
--- a/drivers/usb/core/driver.c
+++ b/drivers/usb/core/driver.c
@@ -257,15 +257,16 @@ static int usb_unbind_interface(struct device *dev)
257 udev = interface_to_usbdev(intf); 257 udev = interface_to_usbdev(intf);
258 error = usb_autoresume_device(udev); 258 error = usb_autoresume_device(udev);
259 259
260 /* release all urbs for this interface */ 260 /* Terminate all URBs for this interface unless the driver
261 usb_disable_interface(interface_to_usbdev(intf), intf); 261 * supports "soft" unbinding.
262 */
263 if (!driver->soft_unbind)
264 usb_disable_interface(udev, intf);
262 265
263 driver->disconnect(intf); 266 driver->disconnect(intf);
264 267
265 /* reset other interface state */ 268 /* reset other interface state */
266 usb_set_interface(interface_to_usbdev(intf), 269 usb_set_interface(udev, intf->altsetting[0].desc.bInterfaceNumber, 0);
267 intf->altsetting[0].desc.bInterfaceNumber,
268 0);
269 usb_set_intfdata(intf, NULL); 270 usb_set_intfdata(intf, NULL);
270 271
271 intf->condition = USB_INTERFACE_UNBOUND; 272 intf->condition = USB_INTERFACE_UNBOUND;