Commit baf67741 authored by Alan Stern's avatar Alan Stern Committed by Greg Kroah-Hartman

USB: power management documentation update

This patch (as1313) updates the documentation concerning USB power
management.
Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent f42ecb28
...@@ -21,25 +21,27 @@ Contact: Alan Stern <stern@rowland.harvard.edu> ...@@ -21,25 +21,27 @@ Contact: Alan Stern <stern@rowland.harvard.edu>
Description: Description:
Each USB device directory will contain a file named Each USB device directory will contain a file named
power/level. This file holds a power-level setting for power/level. This file holds a power-level setting for
the device, one of "on", "auto", or "suspend". the device, either "on" or "auto".
"on" means that the device is not allowed to autosuspend, "on" means that the device is not allowed to autosuspend,
although normal suspends for system sleep will still although normal suspends for system sleep will still
be honored. "auto" means the device will autosuspend be honored. "auto" means the device will autosuspend
and autoresume in the usual manner, according to the and autoresume in the usual manner, according to the
capabilities of its driver. "suspend" means the device capabilities of its driver.
is forced into a suspended state and it will not autoresume
in response to I/O requests. However remote-wakeup requests
from the device may still be enabled (the remote-wakeup
setting is controlled separately by the power/wakeup
attribute).
During normal use, devices should be left in the "auto" During normal use, devices should be left in the "auto"
level. The other levels are meant for administrative uses. level. The "on" level is meant for administrative uses.
If you want to suspend a device immediately but leave it If you want to suspend a device immediately but leave it
free to wake up in response to I/O requests, you should free to wake up in response to I/O requests, you should
write "0" to power/autosuspend. write "0" to power/autosuspend.
Device not capable of proper suspend and resume should be
left in the "on" level. Although the USB spec requires
devices to support suspend/resume, many of them do not.
In fact so many don't that by default, the USB core
initializes all non-hub devices in the "on" level. Some
drivers may change this setting when they are bound.
What: /sys/bus/usb/devices/.../power/persist What: /sys/bus/usb/devices/.../power/persist
Date: May 2007 Date: May 2007
KernelVersion: 2.6.23 KernelVersion: 2.6.23
......
...@@ -71,12 +71,10 @@ being accessed through sysfs, then it definitely is idle. ...@@ -71,12 +71,10 @@ being accessed through sysfs, then it definitely is idle.
Forms of dynamic PM Forms of dynamic PM
------------------- -------------------
Dynamic suspends can occur in two ways: manual and automatic. Dynamic suspends occur when the kernel decides to suspend an idle
"Manual" means that the user has told the kernel to suspend a device, device. This is called "autosuspend" for short. In general, a device
whereas "automatic" means that the kernel has decided all by itself to won't be autosuspended unless it has been idle for some minimum period
suspend a device. Automatic suspend is called "autosuspend" for of time, the so-called idle-delay time.
short. In general, a device won't be autosuspended unless it has been
idle for some minimum period of time, the so-called idle-delay time.
Of course, nothing the kernel does on its own initiative should Of course, nothing the kernel does on its own initiative should
prevent the computer or its devices from working properly. If a prevent the computer or its devices from working properly. If a
...@@ -96,10 +94,11 @@ idle. ...@@ -96,10 +94,11 @@ idle.
We can categorize power management events in two broad classes: We can categorize power management events in two broad classes:
external and internal. External events are those triggered by some external and internal. External events are those triggered by some
agent outside the USB stack: system suspend/resume (triggered by agent outside the USB stack: system suspend/resume (triggered by
userspace), manual dynamic suspend/resume (also triggered by userspace), manual dynamic resume (also triggered by userspace), and
userspace), and remote wakeup (triggered by the device). Internal remote wakeup (triggered by the device). Internal events are those
events are those triggered within the USB stack: autosuspend and triggered within the USB stack: autosuspend and autoresume. Note that
autoresume. all dynamic suspend events are internal; external agents are not
allowed to issue dynamic suspends.
The user interface for dynamic PM The user interface for dynamic PM
...@@ -145,9 +144,9 @@ relevant attribute files are: wakeup, level, and autosuspend. ...@@ -145,9 +144,9 @@ relevant attribute files are: wakeup, level, and autosuspend.
number of seconds the device should remain idle before number of seconds the device should remain idle before
the kernel will autosuspend it (the idle-delay time). the kernel will autosuspend it (the idle-delay time).
The default is 2. 0 means to autosuspend as soon as The default is 2. 0 means to autosuspend as soon as
the device becomes idle, and -1 means never to the device becomes idle, and negative values mean
autosuspend. You can write a number to the file to never to autosuspend. You can write a number to the
change the autosuspend idle-delay time. file to change the autosuspend idle-delay time.
Writing "-1" to power/autosuspend and writing "on" to power/level do Writing "-1" to power/autosuspend and writing "on" to power/level do
essentially the same thing -- they both prevent the device from being essentially the same thing -- they both prevent the device from being
...@@ -377,9 +376,9 @@ the device hasn't been idle for long enough, a delayed workqueue ...@@ -377,9 +376,9 @@ the device hasn't been idle for long enough, a delayed workqueue
routine is automatically set up to carry out the operation when the routine is automatically set up to carry out the operation when the
autosuspend idle-delay has expired. autosuspend idle-delay has expired.
Autoresume attempts also can fail. This will happen if power/level is Autoresume attempts also can fail, although failure would mean that
set to "suspend" or if the device doesn't manage to resume properly. the device is no longer present or operating properly. Unlike
Unlike autosuspend, there's no delay for an autoresume. autosuspend, there's no delay for an autoresume.
Other parts of the driver interface Other parts of the driver interface
...@@ -527,13 +526,3 @@ succeed, it may still remain active and thus cause the system to ...@@ -527,13 +526,3 @@ succeed, it may still remain active and thus cause the system to
resume as soon as the system suspend is complete. Or the remote resume as soon as the system suspend is complete. Or the remote
wakeup may fail and get lost. Which outcome occurs depends on timing wakeup may fail and get lost. Which outcome occurs depends on timing
and on the hardware and firmware design. and on the hardware and firmware design.
More interestingly, a device might undergo a manual resume or
autoresume during system suspend. With current kernels this shouldn't
happen, because manual resumes must be initiated by userspace and
autoresumes happen in response to I/O requests, but all user processes
and I/O should be quiescent during a system suspend -- thanks to the
freezer. However there are plans to do away with the freezer, which
would mean these things would become possible. If and when this comes
about, the USB core will carefully arrange matters so that either type
of resume will block until the entire system has resumed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment