summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ec/google/chromeec/ec.c47
-rw-r--r--src/ec/google/chromeec/ec.h18
2 files changed, 65 insertions, 0 deletions
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