mfd: cros_ec: Add host_sleep_event_v1 command
authorEvan Green <evgreen@chromium.org>
Wed, 3 Apr 2019 21:34:27 +0000 (14:34 -0700)
committerLee Jones <lee.jones@linaro.org>
Tue, 14 May 2019 07:13:26 +0000 (08:13 +0100)
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 <evgreen@chromium.org>
Reviewed-by: Rajat Jain <rajatja@chromium.org>
Reviewed-by: Guenter Roeck <groeck@chromium.org>
Acked-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
include/linux/mfd/cros_ec_commands.h

index 43bee4f..0e91f13 100644 (file)
@@ -2731,6 +2731,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 */