diff options
| author | Rafael J. Wysocki <rjw@sisk.pl> | 2010-01-23 16:25:15 -0500 |
|---|---|---|
| committer | Rafael J. Wysocki <rjw@sisk.pl> | 2010-02-26 14:39:10 -0500 |
| commit | 0e06b4a891c6a108412fe24b4500f499da2cf8a1 (patch) | |
| tree | ed254631bdc24e676b95b633d310b284a2df9c45 /drivers/base | |
| parent | 5af84b82701a96be4b033aaa51d86c72e2ded061 (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.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) | |||
| 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 | 16 | extern int pm_async_enabled; |
| 17 | */ | ||
| 18 | 17 | ||
| 18 | /* drivers/base/power/main.c */ | ||
| 19 | extern struct list_head dpm_list; /* The active device list */ | 19 | extern struct list_head dpm_list; /* The active device list */ |
| 20 | 20 | ||
| 21 | static inline struct device *to_device(struct list_head *entry) | 21 | static inline struct device *to_device(struct list_head *entry) |
