Commit afe2bb5c authored by Evan Green's avatar Evan Green Committed by Lee Jones
Browse files

mfd: cros_ec: Add host_sleep_event_v1 command



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: default avatarEvan Green <evgreen@chromium.org>
Reviewed-by: default avatarRajat Jain <rajatja@chromium.org>
Reviewed-by: default avatarGuenter Roeck <groeck@chromium.org>
Acked-by: default avatarEnric Balletbo i Serra <enric.balletbo@collabora.com>
Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
parent 49a65e3c
Loading
Loading
Loading
Loading
+57 −0
Original line number Diff line number Diff line
@@ -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 */