diff options
author | Rafael J. Wysocki <rjw@sisk.pl> | 2010-07-01 18:14:09 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2010-07-06 22:14:19 -0400 |
commit | c5f7a1bb65bca03253c189e946b3ca79669f08af (patch) | |
tree | b8a85641a64c0c6b28376ac33eb21aa63de592b2 | |
parent | 78f5f023167813130d2cf657d1b9eadc32f0e992 (diff) |
ACPI / Sleep: Consolidate suspend and hibernation routines
Some hibernation and suspend routines can be merged, which reduces
the complexity of code a bit.
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Len Brown <len.brown@intel.com>
-rw-r--r-- | drivers/acpi/sleep.c | 42 |
1 files changed, 16 insertions, 26 deletions
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c index 93441c95c53b..61c5bd03f733 100644 --- a/drivers/acpi/sleep.c +++ b/drivers/acpi/sleep.c | |||
@@ -105,6 +105,16 @@ static int acpi_pm_freeze(void) | |||
105 | } | 105 | } |
106 | 106 | ||
107 | /** | 107 | /** |
108 | * acpi_pre_suspend - Enable wakeup devices, "freeze" EC and save NVS. | ||
109 | */ | ||
110 | static int acpi_pm_pre_suspend(void) | ||
111 | { | ||
112 | acpi_pm_freeze(); | ||
113 | suspend_nvs_save(); | ||
114 | return 0; | ||
115 | } | ||
116 | |||
117 | /** | ||
108 | * __acpi_pm_prepare - Prepare the platform to enter the target state. | 118 | * __acpi_pm_prepare - Prepare the platform to enter the target state. |
109 | * | 119 | * |
110 | * If necessary, set the firmware waking vector and do arch-specific | 120 | * If necessary, set the firmware waking vector and do arch-specific |
@@ -113,11 +123,9 @@ static int acpi_pm_freeze(void) | |||
113 | static int __acpi_pm_prepare(void) | 123 | static int __acpi_pm_prepare(void) |
114 | { | 124 | { |
115 | int error = acpi_sleep_prepare(acpi_target_sleep_state); | 125 | int error = acpi_sleep_prepare(acpi_target_sleep_state); |
116 | |||
117 | suspend_nvs_save(); | ||
118 | |||
119 | if (error) | 126 | if (error) |
120 | acpi_target_sleep_state = ACPI_STATE_S0; | 127 | acpi_target_sleep_state = ACPI_STATE_S0; |
128 | |||
121 | return error; | 129 | return error; |
122 | } | 130 | } |
123 | 131 | ||
@@ -128,9 +136,8 @@ static int __acpi_pm_prepare(void) | |||
128 | static int acpi_pm_prepare(void) | 136 | static int acpi_pm_prepare(void) |
129 | { | 137 | { |
130 | int error = __acpi_pm_prepare(); | 138 | int error = __acpi_pm_prepare(); |
131 | |||
132 | if (!error) | 139 | if (!error) |
133 | acpi_pm_freeze(); | 140 | acpi_pm_pre_suspend(); |
134 | 141 | ||
135 | return error; | 142 | return error; |
136 | } | 143 | } |
@@ -322,9 +329,9 @@ static struct platform_suspend_ops acpi_suspend_ops = { | |||
322 | static int acpi_suspend_begin_old(suspend_state_t pm_state) | 329 | static int acpi_suspend_begin_old(suspend_state_t pm_state) |
323 | { | 330 | { |
324 | int error = acpi_suspend_begin(pm_state); | 331 | int error = acpi_suspend_begin(pm_state); |
325 | |||
326 | if (!error) | 332 | if (!error) |
327 | error = __acpi_pm_prepare(); | 333 | error = __acpi_pm_prepare(); |
334 | |||
328 | return error; | 335 | return error; |
329 | } | 336 | } |
330 | 337 | ||
@@ -335,7 +342,7 @@ static int acpi_suspend_begin_old(suspend_state_t pm_state) | |||
335 | static struct platform_suspend_ops acpi_suspend_ops_old = { | 342 | static struct platform_suspend_ops acpi_suspend_ops_old = { |
336 | .valid = acpi_suspend_state_valid, | 343 | .valid = acpi_suspend_state_valid, |
337 | .begin = acpi_suspend_begin_old, | 344 | .begin = acpi_suspend_begin_old, |
338 | .prepare_late = acpi_pm_freeze, | 345 | .prepare_late = acpi_pm_pre_suspend, |
339 | .enter = acpi_suspend_enter, | 346 | .enter = acpi_suspend_enter, |
340 | .wake = acpi_suspend_finish, | 347 | .wake = acpi_suspend_finish, |
341 | .end = acpi_pm_end, | 348 | .end = acpi_pm_end, |
@@ -423,16 +430,6 @@ static int acpi_hibernation_begin(void) | |||
423 | return error; | 430 | return error; |
424 | } | 431 | } |
425 | 432 | ||
426 | static int acpi_hibernation_pre_snapshot(void) | ||
427 | { | ||
428 | int error = acpi_pm_prepare(); | ||
429 | |||
430 | if (!error) | ||
431 | suspend_nvs_save(); | ||
432 | |||
433 | return error; | ||
434 | } | ||
435 | |||
436 | static int acpi_hibernation_enter(void) | 433 | static int acpi_hibernation_enter(void) |
437 | { | 434 | { |
438 | acpi_status status = AE_OK; | 435 | acpi_status status = AE_OK; |
@@ -480,7 +477,7 @@ static void acpi_pm_thaw(void) | |||
480 | static struct platform_hibernation_ops acpi_hibernation_ops = { | 477 | static struct platform_hibernation_ops acpi_hibernation_ops = { |
481 | .begin = acpi_hibernation_begin, | 478 | .begin = acpi_hibernation_begin, |
482 | .end = acpi_pm_end, | 479 | .end = acpi_pm_end, |
483 | .pre_snapshot = acpi_hibernation_pre_snapshot, | 480 | .pre_snapshot = acpi_pm_prepare, |
484 | .finish = acpi_pm_finish, | 481 | .finish = acpi_pm_finish, |
485 | .prepare = acpi_pm_prepare, | 482 | .prepare = acpi_pm_prepare, |
486 | .enter = acpi_hibernation_enter, | 483 | .enter = acpi_hibernation_enter, |
@@ -516,13 +513,6 @@ static int acpi_hibernation_begin_old(void) | |||
516 | return error; | 513 | return error; |
517 | } | 514 | } |
518 | 515 | ||
519 | static int acpi_hibernation_pre_snapshot_old(void) | ||
520 | { | ||
521 | acpi_pm_freeze(); | ||
522 | suspend_nvs_save(); | ||
523 | return 0; | ||
524 | } | ||
525 | |||
526 | /* | 516 | /* |
527 | * The following callbacks are used if the pre-ACPI 2.0 suspend ordering has | 517 | * The following callbacks are used if the pre-ACPI 2.0 suspend ordering has |
528 | * been requested. | 518 | * been requested. |
@@ -530,7 +520,7 @@ static int acpi_hibernation_pre_snapshot_old(void) | |||
530 | static struct platform_hibernation_ops acpi_hibernation_ops_old = { | 520 | static struct platform_hibernation_ops acpi_hibernation_ops_old = { |
531 | .begin = acpi_hibernation_begin_old, | 521 | .begin = acpi_hibernation_begin_old, |
532 | .end = acpi_pm_end, | 522 | .end = acpi_pm_end, |
533 | .pre_snapshot = acpi_hibernation_pre_snapshot_old, | 523 | .pre_snapshot = acpi_pm_pre_suspend, |
534 | .prepare = acpi_pm_freeze, | 524 | .prepare = acpi_pm_freeze, |
535 | .finish = acpi_pm_finish, | 525 | .finish = acpi_pm_finish, |
536 | .enter = acpi_hibernation_enter, | 526 | .enter = acpi_hibernation_enter, |