usb: retry reset if a device times out
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / usb / core / hub.c
index 92873f2773fc6ff62a8744f538a1bc681b466b21..8eb2de6beee4b138f6fcda5bee34f77243c185fe 100644 (file)
@@ -4167,7 +4167,13 @@ hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1,
                                                r = -EPROTO;
                                        break;
                                }
-                               if (r == 0)
+                               /*
+                                * Some devices time out if they are powered on
+                                * when already connected. They need a second
+                                * reset. But only on the first attempt,
+                                * lest we get into a time out/reset loop
+                                */
+                               if (r == 0  || (r == -ETIMEDOUT && j == 0))
                                        break;
                        }
                        udev->descriptor.bMaxPacketSize0 =