Introduce the command and response structures for the second revision
of the host sleep event. These structures are part of a new EC change
that enables detection of failure to enter S0ix. The EC waits a
kernel-specified timeout (or a default amount of time) for the S0_SLP
pin to change, and wakes the system if that change does not occur in
time.

Signed-off-by: Evan Green <evgr...@chromium.org>

---

Changes in v3: None
Changes in v2:
- Made unions anonymous
- Replaced reserved union members with a comment

 include/linux/mfd/cros_ec_commands.h | 57 ++++++++++++++++++++++++++++
 1 file changed, 57 insertions(+)

diff --git a/include/linux/mfd/cros_ec_commands.h 
b/include/linux/mfd/cros_ec_commands.h
index fc91082d4c35..1cdb07c0ece1 100644
--- a/include/linux/mfd/cros_ec_commands.h
+++ b/include/linux/mfd/cros_ec_commands.h
@@ -2729,6 +2729,63 @@ struct ec_params_host_sleep_event {
        uint8_t sleep_event;
 } __packed;
 
+/*
+ * Use a default timeout value (CONFIG_SLEEP_TIMEOUT_MS) for detecting sleep
+ * transition failures
+ */
+#define EC_HOST_SLEEP_TIMEOUT_DEFAULT 0
+
+/* Disable timeout detection for this sleep transition */
+#define EC_HOST_SLEEP_TIMEOUT_INFINITE 0xFFFF
+
+struct ec_params_host_sleep_event_v1 {
+       /* The type of sleep being entered or exited. */
+       uint8_t sleep_event;
+
+       /* Padding */
+       uint8_t reserved;
+       union {
+               /* Parameters that apply for suspend messages. */
+               struct {
+                       /*
+                        * The timeout in milliseconds between when this message
+                        * is received and when the EC will declare sleep
+                        * transition failure if the sleep signal is not
+                        * asserted.
+                        */
+                       uint16_t sleep_timeout_ms;
+               } suspend_params;
+
+               /* No parameters for non-suspend messages. */
+       };
+} __packed;
+
+/* A timeout occurred when this bit is set */
+#define EC_HOST_RESUME_SLEEP_TIMEOUT 0x80000000
+
+/*
+ * The mask defining which bits correspond to the number of sleep transitions,
+ * as well as the maximum number of suspend line transitions that will be
+ * reported back to the host.
+ */
+#define EC_HOST_RESUME_SLEEP_TRANSITIONS_MASK 0x7FFFFFFF
+
+struct ec_response_host_sleep_event_v1 {
+       union {
+               /* Response fields that apply for resume messages. */
+               struct {
+                       /*
+                        * The number of sleep power signal transitions that
+                        * occurred since the suspend message. The high bit
+                        * indicates a timeout occurred.
+                        */
+                       uint32_t sleep_transitions;
+               } resume_response;
+
+               /* No response fields for non-resume messages. */
+       };
+} __packed;
+
 /*****************************************************************************/
 /* Smart battery pass-through */
 
-- 
2.20.1

Reply via email to