@@ -58,30 +58,44 @@ typedef int __bitwise suspend_state_t;
5858 * by @begin().
5959 * @prepare() is called right after devices have been suspended (ie. the
6060 * appropriate .suspend() method has been executed for each device) and
61- * before the nonboot CPUs are disabled (it is executed with IRQs enabled).
62- * This callback is optional. It returns 0 on success or a negative
63- * error code otherwise, in which case the system cannot enter the desired
64- * sleep state (@enter() and @finish() will not be called in that case).
61+ * before device drivers' late suspend callbacks are executed. It returns
62+ * 0 on success or a negative error code otherwise, in which case the
63+ * system cannot enter the desired sleep state (@prepare_late(), @enter(),
64+ * @wake(), and @finish() will not be called in that case).
65+ *
66+ * @prepare_late: Finish preparing the platform for entering the system sleep
67+ * state indicated by @begin().
68+ * @prepare_late is called before disabling nonboot CPUs and after
69+ * device drivers' late suspend callbacks have been executed. It returns
70+ * 0 on success or a negative error code otherwise, in which case the
71+ * system cannot enter the desired sleep state (@enter() and @wake()).
6572 *
6673 * @enter: Enter the system sleep state indicated by @begin() or represented by
6774 * the argument if @begin() is not implemented.
6875 * This callback is mandatory. It returns 0 on success or a negative
6976 * error code otherwise, in which case the system cannot enter the desired
7077 * sleep state.
7178 *
72- * @finish: Called when the system has just left a sleep state, right after
73- * the nonboot CPUs have been enabled and before devices are resumed (it is
74- * executed with IRQs enabled).
79+ * @wake: Called when the system has just left a sleep state, right after
80+ * the nonboot CPUs have been enabled and before device drivers' early
81+ * resume callbacks are executed.
82+ * This callback is optional, but should be implemented by the platforms
83+ * that implement @prepare_late(). If implemented, it is always called
84+ * after @enter(), even if @enter() fails.
85+ *
86+ * @finish: Finish wake-up of the platform.
87+ * @finish is called right prior to calling device drivers' regular suspend
88+ * callbacks.
7589 * This callback is optional, but should be implemented by the platforms
7690 * that implement @prepare(). If implemented, it is always called after
77- * @enter() ( even if @enter() fails) .
91+ * @enter() and @wake(), if implemented, even if any of them fails.
7892 *
7993 * @end: Called by the PM core right after resuming devices, to indicate to
8094 * the platform that the system has returned to the working state or
8195 * the transition to the sleep state has been aborted.
8296 * This callback is optional, but should be implemented by the platforms
83- * that implement @begin(), but platforms implementing @begin() should
84- * also provide a @end() which cleans up transitions aborted before
97+ * that implement @begin(). Accordingly, platforms implementing @begin()
98+ * should also provide a @end() which cleans up transitions aborted before
8599 * @enter().
86100 *
87101 * @recover: Recover the platform from a suspend failure.
@@ -93,7 +107,9 @@ struct platform_suspend_ops {
93107 int (* valid )(suspend_state_t state );
94108 int (* begin )(suspend_state_t state );
95109 int (* prepare )(void );
110+ int (* prepare_late )(void );
96111 int (* enter )(suspend_state_t state );
112+ void (* wake )(void );
97113 void (* finish )(void );
98114 void (* end )(void );
99115 void (* recover )(void );
0 commit comments