diff options
author | Arve Hjønnevåg <arve@android.com> | 2008-10-09 19:17:11 -0700 |
---|---|---|
committer | Arve Hjønnevåg <arve@android.com> | 2009-04-07 16:43:03 -0700 |
commit | 7b236e69bb4403f20fbdef81907d46b4d32d4af8 (patch) | |
tree | 289401339bcafae4f450214236e2fad651a2e66f /kernel | |
parent | 2d4a25785ad1aa51bad967543e1ab20e9ed4a046 (diff) |
PM: Enable early suspend through /sys/power/state
If EARLYSUSPEND is enabled then writes to /sys/power/state no longer
blocks, and the kernel will try to enter the requested state every
time no wakelocks are held. Write "on" to resume normal operation.
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/power/main.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/kernel/power/main.c b/kernel/power/main.c index c9632f841f64..c1bd503acdc4 100644 --- a/kernel/power/main.c +++ b/kernel/power/main.c @@ -392,6 +392,9 @@ static void suspend_finish(void) static const char * const pm_states[PM_SUSPEND_MAX] = { +#ifdef CONFIG_EARLYSUSPEND + [PM_SUSPEND_ON] = "on", +#endif [PM_SUSPEND_STANDBY] = "standby", [PM_SUSPEND_MEM] = "mem", }; @@ -509,7 +512,11 @@ static ssize_t state_store(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t n) { #ifdef CONFIG_SUSPEND +#ifdef CONFIG_EARLYSUSPEND + suspend_state_t state = PM_SUSPEND_ON; +#else suspend_state_t state = PM_SUSPEND_STANDBY; +#endif const char * const *s; #endif char *p; @@ -531,8 +538,15 @@ static ssize_t state_store(struct kobject *kobj, struct kobj_attribute *attr, break; } if (state < PM_SUSPEND_MAX && *s) +#ifdef CONFIG_EARLYSUSPEND + if (state == PM_SUSPEND_ON || valid_state(state)) { + error = 0; + request_suspend_state(state); + } +#else error = enter_state(state); #endif +#endif Exit: return error ? error : n; |