diff options
Diffstat (limited to 'drivers/usb/core')
-rw-r--r-- | drivers/usb/core/driver.c | 11 |
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; |