aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2006-09-19 10:08:43 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2006-09-27 14:58:57 -0400
commit592fbbe4bc339399d363dd55f0391e0623400706 (patch)
tree4b21f83f393e7fefb5c73e0e460052b67058f178 /drivers/usb
parent02c399ee45a54987c152fe5f627ed949bb55f187 (diff)
USB: fix root-hub resume when CONFIG_USB_SUSPEND is not set
This patch (as786) removes a redundant test and fixes a problem involving repeated system sleeps when CONFIG_USB_SUSPEND is not set. During the first wakeup, the root hub's dev.power.power_state.event field doesn't get updated, causing it not to be suspended during the second sleep transition. This takes care of the issue raised by Rafael J. Wysocki and Mattia Dongili. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/core/driver.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
index 2b2000ac05ab..0d063c8ca4b4 100644
--- a/drivers/usb/core/driver.c
+++ b/drivers/usb/core/driver.c
@@ -1071,10 +1071,15 @@ int usb_resume_both(struct usb_device *udev)
1071 PM_EVENT_ON) 1071 PM_EVENT_ON)
1072 status = -EHOSTUNREACH; 1072 status = -EHOSTUNREACH;
1073 } 1073 }
1074 if (status == 0 && udev->state == USB_STATE_SUSPENDED) 1074 if (status == 0)
1075 status = resume_device(udev); 1075 status = resume_device(udev);
1076 if (parent) 1076 if (parent)
1077 mutex_unlock(&parent->pm_mutex); 1077 mutex_unlock(&parent->pm_mutex);
1078 } else {
1079
1080 /* Needed only for setting udev->dev.power.power_state.event
1081 * and for possible debugging message. */
1082 status = resume_device(udev);
1078 } 1083 }
1079 1084
1080 /* Now the parent won't suspend until we are finished */ 1085 /* Now the parent won't suspend until we are finished */