Skip to content

Commit

Permalink
USB: Implement PM FREEZE and PRETHAW
Browse files Browse the repository at this point in the history
This patch (as884) finally implements the time-saving semantics
possible with the Power Management FREEZE and PRETHAW events.  Their
proper handling requires only that devices be quiesced, with
interrupts and DMA turned off; non-root USB devices don't actually
need to be put in a suspended state.  The patch checks and avoids
doing the suspend call when possible.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Alan Stern authored and Greg Kroah-Hartman committed Jul 12, 2007
1 parent 784a6e1 commit 4d46109
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 5 deletions.
9 changes: 8 additions & 1 deletion drivers/usb/core/driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -1050,8 +1050,15 @@ static int usb_suspend_both(struct usb_device *udev, pm_message_t msg)
break;
}
}
if (status == 0)
if (status == 0) {

/* Non-root devices don't need to do anything for FREEZE
* or PRETHAW. */
if (udev->parent && (msg.event == PM_EVENT_FREEZE ||
msg.event == PM_EVENT_PRETHAW))
goto done;
status = usb_suspend_device(udev, msg);
}

/* If the suspend failed, resume interfaces that did get suspended */
if (status != 0) {
Expand Down
4 changes: 0 additions & 4 deletions drivers/usb/core/generic.c
Original file line number Diff line number Diff line change
Expand Up @@ -193,10 +193,6 @@ static void generic_disconnect(struct usb_device *udev)

static int generic_suspend(struct usb_device *udev, pm_message_t msg)
{
/* USB devices enter SUSPEND state through their hubs, but can be
* marked for FREEZE as soon as their children are already idled.
* But those semantics are useless, so we equate the two (sigh).
*/
return usb_port_suspend(udev);
}

Expand Down

0 comments on commit 4d46109

Please sign in to comment.