|
@@ -2362,6 +2362,10 @@ int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
|
|
USB_DEVICE_REMOTE_WAKEUP, 0,
|
|
USB_DEVICE_REMOTE_WAKEUP, 0,
|
|
NULL, 0,
|
|
NULL, 0,
|
|
USB_CTRL_SET_TIMEOUT);
|
|
USB_CTRL_SET_TIMEOUT);
|
|
|
|
+
|
|
|
|
+ /* System sleep transitions should never fail */
|
|
|
|
+ if (!(msg.event & PM_EVENT_AUTO))
|
|
|
|
+ status = 0;
|
|
} else {
|
|
} else {
|
|
/* device has up to 10 msec to fully suspend */
|
|
/* device has up to 10 msec to fully suspend */
|
|
dev_dbg(&udev->dev, "usb %ssuspend\n",
|
|
dev_dbg(&udev->dev, "usb %ssuspend\n",
|
|
@@ -2611,16 +2615,15 @@ static int hub_suspend(struct usb_interface *intf, pm_message_t msg)
|
|
struct usb_device *hdev = hub->hdev;
|
|
struct usb_device *hdev = hub->hdev;
|
|
unsigned port1;
|
|
unsigned port1;
|
|
|
|
|
|
- /* fail if children aren't already suspended */
|
|
|
|
|
|
+ /* Warn if children aren't already suspended */
|
|
for (port1 = 1; port1 <= hdev->maxchild; port1++) {
|
|
for (port1 = 1; port1 <= hdev->maxchild; port1++) {
|
|
struct usb_device *udev;
|
|
struct usb_device *udev;
|
|
|
|
|
|
udev = hdev->children [port1-1];
|
|
udev = hdev->children [port1-1];
|
|
if (udev && udev->can_submit) {
|
|
if (udev && udev->can_submit) {
|
|
- if (!(msg.event & PM_EVENT_AUTO))
|
|
|
|
- dev_dbg(&intf->dev, "port %d nyet suspended\n",
|
|
|
|
- port1);
|
|
|
|
- return -EBUSY;
|
|
|
|
|
|
+ dev_warn(&intf->dev, "port %d nyet suspended\n", port1);
|
|
|
|
+ if (msg.event & PM_EVENT_AUTO)
|
|
|
|
+ return -EBUSY;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|