|
@@ -2681,13 +2681,17 @@ hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1,
|
|
|
|
|
|
mutex_lock(&usb_address0_mutex);
|
|
|
|
|
|
- /* Reset the device; full speed may morph to high speed */
|
|
|
- /* FIXME a USB 2.0 device may morph into SuperSpeed on reset. */
|
|
|
- retval = hub_port_reset(hub, port1, udev, delay);
|
|
|
- if (retval < 0) /* error or disconnect */
|
|
|
- goto fail;
|
|
|
- /* success, speed is known */
|
|
|
-
|
|
|
+ if (!udev->config && oldspeed == USB_SPEED_SUPER) {
|
|
|
+ /* Don't reset USB 3.0 devices during an initial setup */
|
|
|
+ usb_set_device_state(udev, USB_STATE_DEFAULT);
|
|
|
+ } else {
|
|
|
+ /* Reset the device; full speed may morph to high speed */
|
|
|
+ /* FIXME a USB 2.0 device may morph into SuperSpeed on reset. */
|
|
|
+ retval = hub_port_reset(hub, port1, udev, delay);
|
|
|
+ if (retval < 0) /* error or disconnect */
|
|
|
+ goto fail;
|
|
|
+ /* success, speed is known */
|
|
|
+ }
|
|
|
retval = -ENODEV;
|
|
|
|
|
|
if (oldspeed != USB_SPEED_UNKNOWN && oldspeed != udev->speed) {
|