From 79a812e5366586eaacb36b09d592adfaace3dafc Mon Sep 17 00:00:00 2001
From: Yidi Lin <yidi.lin@mediatek.com>
Date: Mon, 21 Sep 2020 20:25:54 +0800
Subject: ec/google/chromeec: Add wrappers to get/set the voltage

Add APIs to get and set the voltage for the target regulator.

BUG=b:147789962
BRANCH=none
TEST=emerge-asurada coreboot

Change-Id: I0e56df45fc3309c387b9949534334eadefb616b2
Signed-off-by: Yidi Lin <yidi.lin@mediatek.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/46404
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Yu-Ping Wu <yupingso@google.com>
---
 src/ec/google/chromeec/ec.c | 47 +++++++++++++++++++++++++++++++++++++++++++++
 src/ec/google/chromeec/ec.h | 18 +++++++++++++++++
 2 files changed, 65 insertions(+)

(limited to 'src/ec/google/chromeec')

diff --git a/src/ec/google/chromeec/ec.c b/src/ec/google/chromeec/ec.c
index 82de088401..39cf89512f 100644
--- a/src/ec/google/chromeec/ec.c
+++ b/src/ec/google/chromeec/ec.c
@@ -1616,3 +1616,50 @@ int google_chromeec_ap_reset(void)
 
 	return 0;
 }
+
+int google_chromeec_regulator_set_voltage(uint32_t index, uint32_t min_mv,
+					  uint32_t max_mv)
+{
+	struct ec_params_regulator_set_voltage params = {
+		.index = index,
+		.min_mv = min_mv,
+		.max_mv = max_mv,
+	};
+	struct chromeec_command cmd = {
+		.cmd_code = EC_CMD_REGULATOR_SET_VOLTAGE,
+		.cmd_version = 0,
+		.cmd_data_in = &params,
+		.cmd_size_in = sizeof(params),
+		.cmd_data_out = NULL,
+		.cmd_size_out = 0,
+		.cmd_dev_index = 0,
+	};
+
+	if (google_chromeec_command(&cmd))
+		return -1;
+
+	return 0;
+}
+
+int google_chromeec_regulator_get_voltage(uint32_t index, uint32_t *voltage_mv)
+{
+	struct ec_params_regulator_get_voltage params = {
+		.index = index,
+	};
+	struct ec_response_regulator_get_voltage resp = {};
+	struct chromeec_command cmd = {
+		.cmd_code = EC_CMD_REGULATOR_GET_VOLTAGE,
+		.cmd_version = 0,
+		.cmd_data_in = &params,
+		.cmd_size_in = sizeof(params),
+		.cmd_data_out = &resp,
+		.cmd_size_out = sizeof(resp),
+		.cmd_dev_index = 0,
+	};
+
+	if (google_chromeec_command(&cmd))
+		return -1;
+
+	*voltage_mv = resp.voltage_mv;
+	return 0;
+}
diff --git a/src/ec/google/chromeec/ec.h b/src/ec/google/chromeec/ec.h
index ad3768c025..c2ceff831f 100644
--- a/src/ec/google/chromeec/ec.h
+++ b/src/ec/google/chromeec/ec.h
@@ -353,6 +353,24 @@ int google_chromeec_get_keybd_config(struct ec_response_keybd_config *keybd);
  */
 int google_chromeec_ap_reset(void);
 
+/**
+ * Set voltage for the voltage regulator within the range specified.
+ * @param index		Regulator ID
+ * @param min_mv	Minimum voltage
+ * @param max_mv	Maximum voltage
+ * @return		0 on success, -1 on error
+ */
+int google_chromeec_regulator_set_voltage(uint32_t index, uint32_t min_mv,
+					  uint32_t max_mv);
+
+/**
+ * Get the currently configured voltage for the voltage regulator.
+ * @param index		Regulator ID
+ * @param *voltage_mv	If successful, voltage_mv is filled with current voltage
+ * @return		0 on success, -1 on error
+ */
+int google_chromeec_regulator_get_voltage(uint32_t index, uint32_t *voltage_mv);
+
 #if CONFIG(HAVE_ACPI_TABLES)
 /**
  * Writes USB Type-C PD related information to the SSDT
-- 
cgit v1.2.3