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