|
@@ -1614,6 +1614,41 @@ static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
|
|
desc = intf->cur_altsetting;
|
|
|
hdev = interface_to_usbdev(intf);
|
|
|
|
|
|
+ /*
|
|
|
+ * Set default autosuspend delay as 0 to speedup bus suspend,
|
|
|
+ * based on the below considerations:
|
|
|
+ *
|
|
|
+ * - Unlike other drivers, the hub driver does not rely on the
|
|
|
+ * autosuspend delay to provide enough time to handle a wakeup
|
|
|
+ * event, and the submitted status URB is just to check future
|
|
|
+ * change on hub downstream ports, so it is safe to do it.
|
|
|
+ *
|
|
|
+ * - The patch might cause one or more auto supend/resume for
|
|
|
+ * below very rare devices when they are plugged into hub
|
|
|
+ * first time:
|
|
|
+ *
|
|
|
+ * devices having trouble initializing, and disconnect
|
|
|
+ * themselves from the bus and then reconnect a second
|
|
|
+ * or so later
|
|
|
+ *
|
|
|
+ * devices just for downloading firmware, and disconnects
|
|
|
+ * themselves after completing it
|
|
|
+ *
|
|
|
+ * For these quite rare devices, their drivers may change the
|
|
|
+ * autosuspend delay of their parent hub in the probe() to one
|
|
|
+ * appropriate value to avoid the subtle problem if someone
|
|
|
+ * does care it.
|
|
|
+ *
|
|
|
+ * - The patch may cause one or more auto suspend/resume on
|
|
|
+ * hub during running 'lsusb', but it is probably too
|
|
|
+ * infrequent to worry about.
|
|
|
+ *
|
|
|
+ * - Change autosuspend delay of hub can avoid unnecessary auto
|
|
|
+ * suspend timer for hub, also may decrease power consumption
|
|
|
+ * of USB bus.
|
|
|
+ */
|
|
|
+ pm_runtime_set_autosuspend_delay(&hdev->dev, 0);
|
|
|
+
|
|
|
/* Hubs have proper suspend/resume support. */
|
|
|
usb_enable_autosuspend(hdev);
|
|
|
|