diff options
author | Rafael J. Wysocki <rjw@sisk.pl> | 2010-01-27 23:47:38 +0100 |
---|---|---|
committer | Rafael J. Wysocki <rjw@sisk.pl> | 2010-02-26 20:39:11 +0100 |
commit | f8824cee405c62ba465b85365201166d9cf86a14 (patch) | |
tree | 90020be3264ff98bad2f14759127a2d9693673d8 /drivers/base | |
parent | 97df8c12995c5bac73e3bfeea4c5be155c1f4401 (diff) | |
download | kernel_goldelico_gta04-f8824cee405c62ba465b85365201166d9cf86a14.zip kernel_goldelico_gta04-f8824cee405c62ba465b85365201166d9cf86a14.tar.gz kernel_goldelico_gta04-f8824cee405c62ba465b85365201166d9cf86a14.tar.bz2 |
PM: Allow device drivers to use dpm_wait()
There are some dependencies between devices (in particular, between
EHCI USB controllers and their OHCI/UHCI siblings) which are not
reflected by the structure of the device tree. With synchronous
suspend and resume these dependencies are taken into accout
automatically, because the devices in question are always registered
in the right order, but to meet these constraints with asynchronous
suspend and resume the drivers of these devices will need to use
dpm_wait() in their suspend/resume routines, so introduce a helper
function allowing them to do that.
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Diffstat (limited to 'drivers/base')
-rw-r--r-- | drivers/base/power/main.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c index 6efef9f..0e26a6f 100644 --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c @@ -1046,3 +1046,14 @@ void __suspend_report_result(const char *function, void *fn, int ret) printk(KERN_ERR "%s(): %pF returns %d\n", function, fn, ret); } EXPORT_SYMBOL_GPL(__suspend_report_result); + +/** + * device_pm_wait_for_dev - Wait for suspend/resume of a device to complete. + * @dev: Device to wait for. + * @subordinate: Device that needs to wait for @dev. + */ +void device_pm_wait_for_dev(struct device *subordinate, struct device *dev) +{ + dpm_wait(dev, subordinate->power.async_suspend); +} +EXPORT_SYMBOL_GPL(device_pm_wait_for_dev); |