diff options
Diffstat (limited to 'drivers/usb/core/hub.c')
-rw-r--r-- | drivers/usb/core/hub.c | 18 |
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) | |||
3347 | USB_PORT_FEAT_C_SUSPEND); | 3347 | USB_PORT_FEAT_C_SUSPEND); |
3348 | udev = hdev->children[i-1]; | 3348 | udev = hdev->children[i-1]; |
3349 | if (udev) { | 3349 | if (udev) { |
3350 | /* TRSMRCY = 10 msec */ | ||
3351 | msleep(10); | ||
3352 | |||
3350 | usb_lock_device(udev); | 3353 | usb_lock_device(udev); |
3351 | ret = remote_wakeup(hdev-> | 3354 | ret = remote_wakeup(hdev-> |
3352 | children[i-1]); | 3355 | children[i-1]); |
@@ -3692,19 +3695,14 @@ static int usb_reset_and_verify_device(struct usb_device *udev) | |||
3692 | usb_enable_interface(udev, intf, true); | 3695 | usb_enable_interface(udev, intf, true); |
3693 | ret = 0; | 3696 | ret = 0; |
3694 | } else { | 3697 | } else { |
3695 | /* We've just reset the device, so it will think alt | 3698 | /* Let the bandwidth allocation function know that this |
3696 | * setting 0 is installed. For usb_set_interface() to | 3699 | * device has been reset, and it will have to use |
3697 | * work properly, we need to set the current alternate | 3700 | * alternate setting 0 as the current alternate setting. |
3698 | * interface setting to 0 (or the first alt setting, if | ||
3699 | * the device doesn't have alt setting 0). | ||
3700 | */ | 3701 | */ |
3701 | intf->cur_altsetting = | 3702 | intf->resetting_device = 1; |
3702 | usb_find_alt_setting(config, i, 0); | ||
3703 | if (!intf->cur_altsetting) | ||
3704 | intf->cur_altsetting = | ||
3705 | &config->intf_cache[i]->altsetting[0]; | ||
3706 | ret = usb_set_interface(udev, desc->bInterfaceNumber, | 3703 | ret = usb_set_interface(udev, desc->bInterfaceNumber, |
3707 | desc->bAlternateSetting); | 3704 | desc->bAlternateSetting); |
3705 | intf->resetting_device = 0; | ||
3708 | } | 3706 | } |
3709 | if (ret < 0) { | 3707 | if (ret < 0) { |
3710 | dev_err(&udev->dev, "failed to restore interface %d " | 3708 | dev_err(&udev->dev, "failed to restore interface %d " |