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()
141 if (s2idle_ops && s2idle_ops->check) in s2idle_loop()
142 s2idle_ops->check(); in s2idle_loop()
147 pm_pr_dbg("resume from suspend-to-idle\n"); in s2idle_loop()
166 * The PM_SUSPEND_STANDBY and PM_SUSPEND_MEM states require low-level in valid_state()
167 * support and need to be valid to the low-level implementation. in valid_state()
169 * No ->valid() or ->enter() callback implies that none are valid. in valid_state()
171 return suspend_ops && suspend_ops->valid && suspend_ops->valid(state) && in valid_state()
172 suspend_ops->enter; in valid_state()
181 * Suspend-to-idle should be supported even without any suspend_ops, in pm_states_init()
203 * suspend_set_ops - Set the global suspend method table.
231 * suspend_valid_only_mem - Generic memory-only valid callback.
252 return state != PM_SUSPEND_TO_IDLE && suspend_ops->prepare ? in platform_suspend_prepare()
253 suspend_ops->prepare() : 0; in platform_suspend_prepare()
258 return state == PM_SUSPEND_TO_IDLE && s2idle_ops && s2idle_ops->prepare ? in platform_suspend_prepare_late()
259 s2idle_ops->prepare() : 0; in platform_suspend_prepare_late()
265 return s2idle_ops && s2idle_ops->prepare_late ? in platform_suspend_prepare_noirq()
266 s2idle_ops->prepare_late() : 0; in platform_suspend_prepare_noirq()
268 return suspend_ops->prepare_late ? suspend_ops->prepare_late() : 0; in platform_suspend_prepare_noirq()
274 if (s2idle_ops && s2idle_ops->restore_early) in platform_resume_noirq()
275 s2idle_ops->restore_early(); in platform_resume_noirq()
276 } else if (suspend_ops->wake) { in platform_resume_noirq()
277 suspend_ops->wake(); in platform_resume_noirq()
283 if (state == PM_SUSPEND_TO_IDLE && s2idle_ops && s2idle_ops->restore) in platform_resume_early()
284 s2idle_ops->restore(); in platform_resume_early()
289 if (state != PM_SUSPEND_TO_IDLE && suspend_ops->finish) in platform_resume_finish()
290 suspend_ops->finish(); in platform_resume_finish()
295 if (state == PM_SUSPEND_TO_IDLE && s2idle_ops && s2idle_ops->begin) in platform_suspend_begin()
296 return s2idle_ops->begin(); in platform_suspend_begin()
297 else if (suspend_ops && suspend_ops->begin) in platform_suspend_begin()
298 return suspend_ops->begin(state); in platform_suspend_begin()
305 if (state == PM_SUSPEND_TO_IDLE && s2idle_ops && s2idle_ops->end) in platform_resume_end()
306 s2idle_ops->end(); in platform_resume_end()
307 else if (suspend_ops && suspend_ops->end) in platform_resume_end()
308 suspend_ops->end(); in platform_resume_end()
313 if (state != PM_SUSPEND_TO_IDLE && suspend_ops->recover) in platform_recover()
314 suspend_ops->recover(); in platform_recover()
319 return state != PM_SUSPEND_TO_IDLE && suspend_ops->suspend_again ? in platform_suspend_again()
320 suspend_ops->suspend_again() : false; in platform_suspend_again()
344 * suspend_prepare - Prepare for entering system sleep state.
356 return -EPERM; in suspend_prepare()
391 * suspend_enter - Make the system enter the given sleep state.
393 * @wakeup: Returns information that the sleep state should not be re-entered.
397 static int suspend_enter(suspend_state_t state, bool *wakeup) in suspend_enter() argument
442 *wakeup = pm_wakeup_pending(); in suspend_enter()
443 if (!(suspend_test(TEST_CORE) || *wakeup)) { in suspend_enter()
446 error = suspend_ops->enter(state); in suspend_enter()
449 } else if (*wakeup) { in suspend_enter()
450 error = -EBUSY; in suspend_enter()
479 * suspend_devices_and_enter - Suspend devices and enter system sleep state.
485 bool wakeup = false; in suspend_devices_and_enter() local
488 return -ENOSYS; in suspend_devices_and_enter()
511 error = suspend_enter(state, &wakeup); in suspend_devices_and_enter()
512 } while (!error && !wakeup && platform_suspend_again(state)); in suspend_devices_and_enter()
533 * suspend_finish - Clean up before finishing the suspend sequence.
546 * enter_state - Do common work needed to enter system sleep state.
551 * system enter the given sleep state and clean up after wakeup.
562 return -EAGAIN; in enter_state()
566 return -EINVAL; in enter_state()
569 return -EBUSY; in enter_state()
597 pm_pr_dbg("Finishing wakeup.\n"); in enter_state()
605 * pm_suspend - Externally visible function for suspending the system.
616 return -EINVAL; in pm_suspend()