diff options
| -rw-r--r-- | drivers/usb/core/hub.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 0f299b7aad60..d041c6826e43 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c | |||
| @@ -2681,13 +2681,17 @@ hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1, | |||
| 2681 | 2681 | ||
| 2682 | mutex_lock(&usb_address0_mutex); | 2682 | mutex_lock(&usb_address0_mutex); |
| 2683 | 2683 | ||
| 2684 | /* Reset the device; full speed may morph to high speed */ | 2684 | if (!udev->config && oldspeed == USB_SPEED_SUPER) { |
| 2685 | /* FIXME a USB 2.0 device may morph into SuperSpeed on reset. */ | 2685 | /* Don't reset USB 3.0 devices during an initial setup */ |
| 2686 | retval = hub_port_reset(hub, port1, udev, delay); | 2686 | usb_set_device_state(udev, USB_STATE_DEFAULT); |
| 2687 | if (retval < 0) /* error or disconnect */ | 2687 | } else { |
| 2688 | goto fail; | 2688 | /* Reset the device; full speed may morph to high speed */ |
| 2689 | /* success, speed is known */ | 2689 | /* FIXME a USB 2.0 device may morph into SuperSpeed on reset. */ |
| 2690 | 2690 | retval = hub_port_reset(hub, port1, udev, delay); | |
| 2691 | if (retval < 0) /* error or disconnect */ | ||
| 2692 | goto fail; | ||
| 2693 | /* success, speed is known */ | ||
| 2694 | } | ||
| 2691 | retval = -ENODEV; | 2695 | retval = -ENODEV; |
| 2692 | 2696 | ||
| 2693 | if (oldspeed != USB_SPEED_UNKNOWN && oldspeed != udev->speed) { | 2697 | if (oldspeed != USB_SPEED_UNKNOWN && oldspeed != udev->speed) { |
