Add host commands for voltage regulator control through ChromeOS EC.

Signed-off-by: Pi-Hsun Shih <pih...@chromium.org>
Reviewed-by: Enric Balletbo i Serra <enric.balle...@collabora.com>
---
Changes from v5:
* Extract into a separate patch.
---
 drivers/platform/chrome/cros_ec_trace.c       |  5 ++
 .../linux/platform_data/cros_ec_commands.h    | 82 +++++++++++++++++++
 2 files changed, 87 insertions(+)

diff --git a/drivers/platform/chrome/cros_ec_trace.c 
b/drivers/platform/chrome/cros_ec_trace.c
index 523a39bd0ff6..425e9441b7ca 100644
--- a/drivers/platform/chrome/cros_ec_trace.c
+++ b/drivers/platform/chrome/cros_ec_trace.c
@@ -161,6 +161,11 @@
        TRACE_SYMBOL(EC_CMD_ADC_READ), \
        TRACE_SYMBOL(EC_CMD_ROLLBACK_INFO), \
        TRACE_SYMBOL(EC_CMD_AP_RESET), \
+       TRACE_SYMBOL(EC_CMD_REGULATOR_GET_INFO), \
+       TRACE_SYMBOL(EC_CMD_REGULATOR_ENABLE), \
+       TRACE_SYMBOL(EC_CMD_REGULATOR_IS_ENABLED), \
+       TRACE_SYMBOL(EC_CMD_REGULATOR_SET_VOLTAGE), \
+       TRACE_SYMBOL(EC_CMD_REGULATOR_GET_VOLTAGE), \
        TRACE_SYMBOL(EC_CMD_CR51_BASE), \
        TRACE_SYMBOL(EC_CMD_CR51_LAST), \
        TRACE_SYMBOL(EC_CMD_FP_PASSTHRU), \
diff --git a/include/linux/platform_data/cros_ec_commands.h 
b/include/linux/platform_data/cros_ec_commands.h
index 69210881ebac..a417b51b5764 100644
--- a/include/linux/platform_data/cros_ec_commands.h
+++ b/include/linux/platform_data/cros_ec_commands.h
@@ -5430,6 +5430,88 @@ struct ec_response_rollback_info {
 /* Issue AP reset */
 #define EC_CMD_AP_RESET 0x0125
 
+/*****************************************************************************/
+/* Voltage regulator controls */
+
+/*
+ * Get basic info of voltage regulator for given index.
+ *
+ * Returns the regulator name and supported voltage list in mV.
+ */
+#define EC_CMD_REGULATOR_GET_INFO 0x012B
+
+/* Maximum length of regulator name */
+#define EC_REGULATOR_NAME_MAX_LEN 16
+
+/* Maximum length of the supported voltage list. */
+#define EC_REGULATOR_VOLTAGE_MAX_COUNT 16
+
+struct ec_params_regulator_get_info {
+       uint32_t index;
+} __ec_align4;
+
+struct ec_response_regulator_get_info {
+       char name[EC_REGULATOR_NAME_MAX_LEN];
+       uint16_t num_voltages;
+       uint16_t voltages_mv[EC_REGULATOR_VOLTAGE_MAX_COUNT];
+} __ec_align1;
+
+/*
+ * Configure the regulator as enabled / disabled.
+ */
+#define EC_CMD_REGULATOR_ENABLE 0x012C
+
+struct ec_params_regulator_enable {
+       uint32_t index;
+       uint8_t enable;
+} __ec_align4;
+
+/*
+ * Query if the regulator is enabled.
+ *
+ * Returns 1 if the regulator is enabled, 0 if not.
+ */
+#define EC_CMD_REGULATOR_IS_ENABLED 0x012D
+
+struct ec_params_regulator_is_enabled {
+       uint32_t index;
+} __ec_align4;
+
+struct ec_response_regulator_is_enabled {
+       uint8_t enabled;
+} __ec_align1;
+
+/*
+ * Set voltage for the voltage regulator within the range specified.
+ *
+ * The driver should select the voltage in range closest to min_mv.
+ *
+ * Also note that this might be called before the regulator is enabled, and the
+ * setting should be in effect after the regulator is enabled.
+ */
+#define EC_CMD_REGULATOR_SET_VOLTAGE 0x012E
+
+struct ec_params_regulator_set_voltage {
+       uint32_t index;
+       uint32_t min_mv;
+       uint32_t max_mv;
+} __ec_align4;
+
+/*
+ * Get the currently configured voltage for the voltage regulator.
+ *
+ * Note that this might be called before the regulator is enabled.
+ */
+#define EC_CMD_REGULATOR_GET_VOLTAGE 0x012F
+
+struct ec_params_regulator_get_voltage {
+       uint32_t index;
+} __ec_align4;
+
+struct ec_response_regulator_get_voltage {
+       uint32_t voltage_mv;
+} __ec_align4;
+
 /*****************************************************************************/
 /* The command range 0x200-0x2FF is reserved for Rotor. */
 
-- 
2.27.0.290.gba653c62da-goog

Reply via email to