mfd: cros_ec: Add EC_PWM function definitions
authorBrian Norris <briannorris@chromium.org>
Fri, 15 Jul 2016 23:28:42 +0000 (16:28 -0700)
committerThierry Reding <thierry.reding@gmail.com>
Mon, 25 Jul 2016 08:33:03 +0000 (10:33 +0200)
The EC_CMD_PWM_{GET,SET}_DUTY commands allow us to control a PWM that is
attached to the EC, rather than the main host SoC. The API provides
functionality-based (e.g., keyboard light, backlight) or index-based
addressing of the PWM(s). Duty cycles are represented by a 16-bit value,
where 0 maps to 0% duty cycle and U16_MAX maps to 100%. The period
cannot be controlled.

This command set is more generic than, e.g.,
EC_CMD_PWM_{GET,SET}_KEYBOARD_BACKLIGHT and could possibly used to
replace it on future products.

Let's update the command header to include the definitions.

Signed-off-by: Brian Norris <briannorris@chromium.org>
Acked-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
include/linux/mfd/cros_ec_commands.h

index 13b630c10d4c07d16e958bff61f1c6f3787142dd..7e7a8d4b4551149c48007b95a2840fdaf0f0719f 100644 (file)
@@ -949,6 +949,37 @@ struct ec_params_pwm_set_fan_duty {
        uint32_t percent;
 } __packed;
 
+#define EC_CMD_PWM_SET_DUTY 0x25
+/* 16 bit duty cycle, 0xffff = 100% */
+#define EC_PWM_MAX_DUTY 0xffff
+
+enum ec_pwm_type {
+       /* All types, indexed by board-specific enum pwm_channel */
+       EC_PWM_TYPE_GENERIC = 0,
+       /* Keyboard backlight */
+       EC_PWM_TYPE_KB_LIGHT,
+       /* Display backlight */
+       EC_PWM_TYPE_DISPLAY_LIGHT,
+       EC_PWM_TYPE_COUNT,
+};
+
+struct ec_params_pwm_set_duty {
+       uint16_t duty;     /* Duty cycle, EC_PWM_MAX_DUTY = 100% */
+       uint8_t pwm_type;  /* ec_pwm_type */
+       uint8_t index;     /* Type-specific index, or 0 if unique */
+} __packed;
+
+#define EC_CMD_PWM_GET_DUTY 0x26
+
+struct ec_params_pwm_get_duty {
+       uint8_t pwm_type;  /* ec_pwm_type */
+       uint8_t index;     /* Type-specific index, or 0 if unique */
+} __packed;
+
+struct ec_response_pwm_get_duty {
+       uint16_t duty;     /* Duty cycle, EC_PWM_MAX_DUTY = 100% */
+} __packed;
+
 /*****************************************************************************/
 /*
  * Lightbar commands. This looks worse than it is. Since we only use one HOST