diff options
Diffstat (limited to 'Documentation/power/devices.txt')
-rw-r--r-- | Documentation/power/devices.txt | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/Documentation/power/devices.txt b/Documentation/power/devices.txt index dd9b49251db3..df1a5cb10c42 100644 --- a/Documentation/power/devices.txt +++ b/Documentation/power/devices.txt | |||
@@ -1,6 +1,6 @@ | |||
1 | Device Power Management | 1 | Device Power Management |
2 | 2 | ||
3 | Copyright (c) 2010 Rafael J. Wysocki <rjw@sisk.pl>, Novell Inc. | 3 | Copyright (c) 2010-2011 Rafael J. Wysocki <rjw@sisk.pl>, Novell Inc. |
4 | Copyright (c) 2010 Alan Stern <stern@rowland.harvard.edu> | 4 | Copyright (c) 2010 Alan Stern <stern@rowland.harvard.edu> |
5 | 5 | ||
6 | 6 | ||
@@ -507,6 +507,49 @@ routines. Nevertheless, different callback pointers are used in case there is a | |||
507 | situation where it actually matters. | 507 | situation where it actually matters. |
508 | 508 | ||
509 | 509 | ||
510 | Device Power Domains | ||
511 | -------------------- | ||
512 | Sometimes devices share reference clocks or other power resources. In those | ||
513 | cases it generally is not possible to put devices into low-power states | ||
514 | individually. Instead, a set of devices sharing a power resource can be put | ||
515 | into a low-power state together at the same time by turning off the shared | ||
516 | power resource. Of course, they also need to be put into the full-power state | ||
517 | together, by turning the shared power resource on. A set of devices with this | ||
518 | property is often referred to as a power domain. | ||
519 | |||
520 | Support for power domains is provided through the pwr_domain field of struct | ||
521 | device. This field is a pointer to an object of type struct dev_power_domain, | ||
522 | defined in include/linux/pm.h, providing a set of power management callbacks | ||
523 | analogous to the subsystem-level and device driver callbacks that are executed | ||
524 | for the given device during all power transitions, in addition to the respective | ||
525 | subsystem-level callbacks. Specifically, the power domain "suspend" callbacks | ||
526 | (i.e. ->runtime_suspend(), ->suspend(), ->freeze(), ->poweroff(), etc.) are | ||
527 | executed after the analogous subsystem-level callbacks, while the power domain | ||
528 | "resume" callbacks (i.e. ->runtime_resume(), ->resume(), ->thaw(), ->restore, | ||
529 | etc.) are executed before the analogous subsystem-level callbacks. Error codes | ||
530 | returned by the "suspend" and "resume" power domain callbacks are ignored. | ||
531 | |||
532 | Power domain ->runtime_idle() callback is executed before the subsystem-level | ||
533 | ->runtime_idle() callback and the result returned by it is not ignored. Namely, | ||
534 | if it returns error code, the subsystem-level ->runtime_idle() callback will not | ||
535 | be called and the helper function rpm_idle() executing it will return error | ||
536 | code. This mechanism is intended to help platforms where saving device state | ||
537 | is a time consuming operation and should only be carried out if all devices | ||
538 | in the power domain are idle, before turning off the shared power resource(s). | ||
539 | Namely, the power domain ->runtime_idle() callback may return error code until | ||
540 | the pm_runtime_idle() helper (or its asychronous version) has been called for | ||
541 | all devices in the power domain (it is recommended that the returned error code | ||
542 | be -EBUSY in those cases), preventing the subsystem-level ->runtime_idle() | ||
543 | callback from being run prematurely. | ||
544 | |||
545 | The support for device power domains is only relevant to platforms needing to | ||
546 | use the same subsystem-level (e.g. platform bus type) and device driver power | ||
547 | management callbacks in many different power domain configurations and wanting | ||
548 | to avoid incorporating the support for power domains into the subsystem-level | ||
549 | callbacks. The other platforms need not implement it or take it into account | ||
550 | in any way. | ||
551 | |||
552 | |||
510 | System Devices | 553 | System Devices |
511 | -------------- | 554 | -------------- |
512 | System devices (sysdevs) follow a slightly different API, which can be found in | 555 | System devices (sysdevs) follow a slightly different API, which can be found in |