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; }