diff options
author | Rafael J. Wysocki <rjw@sisk.pl> | 2010-01-23 22:25:15 +0100 |
---|---|---|
committer | Rafael J. Wysocki <rjw@sisk.pl> | 2010-02-26 20:39:10 +0100 |
commit | 0e06b4a891c6a108412fe24b4500f499da2cf8a1 (patch) | |
tree | ed254631bdc24e676b95b633d310b284a2df9c45 /drivers/base | |
parent | 5af84b82701a96be4b033aaa51d86c72e2ded061 (diff) | |
download | linux-0e06b4a891c6a108412fe24b4500f499da2cf8a1.tar.gz linux-0e06b4a891c6a108412fe24b4500f499da2cf8a1.tar.bz2 linux-0e06b4a891c6a108412fe24b4500f499da2cf8a1.zip |
PM: Add a switch for disabling/enabling asynchronous suspend/resume
Add sysfs attribute /sys/power/pm_async allowing the user space to
disable/enable asynchronous suspend/resume of devices.
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Diffstat (limited to 'drivers/base')
-rw-r--r-- | drivers/base/power/main.c | 7 | ||||
-rw-r--r-- | drivers/base/power/power.h | 6 |
2 files changed, 7 insertions, 6 deletions
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c index 3b44c201ddad..7e79201b09bb 100644 --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c @@ -201,7 +201,7 @@ static void dpm_wait(struct device *dev, bool async) if (!dev) return; - if (async || dev->power.async_suspend) + if (async || (pm_async_enabled && dev->power.async_suspend)) wait_for_completion(&dev->power.completion); } @@ -563,7 +563,8 @@ static int device_resume(struct device *dev) { INIT_COMPLETION(dev->power.completion); - if (dev->power.async_suspend && !pm_trace_is_enabled()) { + if (pm_async_enabled && dev->power.async_suspend + && !pm_trace_is_enabled()) { get_device(dev); async_schedule(async_resume, dev); return 0; @@ -867,7 +868,7 @@ static int device_suspend(struct device *dev) { INIT_COMPLETION(dev->power.completion); - if (dev->power.async_suspend) { + if (pm_async_enabled && dev->power.async_suspend) { get_device(dev); async_schedule(async_suspend, dev); return 0; diff --git a/drivers/base/power/power.h b/drivers/base/power/power.h index b8fa1aa5225a..c0bd03c83b9c 100644 --- a/drivers/base/power/power.h +++ b/drivers/base/power/power.h @@ -12,10 +12,10 @@ static inline void pm_runtime_remove(struct device *dev) {} #ifdef CONFIG_PM_SLEEP -/* - * main.c - */ +/* kernel/power/main.c */ +extern int pm_async_enabled; +/* drivers/base/power/main.c */ extern struct list_head dpm_list; /* The active device list */ static inline struct device *to_device(struct list_head *entry) |