diff options
Diffstat (limited to 'drivers/usb/core')
-rw-r--r-- | drivers/usb/core/usb.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c index 109f7558167a..087af73a59dd 100644 --- a/drivers/usb/core/usb.c +++ b/drivers/usb/core/usb.c | |||
@@ -65,6 +65,16 @@ static int generic_probe (struct device *dev) | |||
65 | } | 65 | } |
66 | static int generic_remove (struct device *dev) | 66 | static int generic_remove (struct device *dev) |
67 | { | 67 | { |
68 | struct usb_device *udev = to_usb_device(dev); | ||
69 | |||
70 | /* if this is only an unbind, not a physical disconnect, then | ||
71 | * unconfigure the device */ | ||
72 | if (udev->state == USB_STATE_CONFIGURED) | ||
73 | usb_set_configuration(udev, 0); | ||
74 | |||
75 | /* in case the call failed or the device was suspended */ | ||
76 | if (udev->state >= USB_STATE_CONFIGURED) | ||
77 | usb_disable_device(udev, 0); | ||
68 | return 0; | 78 | return 0; |
69 | } | 79 | } |
70 | 80 | ||