diff options
| author | Alan Stern <stern@rowland.harvard.edu> | 2009-12-08 15:49:48 -0500 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-12-23 14:34:09 -0500 |
| commit | baf67741bf52b985e318bed3c4acadcda5351e08 (patch) | |
| tree | 3f80d00eaf81b1a547b0bc2c55c14cdcd1f5bc0d /Documentation | |
| parent | f42ecb2808db5386f983d593a7c08d3ea3b94a27 (diff) | |
USB: power management documentation update
This patch (as1313) updates the documentation concerning USB power
management.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'Documentation')
| -rw-r--r-- | Documentation/ABI/testing/sysfs-bus-usb | 18 | ||||
| -rw-r--r-- | Documentation/usb/power-management.txt | 41 |
2 files changed, 25 insertions, 34 deletions
diff --git a/Documentation/ABI/testing/sysfs-bus-usb b/Documentation/ABI/testing/sysfs-bus-usb index deb6b489e4e5..a07c0f366f91 100644 --- a/Documentation/ABI/testing/sysfs-bus-usb +++ b/Documentation/ABI/testing/sysfs-bus-usb | |||
| @@ -21,25 +21,27 @@ Contact: Alan Stern <stern@rowland.harvard.edu> | |||
| 21 | Description: | 21 | Description: |
| 22 | Each USB device directory will contain a file named | 22 | Each USB device directory will contain a file named |
| 23 | power/level. This file holds a power-level setting for | 23 | power/level. This file holds a power-level setting for |
| 24 | the device, one of "on", "auto", or "suspend". | 24 | the device, either "on" or "auto". |
| 25 | 25 | ||
| 26 | "on" means that the device is not allowed to autosuspend, | 26 | "on" means that the device is not allowed to autosuspend, |
| 27 | although normal suspends for system sleep will still | 27 | although normal suspends for system sleep will still |
| 28 | be honored. "auto" means the device will autosuspend | 28 | be honored. "auto" means the device will autosuspend |
| 29 | and autoresume in the usual manner, according to the | 29 | and autoresume in the usual manner, according to the |
| 30 | capabilities of its driver. "suspend" means the device | 30 | capabilities of its driver. |
| 31 | is forced into a suspended state and it will not autoresume | ||
| 32 | in response to I/O requests. However remote-wakeup requests | ||
| 33 | from the device may still be enabled (the remote-wakeup | ||
| 34 | setting is controlled separately by the power/wakeup | ||
| 35 | attribute). | ||
| 36 | 31 | ||
| 37 | During normal use, devices should be left in the "auto" | 32 | During normal use, devices should be left in the "auto" |
| 38 | level. The other levels are meant for administrative uses. | 33 | level. The "on" level is meant for administrative uses. |
| 39 | If you want to suspend a device immediately but leave it | 34 | If you want to suspend a device immediately but leave it |
| 40 | free to wake up in response to I/O requests, you should | 35 | free to wake up in response to I/O requests, you should |
| 41 | write "0" to power/autosuspend. | 36 | write "0" to power/autosuspend. |
| 42 | 37 | ||
| 38 | Device not capable of proper suspend and resume should be | ||
| 39 | left in the "on" level. Although the USB spec requires | ||
| 40 | devices to support suspend/resume, many of them do not. | ||
| 41 | In fact so many don't that by default, the USB core | ||
| 42 | initializes all non-hub devices in the "on" level. Some | ||
| 43 | drivers may change this setting when they are bound. | ||
| 44 | |||
| 43 | What: /sys/bus/usb/devices/.../power/persist | 45 | What: /sys/bus/usb/devices/.../power/persist |
| 44 | Date: May 2007 | 46 | Date: May 2007 |
| 45 | KernelVersion: 2.6.23 | 47 | KernelVersion: 2.6.23 |
diff --git a/Documentation/usb/power-management.txt b/Documentation/usb/power-management.txt index c7c1dc2f8017..3bf6818c8cf5 100644 --- a/Documentation/usb/power-management.txt +++ b/Documentation/usb/power-management.txt | |||
| @@ -71,12 +71,10 @@ being accessed through sysfs, then it definitely is idle. | |||
| 71 | Forms of dynamic PM | 71 | Forms of dynamic PM |
| 72 | ------------------- | 72 | ------------------- |
| 73 | 73 | ||
| 74 | Dynamic suspends can occur in two ways: manual and automatic. | 74 | Dynamic suspends occur when the kernel decides to suspend an idle |
| 75 | "Manual" means that the user has told the kernel to suspend a device, | 75 | device. This is called "autosuspend" for short. In general, a device |
| 76 | whereas "automatic" means that the kernel has decided all by itself to | 76 | won't be autosuspended unless it has been idle for some minimum period |
| 77 | suspend a device. Automatic suspend is called "autosuspend" for | 77 | of time, the so-called idle-delay time. |
| 78 | short. In general, a device won't be autosuspended unless it has been | ||
| 79 | idle for some minimum period of time, the so-called idle-delay time. | ||
| 80 | 78 | ||
| 81 | Of course, nothing the kernel does on its own initiative should | 79 | Of course, nothing the kernel does on its own initiative should |
| 82 | prevent the computer or its devices from working properly. If a | 80 | prevent the computer or its devices from working properly. If a |
| @@ -96,10 +94,11 @@ idle. | |||
| 96 | We can categorize power management events in two broad classes: | 94 | We can categorize power management events in two broad classes: |
| 97 | external and internal. External events are those triggered by some | 95 | external and internal. External events are those triggered by some |
| 98 | agent outside the USB stack: system suspend/resume (triggered by | 96 | agent outside the USB stack: system suspend/resume (triggered by |
| 99 | userspace), manual dynamic suspend/resume (also triggered by | 97 | userspace), manual dynamic resume (also triggered by userspace), and |
| 100 | userspace), and remote wakeup (triggered by the device). Internal | 98 | remote wakeup (triggered by the device). Internal events are those |
| 101 | events are those triggered within the USB stack: autosuspend and | 99 | triggered within the USB stack: autosuspend and autoresume. Note that |
| 102 | autoresume. | 100 | all dynamic suspend events are internal; external agents are not |
| 101 | allowed to issue dynamic suspends. | ||
| 103 | 102 | ||
| 104 | 103 | ||
| 105 | The user interface for dynamic PM | 104 | The user interface for dynamic PM |
| @@ -145,9 +144,9 @@ relevant attribute files are: wakeup, level, and autosuspend. | |||
| 145 | number of seconds the device should remain idle before | 144 | number of seconds the device should remain idle before |
| 146 | the kernel will autosuspend it (the idle-delay time). | 145 | the kernel will autosuspend it (the idle-delay time). |
| 147 | The default is 2. 0 means to autosuspend as soon as | 146 | The default is 2. 0 means to autosuspend as soon as |
| 148 | the device becomes idle, and -1 means never to | 147 | the device becomes idle, and negative values mean |
| 149 | autosuspend. You can write a number to the file to | 148 | never to autosuspend. You can write a number to the |
| 150 | change the autosuspend idle-delay time. | 149 | file to change the autosuspend idle-delay time. |
| 151 | 150 | ||
| 152 | Writing "-1" to power/autosuspend and writing "on" to power/level do | 151 | Writing "-1" to power/autosuspend and writing "on" to power/level do |
| 153 | essentially the same thing -- they both prevent the device from being | 152 | 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 | routine is automatically set up to carry out the operation when the | 376 | routine is automatically set up to carry out the operation when the |
| 378 | autosuspend idle-delay has expired. | 377 | autosuspend idle-delay has expired. |
| 379 | 378 | ||
| 380 | Autoresume attempts also can fail. This will happen if power/level is | 379 | Autoresume attempts also can fail, although failure would mean that |
| 381 | set to "suspend" or if the device doesn't manage to resume properly. | 380 | the device is no longer present or operating properly. Unlike |
| 382 | Unlike autosuspend, there's no delay for an autoresume. | 381 | autosuspend, there's no delay for an autoresume. |
| 383 | 382 | ||
| 384 | 383 | ||
| 385 | Other parts of the driver interface | 384 | Other parts of the driver interface |
| @@ -527,13 +526,3 @@ succeed, it may still remain active and thus cause the system to | |||
| 527 | resume as soon as the system suspend is complete. Or the remote | 526 | resume as soon as the system suspend is complete. Or the remote |
| 528 | wakeup may fail and get lost. Which outcome occurs depends on timing | 527 | wakeup may fail and get lost. Which outcome occurs depends on timing |
| 529 | and on the hardware and firmware design. | 528 | and on the hardware and firmware design. |
| 530 | |||
| 531 | More interestingly, a device might undergo a manual resume or | ||
| 532 | autoresume during system suspend. With current kernels this shouldn't | ||
| 533 | happen, because manual resumes must be initiated by userspace and | ||
| 534 | autoresumes happen in response to I/O requests, but all user processes | ||
| 535 | and I/O should be quiescent during a system suspend -- thanks to the | ||
| 536 | freezer. However there are plans to do away with the freezer, which | ||
| 537 | would mean these things would become possible. If and when this comes | ||
| 538 | about, the USB core will carefully arrange matters so that either type | ||
| 539 | of resume will block until the entire system has resumed. | ||
