|
@@ -118,10 +118,18 @@ static bool valid_state(suspend_state_t state)
|
|
|
*/
|
|
|
static bool relative_states;
|
|
|
|
|
|
+void __init pm_states_init(void)
|
|
|
+{
|
|
|
+ /*
|
|
|
+ * freeze state should be supported even without any suspend_ops,
|
|
|
+ * initialize pm_states accordingly here
|
|
|
+ */
|
|
|
+ pm_states[PM_SUSPEND_FREEZE] = pm_labels[relative_states ? 0 : 2];
|
|
|
+}
|
|
|
+
|
|
|
static int __init sleep_states_setup(char *str)
|
|
|
{
|
|
|
relative_states = !strncmp(str, "1", 1);
|
|
|
- pm_states[PM_SUSPEND_FREEZE] = pm_labels[relative_states ? 0 : 2];
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
@@ -211,7 +219,7 @@ static int platform_suspend_begin(suspend_state_t state)
|
|
|
{
|
|
|
if (state == PM_SUSPEND_FREEZE && freeze_ops && freeze_ops->begin)
|
|
|
return freeze_ops->begin();
|
|
|
- else if (suspend_ops->begin)
|
|
|
+ else if (suspend_ops && suspend_ops->begin)
|
|
|
return suspend_ops->begin(state);
|
|
|
else
|
|
|
return 0;
|
|
@@ -221,7 +229,7 @@ static void platform_resume_end(suspend_state_t state)
|
|
|
{
|
|
|
if (state == PM_SUSPEND_FREEZE && freeze_ops && freeze_ops->end)
|
|
|
freeze_ops->end();
|
|
|
- else if (suspend_ops->end)
|
|
|
+ else if (suspend_ops && suspend_ops->end)
|
|
|
suspend_ops->end();
|
|
|
}
|
|
|
|