diff options
Diffstat (limited to 'kernel/power/suspend.c')
-rw-r--r-- | kernel/power/suspend.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c index 0acab9d7f96f..1e7f5da648d9 100644 --- a/kernel/power/suspend.c +++ b/kernel/power/suspend.c | |||
@@ -118,10 +118,18 @@ static bool valid_state(suspend_state_t state) | |||
118 | */ | 118 | */ |
119 | static bool relative_states; | 119 | static bool relative_states; |
120 | 120 | ||
121 | void __init pm_states_init(void) | ||
122 | { | ||
123 | /* | ||
124 | * freeze state should be supported even without any suspend_ops, | ||
125 | * initialize pm_states accordingly here | ||
126 | */ | ||
127 | pm_states[PM_SUSPEND_FREEZE] = pm_labels[relative_states ? 0 : 2]; | ||
128 | } | ||
129 | |||
121 | static int __init sleep_states_setup(char *str) | 130 | static int __init sleep_states_setup(char *str) |
122 | { | 131 | { |
123 | relative_states = !strncmp(str, "1", 1); | 132 | relative_states = !strncmp(str, "1", 1); |
124 | pm_states[PM_SUSPEND_FREEZE] = pm_labels[relative_states ? 0 : 2]; | ||
125 | return 1; | 133 | return 1; |
126 | } | 134 | } |
127 | 135 | ||
@@ -211,7 +219,7 @@ static int platform_suspend_begin(suspend_state_t state) | |||
211 | { | 219 | { |
212 | if (state == PM_SUSPEND_FREEZE && freeze_ops && freeze_ops->begin) | 220 | if (state == PM_SUSPEND_FREEZE && freeze_ops && freeze_ops->begin) |
213 | return freeze_ops->begin(); | 221 | return freeze_ops->begin(); |
214 | else if (suspend_ops->begin) | 222 | else if (suspend_ops && suspend_ops->begin) |
215 | return suspend_ops->begin(state); | 223 | return suspend_ops->begin(state); |
216 | else | 224 | else |
217 | return 0; | 225 | return 0; |
@@ -221,7 +229,7 @@ static void platform_resume_end(suspend_state_t state) | |||
221 | { | 229 | { |
222 | if (state == PM_SUSPEND_FREEZE && freeze_ops && freeze_ops->end) | 230 | if (state == PM_SUSPEND_FREEZE && freeze_ops && freeze_ops->end) |
223 | freeze_ops->end(); | 231 | freeze_ops->end(); |
224 | else if (suspend_ops->end) | 232 | else if (suspend_ops && suspend_ops->end) |
225 | suspend_ops->end(); | 233 | suspend_ops->end(); |
226 | } | 234 | } |
227 | 235 | ||