PM / sleep: support mem_lite/mem_ultra mode

Change-Id: Iab2e11a2f63b1a3f38c1c9b6c4b675ee2660f244
Signed-off-by: XiaoDong Huang <derrick.huang@rock-chips.com>
This commit is contained in:
XiaoDong Huang
2021-01-20 16:04:51 +08:00
committed by Tao Huang
parent 23de275f5e
commit 362667b0e3
3 changed files with 10 additions and 1 deletions

View File

@@ -37,8 +37,10 @@ typedef int __bitwise suspend_state_t;
#define PM_SUSPEND_TO_IDLE ((__force suspend_state_t) 1)
#define PM_SUSPEND_STANDBY ((__force suspend_state_t) 2)
#define PM_SUSPEND_MEM ((__force suspend_state_t) 3)
#define PM_SUSPEND_MEM_LITE ((__force suspend_state_t) 4)
#define PM_SUSPEND_MEM_ULTRA ((__force suspend_state_t) 5)
#define PM_SUSPEND_MIN PM_SUSPEND_TO_IDLE
#define PM_SUSPEND_MAX ((__force suspend_state_t) 4)
#define PM_SUSPEND_MAX ((__force suspend_state_t) 6)
enum suspend_stat_step {
SUSPEND_FREEZE = 1,

View File

@@ -615,6 +615,9 @@ static ssize_t state_store(struct kobject *kobj, struct kobj_attribute *attr,
if (state == PM_SUSPEND_MEM)
state = mem_sleep_current;
if (state == PM_SUSPEND_MEM_LITE || state == PM_SUSPEND_MEM_ULTRA)
state = PM_SUSPEND_MEM;
error = pm_suspend(state);
} else if (state == PM_SUSPEND_MAX) {
error = hibernate();

View File

@@ -46,6 +46,8 @@ static const char * const mem_sleep_labels[] = {
[PM_SUSPEND_TO_IDLE] = "s2idle",
[PM_SUSPEND_STANDBY] = "shallow",
[PM_SUSPEND_MEM] = "deep",
[PM_SUSPEND_MEM_LITE] = "lite",
[PM_SUSPEND_MEM_ULTRA] = "ultra",
};
const char *mem_sleep_states[PM_SUSPEND_MAX];
@@ -230,6 +232,8 @@ void suspend_set_ops(const struct platform_suspend_ops *ops)
}
if (valid_state(PM_SUSPEND_MEM)) {
mem_sleep_states[PM_SUSPEND_MEM] = mem_sleep_labels[PM_SUSPEND_MEM];
mem_sleep_states[PM_SUSPEND_MEM_LITE] = mem_sleep_labels[PM_SUSPEND_MEM_LITE];
mem_sleep_states[PM_SUSPEND_MEM_ULTRA] = mem_sleep_labels[PM_SUSPEND_MEM_ULTRA];
if (mem_sleep_default >= PM_SUSPEND_MEM)
mem_sleep_current = PM_SUSPEND_MEM;
}