diff options
| author | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2014-06-06 18:17:50 -0400 |
|---|---|---|
| committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2014-06-06 18:17:50 -0400 |
| commit | 3eba148d75670f61463dd3c9ef8672da8f290f36 (patch) | |
| tree | 45cb8fbda6d6ce9d73aeeac673282e37b0be2531 /kernel/power | |
| parent | 057b0a7518e4b8fca26201715996d6d928a62300 (diff) | |
| parent | 4cf563c5d97c83d4b2fb3a778dd7d5e362cc3e34 (diff) | |
Merge branch 'acpi-pm' into pm-sleep
Diffstat (limited to 'kernel/power')
| -rw-r--r-- | kernel/power/snapshot.c | 2 | ||||
| -rw-r--r-- | kernel/power/suspend.c | 15 |
2 files changed, 16 insertions, 1 deletions
diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c index 18fb7a2fb14b..1ea328aafdc9 100644 --- a/kernel/power/snapshot.c +++ b/kernel/power/snapshot.c | |||
| @@ -1586,7 +1586,7 @@ swsusp_alloc(struct memory_bitmap *orig_bm, struct memory_bitmap *copy_bm, | |||
| 1586 | return -ENOMEM; | 1586 | return -ENOMEM; |
| 1587 | } | 1587 | } |
| 1588 | 1588 | ||
| 1589 | asmlinkage int swsusp_save(void) | 1589 | asmlinkage __visible int swsusp_save(void) |
| 1590 | { | 1590 | { |
| 1591 | unsigned int nr_pages, nr_highmem; | 1591 | unsigned int nr_pages, nr_highmem; |
| 1592 | 1592 | ||
diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c index 338a6f147974..963e6d0f050b 100644 --- a/kernel/power/suspend.c +++ b/kernel/power/suspend.c | |||
| @@ -38,6 +38,7 @@ struct pm_sleep_state pm_states[PM_SUSPEND_MAX] = { | |||
| 38 | }; | 38 | }; |
| 39 | 39 | ||
| 40 | static const struct platform_suspend_ops *suspend_ops; | 40 | static const struct platform_suspend_ops *suspend_ops; |
| 41 | static const struct platform_freeze_ops *freeze_ops; | ||
| 41 | 42 | ||
| 42 | static bool need_suspend_ops(suspend_state_t state) | 43 | static bool need_suspend_ops(suspend_state_t state) |
| 43 | { | 44 | { |
| @@ -47,6 +48,13 @@ static bool need_suspend_ops(suspend_state_t state) | |||
| 47 | static DECLARE_WAIT_QUEUE_HEAD(suspend_freeze_wait_head); | 48 | static DECLARE_WAIT_QUEUE_HEAD(suspend_freeze_wait_head); |
| 48 | static bool suspend_freeze_wake; | 49 | static bool suspend_freeze_wake; |
| 49 | 50 | ||
| 51 | void freeze_set_ops(const struct platform_freeze_ops *ops) | ||
| 52 | { | ||
| 53 | lock_system_sleep(); | ||
| 54 | freeze_ops = ops; | ||
| 55 | unlock_system_sleep(); | ||
| 56 | } | ||
| 57 | |||
| 50 | static void freeze_begin(void) | 58 | static void freeze_begin(void) |
| 51 | { | 59 | { |
| 52 | suspend_freeze_wake = false; | 60 | suspend_freeze_wake = false; |
| @@ -291,6 +299,10 @@ int suspend_devices_and_enter(suspend_state_t state) | |||
| 291 | error = suspend_ops->begin(state); | 299 | error = suspend_ops->begin(state); |
| 292 | if (error) | 300 | if (error) |
| 293 | goto Close; | 301 | goto Close; |
| 302 | } else if (state == PM_SUSPEND_FREEZE && freeze_ops->begin) { | ||
| 303 | error = freeze_ops->begin(); | ||
| 304 | if (error) | ||
| 305 | goto Close; | ||
| 294 | } | 306 | } |
| 295 | suspend_console(); | 307 | suspend_console(); |
| 296 | suspend_test_start(); | 308 | suspend_test_start(); |
| @@ -316,6 +328,9 @@ int suspend_devices_and_enter(suspend_state_t state) | |||
| 316 | Close: | 328 | Close: |
| 317 | if (need_suspend_ops(state) && suspend_ops->end) | 329 | if (need_suspend_ops(state) && suspend_ops->end) |
| 318 | suspend_ops->end(); | 330 | suspend_ops->end(); |
| 331 | else if (state == PM_SUSPEND_FREEZE && freeze_ops->end) | ||
| 332 | freeze_ops->end(); | ||
| 333 | |||
| 319 | trace_machine_suspend(PWR_EVENT_EXIT); | 334 | trace_machine_suspend(PWR_EVENT_EXIT); |
| 320 | return error; | 335 | return error; |
| 321 | 336 | ||
