|
@@ -55,6 +55,8 @@ enum {
|
|
|
|
|
|
static int hibernation_mode = HIBERNATION_SHUTDOWN;
|
|
|
|
|
|
+static bool freezer_test_done;
|
|
|
+
|
|
|
static const struct platform_hibernation_ops *hibernation_ops;
|
|
|
|
|
|
/**
|
|
@@ -347,6 +349,17 @@ int hibernation_snapshot(int platform_mode)
|
|
|
if (error)
|
|
|
goto Close;
|
|
|
|
|
|
+ if (hibernation_test(TEST_FREEZER) ||
|
|
|
+ hibernation_testmode(HIBERNATION_TESTPROC)) {
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Indicate to the caller that we are returning due to a
|
|
|
+ * successful freezer test.
|
|
|
+ */
|
|
|
+ freezer_test_done = true;
|
|
|
+ goto Close;
|
|
|
+ }
|
|
|
+
|
|
|
error = dpm_prepare(PMSG_FREEZE);
|
|
|
if (error)
|
|
|
goto Complete_devices;
|
|
@@ -641,15 +654,13 @@ int hibernate(void)
|
|
|
if (error)
|
|
|
goto Finish;
|
|
|
|
|
|
- if (hibernation_test(TEST_FREEZER))
|
|
|
- goto Thaw;
|
|
|
-
|
|
|
- if (hibernation_testmode(HIBERNATION_TESTPROC))
|
|
|
- goto Thaw;
|
|
|
-
|
|
|
error = hibernation_snapshot(hibernation_mode == HIBERNATION_PLATFORM);
|
|
|
if (error)
|
|
|
goto Thaw;
|
|
|
+ if (freezer_test_done) {
|
|
|
+ freezer_test_done = false;
|
|
|
+ goto Thaw;
|
|
|
+ }
|
|
|
|
|
|
if (in_suspend) {
|
|
|
unsigned int flags = 0;
|