|
@@ -210,8 +210,13 @@ static int generic_suspend(struct usb_device *udev, pm_message_t msg)
|
|
if (!udev->parent)
|
|
if (!udev->parent)
|
|
rc = hcd_bus_suspend(udev, msg);
|
|
rc = hcd_bus_suspend(udev, msg);
|
|
|
|
|
|
- /* Non-root devices don't need to do anything for FREEZE or PRETHAW */
|
|
|
|
- else if (msg.event == PM_EVENT_FREEZE || msg.event == PM_EVENT_PRETHAW)
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Non-root USB2 devices don't need to do anything for FREEZE
|
|
|
|
+ * or PRETHAW. USB3 devices don't support global suspend and
|
|
|
|
+ * needs to be selectively suspended.
|
|
|
|
+ */
|
|
|
|
+ else if ((msg.event == PM_EVENT_FREEZE || msg.event == PM_EVENT_PRETHAW)
|
|
|
|
+ && (udev->speed < USB_SPEED_SUPER))
|
|
rc = 0;
|
|
rc = 0;
|
|
else
|
|
else
|
|
rc = usb_port_suspend(udev, msg);
|
|
rc = usb_port_suspend(udev, msg);
|