diff options
-rw-r--r-- | drivers/usb/core/driver.c | 9 | ||||
-rw-r--r-- | drivers/usb/core/generic.c | 4 |
2 files changed, 8 insertions, 5 deletions
diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c index 38c3dd2a44e0..63d47946e3db 100644 --- a/drivers/usb/core/driver.c +++ b/drivers/usb/core/driver.c | |||
@@ -1050,8 +1050,15 @@ static int usb_suspend_both(struct usb_device *udev, pm_message_t msg) | |||
1050 | break; | 1050 | break; |
1051 | } | 1051 | } |
1052 | } | 1052 | } |
1053 | if (status == 0) | 1053 | if (status == 0) { |
1054 | |||
1055 | /* Non-root devices don't need to do anything for FREEZE | ||
1056 | * or PRETHAW. */ | ||
1057 | if (udev->parent && (msg.event == PM_EVENT_FREEZE || | ||
1058 | msg.event == PM_EVENT_PRETHAW)) | ||
1059 | goto done; | ||
1054 | status = usb_suspend_device(udev, msg); | 1060 | status = usb_suspend_device(udev, msg); |
1061 | } | ||
1055 | 1062 | ||
1056 | /* If the suspend failed, resume interfaces that did get suspended */ | 1063 | /* If the suspend failed, resume interfaces that did get suspended */ |
1057 | if (status != 0) { | 1064 | if (status != 0) { |
diff --git a/drivers/usb/core/generic.c b/drivers/usb/core/generic.c index 9bbcb20e2d94..e7ec9b6b7a93 100644 --- a/drivers/usb/core/generic.c +++ b/drivers/usb/core/generic.c | |||
@@ -193,10 +193,6 @@ static void generic_disconnect(struct usb_device *udev) | |||
193 | 193 | ||
194 | static int generic_suspend(struct usb_device *udev, pm_message_t msg) | 194 | static int generic_suspend(struct usb_device *udev, pm_message_t msg) |
195 | { | 195 | { |
196 | /* USB devices enter SUSPEND state through their hubs, but can be | ||
197 | * marked for FREEZE as soon as their children are already idled. | ||
198 | * But those semantics are useless, so we equate the two (sigh). | ||
199 | */ | ||
200 | return usb_port_suspend(udev); | 196 | return usb_port_suspend(udev); |
201 | } | 197 | } |
202 | 198 | ||