Commit c05cb5bd authored by Thomas Weißschuh's avatar Thomas Weißschuh Committed by Tzung-Bi Shih
Browse files

platform/chrome: Update binary interface for EC-based charge control



The charge-control command v2/v3 is more featureful than v1, it
additionally supports charge thresholds.

The definitions were imported from ChromeOS EC commit
32870d602317 ("squirtle: modify motionsense rotation matrix")

Signed-off-by: default avatarThomas Weißschuh <linux@weissschuh.net>
Link: https://lore.kernel.org/r/20240630-cros_ec-charge-control-v5-2-8f649d018c52@weissschuh.net


Signed-off-by: default avatarTzung-Bi Shih <tzungbi@kernel.org>
parent 2681bbaa
Loading
Loading
Loading
Loading
+47 −2
Original line number Diff line number Diff line
@@ -3843,16 +3843,61 @@ struct ec_params_i2c_write {
 * discharge the battery.
 */
#define EC_CMD_CHARGE_CONTROL 0x0096
#define EC_VER_CHARGE_CONTROL 1
#define EC_VER_CHARGE_CONTROL 3

enum ec_charge_control_mode {
	CHARGE_CONTROL_NORMAL = 0,
	CHARGE_CONTROL_IDLE,
	CHARGE_CONTROL_DISCHARGE,
	/* Add no more entry below. */
	CHARGE_CONTROL_COUNT,
};

#define EC_CHARGE_MODE_TEXT                               \
	{                                                 \
		[CHARGE_CONTROL_NORMAL] = "NORMAL",       \
		[CHARGE_CONTROL_IDLE] = "IDLE",           \
		[CHARGE_CONTROL_DISCHARGE] = "DISCHARGE", \
	}

enum ec_charge_control_cmd {
	EC_CHARGE_CONTROL_CMD_SET = 0,
	EC_CHARGE_CONTROL_CMD_GET,
};

enum ec_charge_control_flag {
	EC_CHARGE_CONTROL_FLAG_NO_IDLE = BIT(0),
};

struct ec_params_charge_control {
	uint32_t mode; /* enum charge_control_mode */

	/* Below are the fields added in V2. */
	uint8_t cmd; /* enum ec_charge_control_cmd. */
	uint8_t flags; /* enum ec_charge_control_flag (v3+) */
	/*
	 * Lower and upper thresholds for battery sustainer. This struct isn't
	 * named to avoid tainting foreign projects' name spaces.
	 *
	 * If charge mode is explicitly set (e.g. DISCHARGE), battery sustainer
	 * will be disabled. To disable battery sustainer, set mode=NORMAL,
	 * lower=-1, upper=-1.
	 */
	struct {
		int8_t lower; /* Display SoC in percentage. */
		int8_t upper; /* Display SoC in percentage. */
	} sustain_soc;
} __ec_align4;

/* Added in v2 */
struct ec_response_charge_control {
	uint32_t mode; /* enum charge_control_mode */
	struct { /* Battery sustainer thresholds */
		int8_t lower;
		int8_t upper;
	} sustain_soc;
	uint8_t flags; /* enum ec_charge_control_flag (v3+) */
	uint8_t reserved;
} __ec_align4;

/*****************************************************************************/