aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/base
diff options
context:
space:
mode:
authorRafael J. Wysocki <rjw@sisk.pl>2010-01-23 16:25:15 -0500
committerRafael J. Wysocki <rjw@sisk.pl>2010-02-26 14:39:10 -0500
commit0e06b4a891c6a108412fe24b4500f499da2cf8a1 (patch)
treeed254631bdc24e676b95b633d310b284a2df9c45 /drivers/base
parent5af84b82701a96be4b033aaa51d86c72e2ded061 (diff)
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.c7
-rw-r--r--drivers/base/power/power.h6
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)
201 if (!dev) 201 if (!dev)
202 return; 202 return;
203 203
204 if (async || dev->power.async_suspend) 204 if (async || (pm_async_enabled && dev->power.async_suspend))
205 wait_for_completion(&dev->power.completion); 205 wait_for_completion(&dev->power.completion);
206} 206}
207 207
@@ -563,7 +563,8 @@ static int device_resume(struct device *dev)
563{ 563{
564 INIT_COMPLETION(dev->power.completion); 564 INIT_COMPLETION(dev->power.completion);
565 565
566 if (dev->power.async_suspend && !pm_trace_is_enabled()) { 566 if (pm_async_enabled && dev->power.async_suspend
567 && !pm_trace_is_enabled()) {
567 get_device(dev); 568 get_device(dev);
568 async_schedule(async_resume, dev); 569 async_schedule(async_resume, dev);
569 return 0; 570 return 0;
@@ -867,7 +868,7 @@ static int device_suspend(struct device *dev)
867{ 868{
868 INIT_COMPLETION(dev->power.completion); 869 INIT_COMPLETION(dev->power.completion);
869 870
870 if (dev->power.async_suspend) { 871 if (pm_async_enabled && dev->power.async_suspend) {
871 get_device(dev); 872 get_device(dev);
872 async_schedule(async_suspend, dev); 873 async_schedule(async_suspend, dev);
873 return 0; 874 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) {}
12 12
13#ifdef CONFIG_PM_SLEEP 13#ifdef CONFIG_PM_SLEEP
14 14
15/* 15/* kernel/power/main.c */
16 * main.c 16extern int pm_async_enabled;
17 */
18 17
18/* drivers/base/power/main.c */
19extern struct list_head dpm_list; /* The active device list */ 19extern struct list_head dpm_list; /* The active device list */
20 20
21static inline struct device *to_device(struct list_head *entry) 21static inline struct device *to_device(struct list_head *entry)