From 362667b0e34f989a5c41fb4ea77eccd7ec0d4c7e Mon Sep 17 00:00:00 2001 From: XiaoDong Huang Date: Wed, 20 Jan 2021 16:04:51 +0800 Subject: [PATCH] PM / sleep: support mem_lite/mem_ultra mode Change-Id: Iab2e11a2f63b1a3f38c1c9b6c4b675ee2660f244 Signed-off-by: XiaoDong Huang --- include/linux/suspend.h | 4 +++- kernel/power/main.c | 3 +++ kernel/power/suspend.c | 4 ++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/include/linux/suspend.h b/include/linux/suspend.h index 71c6110bd551..5ee7e53a3025 100644 --- a/include/linux/suspend.h +++ b/include/linux/suspend.h @@ -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, diff --git a/kernel/power/main.c b/kernel/power/main.c index 1ee81334d689..7c7944cc2d76 100644 --- a/kernel/power/main.c +++ b/kernel/power/main.c @@ -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(); diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c index 365d1e81fed7..ddd508ca2f7c 100644 --- a/kernel/power/suspend.c +++ b/kernel/power/suspend.c @@ -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; }