aboutsummaryrefslogtreecommitdiff
path: root/drivers/usb/core/hub.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2010-01-21 07:35:43 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2010-01-21 07:35:43 -0800
commitc9140487b4601ea0b4479af3d92ceb0cda2c691f (patch)
tree6ff23dfe9d7366accade95b6aaad9ffd434690d0 /drivers/usb/core/hub.c
parent456eac94789e1b512515e6974e091ef655f343de (diff)
parent0a2fea2e0dea9df8ead1cb45e4b9cd68e1b1d29b (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6: USB: isp1362: fix build failure on ARM systems via irq_flags cleanup USB: isp1362: better 64bit printf warning fixes USB: fix usbstorage for 2770:915d delivers no FAT USB: Fix level of isp1760 Reloading ptd error message USB: FHCI: avoid NULL pointer dereference USB: Fix duplicate sysfs problem after device reset. USB: add speed values for USB 3.0 and wireless controllers USB: add missing delay during remote wakeup USB: EHCI & UHCI: fix race between root-hub suspend and port resume USB: EHCI: fix handling of unusual interrupt intervals USB: Don't use GFP_KERNEL while we cannot reset a storage device USB: fix bitmask merge error usb: serial: fix memory leak in generic driver USB: serial: fix USB serial fix kfifo_len locking
Diffstat (limited to 'drivers/usb/core/hub.c')
-rw-r--r--drivers/usb/core/hub.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 0cec6caf6e9..35cc8b9ba1f 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -3347,6 +3347,9 @@ static void hub_events(void)
USB_PORT_FEAT_C_SUSPEND);
udev = hdev->children[i-1];
if (udev) {
+ /* TRSMRCY = 10 msec */
+ msleep(10);
+
usb_lock_device(udev);
ret = remote_wakeup(hdev->
children[i-1]);
@@ -3692,19 +3695,14 @@ static int usb_reset_and_verify_device(struct usb_device *udev)
usb_enable_interface(udev, intf, true);
ret = 0;
} else {
- /* We've just reset the device, so it will think alt
- * setting 0 is installed. For usb_set_interface() to
- * work properly, we need to set the current alternate
- * interface setting to 0 (or the first alt setting, if
- * the device doesn't have alt setting 0).
+ /* Let the bandwidth allocation function know that this
+ * device has been reset, and it will have to use
+ * alternate setting 0 as the current alternate setting.
*/
- intf->cur_altsetting =
- usb_find_alt_setting(config, i, 0);
- if (!intf->cur_altsetting)
- intf->cur_altsetting =
- &config->intf_cache[i]->altsetting[0];
+ intf->resetting_device = 1;
ret = usb_set_interface(udev, desc->bInterfaceNumber,
desc->bAlternateSetting);
+ intf->resetting_device = 0;
}
if (ret < 0) {
dev_err(&udev->dev, "failed to restore interface %d "