aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/core/hub.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 9641e9c1dec5..957ed2c41482 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -3000,7 +3000,7 @@ int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
3000static int finish_port_resume(struct usb_device *udev) 3000static int finish_port_resume(struct usb_device *udev)
3001{ 3001{
3002 int status = 0; 3002 int status = 0;
3003 u16 devstatus; 3003 u16 devstatus = 0;
3004 3004
3005 /* caller owns the udev device lock */ 3005 /* caller owns the udev device lock */
3006 dev_dbg(&udev->dev, "%s\n", 3006 dev_dbg(&udev->dev, "%s\n",
@@ -3045,7 +3045,13 @@ static int finish_port_resume(struct usb_device *udev)
3045 if (status) { 3045 if (status) {
3046 dev_dbg(&udev->dev, "gone after usb resume? status %d\n", 3046 dev_dbg(&udev->dev, "gone after usb resume? status %d\n",
3047 status); 3047 status);
3048 } else if (udev->actconfig) { 3048 /*
3049 * There are a few quirky devices which violate the standard
3050 * by claiming to have remote wakeup enabled after a reset,
3051 * which crash if the feature is cleared, hence check for
3052 * udev->reset_resume
3053 */
3054 } else if (udev->actconfig && !udev->reset_resume) {
3049 le16_to_cpus(&devstatus); 3055 le16_to_cpus(&devstatus);
3050 if (devstatus & (1 << USB_DEVICE_REMOTE_WAKEUP)) { 3056 if (devstatus & (1 << USB_DEVICE_REMOTE_WAKEUP)) {
3051 status = usb_control_msg(udev, 3057 status = usb_control_msg(udev,