OSDN Git Service

PM: Enable early suspend through /sys/power/state
authorArve Hjønnevåg <arve@android.com>
Fri, 10 Oct 2008 02:17:11 +0000 (19:17 -0700)
committerIliyan Malchev <malchev@google.com>
Mon, 23 May 2011 22:41:25 +0000 (15:41 -0700)
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.

kernel/power/main.c
kernel/power/suspend.c

index de9aef8..2d74f7b 100644 (file)
@@ -170,7 +170,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;
@@ -192,8 +196,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;
index 6275970..98df771 100644 (file)
@@ -28,6 +28,9 @@
 #include "power.h"
 
 const char *const pm_states[PM_SUSPEND_MAX] = {
+#ifdef CONFIG_EARLYSUSPEND
+       [PM_SUSPEND_ON]         = "on",
+#endif
        [PM_SUSPEND_STANDBY]    = "standby",
        [PM_SUSPEND_MEM]        = "mem",
 };