Lines Matching +full:wakeup +full:- +full:method
1 // SPDX-License-Identifier: GPL-2.0-only
3 * kernel/power/suspend.c - Suspend to RAM and standby functionality.
65 * pm_suspend_default_s2idle - Check if suspend-to-idle is the default suspend.
67 * Return 'true' if suspend-to-idle has been selected as the default system
68 * suspend method.
122 pm_pr_dbg("suspend-to-idle\n"); in s2idle_loop()
125 * Suspend-to-idle equals: in s2idle_loop()
134 if (s2idle_ops && s2idle_ops->wake) { in s2idle_loop()
135 if (s2idle_ops->wake()) in s2idle_loop()
146 pm_pr_dbg("resume from suspend-to-idle\n"); in s2idle_loop()
169 return suspend_ops && suspend_ops->valid && suspend_ops->valid(state); in valid_state()
178 * Suspend-to-idle should be supported even without any suspend_ops, in pm_states_init()
200 * suspend_set_ops - Set the global suspend method table.
226 * suspend_valid_only_mem - Generic memory-only valid callback.
241 return state == PM_SUSPEND_TO_IDLE || (suspend_ops && suspend_ops->enter); in sleep_state_supported()
246 return state != PM_SUSPEND_TO_IDLE && suspend_ops->prepare ? in platform_suspend_prepare()
247 suspend_ops->prepare() : 0; in platform_suspend_prepare()
252 return state == PM_SUSPEND_TO_IDLE && s2idle_ops && s2idle_ops->prepare ? in platform_suspend_prepare_late()
253 s2idle_ops->prepare() : 0; in platform_suspend_prepare_late()
259 return s2idle_ops && s2idle_ops->prepare_late ? in platform_suspend_prepare_noirq()
260 s2idle_ops->prepare_late() : 0; in platform_suspend_prepare_noirq()
262 return suspend_ops->prepare_late ? suspend_ops->prepare_late() : 0; in platform_suspend_prepare_noirq()
268 if (s2idle_ops && s2idle_ops->restore_early) in platform_resume_noirq()
269 s2idle_ops->restore_early(); in platform_resume_noirq()
270 } else if (suspend_ops->wake) { in platform_resume_noirq()
271 suspend_ops->wake(); in platform_resume_noirq()
277 if (state == PM_SUSPEND_TO_IDLE && s2idle_ops && s2idle_ops->restore) in platform_resume_early()
278 s2idle_ops->restore(); in platform_resume_early()
283 if (state != PM_SUSPEND_TO_IDLE && suspend_ops->finish) in platform_resume_finish()
284 suspend_ops->finish(); in platform_resume_finish()
289 if (state == PM_SUSPEND_TO_IDLE && s2idle_ops && s2idle_ops->begin) in platform_suspend_begin()
290 return s2idle_ops->begin(); in platform_suspend_begin()
291 else if (suspend_ops && suspend_ops->begin) in platform_suspend_begin()
292 return suspend_ops->begin(state); in platform_suspend_begin()
299 if (state == PM_SUSPEND_TO_IDLE && s2idle_ops && s2idle_ops->end) in platform_resume_end()
300 s2idle_ops->end(); in platform_resume_end()
301 else if (suspend_ops && suspend_ops->end) in platform_resume_end()
302 suspend_ops->end(); in platform_resume_end()
307 if (state != PM_SUSPEND_TO_IDLE && suspend_ops->recover) in platform_recover()
308 suspend_ops->recover(); in platform_recover()
313 return state != PM_SUSPEND_TO_IDLE && suspend_ops->suspend_again ? in platform_suspend_again()
314 suspend_ops->suspend_again() : false; in platform_suspend_again()
338 * suspend_prepare - Prepare for entering system sleep state.
350 return -EPERM; in suspend_prepare()
385 * suspend_enter - Make the system enter the given sleep state.
387 * @wakeup: Returns information that the sleep state should not be re-entered.
391 static int suspend_enter(suspend_state_t state, bool *wakeup) in suspend_enter() argument
436 *wakeup = pm_wakeup_pending(); in suspend_enter()
437 if (!(suspend_test(TEST_CORE) || *wakeup)) { in suspend_enter()
440 error = suspend_ops->enter(state); in suspend_enter()
443 } else if (*wakeup) { in suspend_enter()
444 error = -EBUSY; in suspend_enter()
473 * suspend_devices_and_enter - Suspend devices and enter system sleep state.
479 bool wakeup = false; in suspend_devices_and_enter() local
482 return -ENOSYS; in suspend_devices_and_enter()
505 error = suspend_enter(state, &wakeup); in suspend_devices_and_enter()
506 } while (!error && !wakeup && platform_suspend_again(state)); in suspend_devices_and_enter()
527 * suspend_finish - Clean up before finishing the suspend sequence.
540 * enter_state - Do common work needed to enter system sleep state.
545 * system enter the given sleep state and clean up after wakeup.
556 return -EAGAIN; in enter_state()
560 return -EINVAL; in enter_state()
563 return -EBUSY; in enter_state()
591 pm_pr_dbg("Finishing wakeup.\n"); in enter_state()
599 * pm_suspend - Externally visible function for suspending the system.
610 return -EINVAL; in pm_suspend()