diff options
author | Michael5 Chen <michael5_chen1@pegatron.corp-partner.google.com> | 2020-07-06 14:20:41 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-07-07 06:37:41 +0000 |
commit | c9b9ebe60244a8ce591088e17aa8116f6c926a3c (patch) | |
tree | f79fad43a95481e823aef67132b0ba1c19240fb6 | |
parent | 94ff39b6e02e00882aeea8d2f5e1a417ffe00262 (diff) | |
download | chrome-ec-c9b9ebe60244a8ce591088e17aa8116f6c926a3c.tar.gz |
woomax: Implement the EC LED code.
Implement the EC LED code dependent on spec.
BUG=b:160542345
BRANCH=master
TEST=manual
1. Check battery LED on full charging / Charging / Discharging.
2. Check power LED on S0/suspend/S5.
3. Check "ectool led" command for battery and power LED control.
Signed-off-by: Michael5 Chen <michael5_chen1@pegatron.corp-partner.google.com>
Change-Id: Ibbb5b97a368805267a28f0da6ec7c9684a2ce3bc
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2280869
Reviewed-by: Edward Hill <ecgh@chromium.org>
-rw-r--r-- | board/woomax/board.h | 2 | ||||
-rw-r--r-- | board/woomax/gpio.inc | 2 | ||||
-rw-r--r-- | board/woomax/led.c | 95 |
3 files changed, 68 insertions, 31 deletions
diff --git a/board/woomax/board.h b/board/woomax/board.h index 3152d09b78..13bc5da030 100644 --- a/board/woomax/board.h +++ b/board/woomax/board.h @@ -25,6 +25,8 @@ #define CONFIG_USBC_RETIMER_PI3DPX1207 #define CONFIG_MKBP_USE_GPIO +#define CONFIG_LED_POWER_LED + /* Motion sensing drivers */ #define CONFIG_ACCELGYRO_BMI160 #define CONFIG_ACCELGYRO_BMI160_INT_EVENT \ diff --git a/board/woomax/gpio.inc b/board/woomax/gpio.inc index c5b92e3b8f..f877aaa1e0 100644 --- a/board/woomax/gpio.inc +++ b/board/woomax/gpio.inc @@ -56,6 +56,7 @@ UNIMPLEMENTED(PCH_SMI_L) GPIO(LED_FULL_L, PIN(6, 0), GPIO_OUT_HIGH) GPIO(LED_CHRG_L, PIN(C, 0), GPIO_OUT_HIGH) +GPIO(LED_3_L, PIN(C, 3), GPIO_OUT_HIGH) /* Power LED */ IOEX_INT(HDMI_CONN_HPD_3V3_DB, EXPIN(USBC_PORT_C1, 1, 0), GPIO_INT_BOTH, hdmi_hpd_interrupt) IOEX_INT(MST_HPD_OUT, EXPIN(USBC_PORT_C1, 0, 3), GPIO_INT_BOTH, mst_hpd_interrupt) @@ -116,7 +117,6 @@ ALTERNATE(PIN_MASK(B, BIT(2) | BIT(3)), 0, MODULE_I2C, 0) /* I2C7 */ ALTERNATE(PIN_MASK(4, BIT(2) | BIT(3)), 0, MODULE_ADC, 0) /* ADC2, ADC3 Temp Sensors */ -ALTERNATE(PIN_MASK(C, BIT(3)), 0, MODULE_PWM, 0) /* PWM0 LED */ ALTERNATE(PIN_MASK(C, BIT(4)), 0, MODULE_PWM, 0) /* PWM2 - EC_FAN_PWM */ ALTERNATE(PIN_MASK(8, BIT(0)), 0, MODULE_PWM, 0) /* PWM3 KB Backlight */ ALTERNATE(PIN_MASK(4, BIT(0)), 0, MODULE_PWM, 0) /* TA1 - EC_FAN_SPEED */ diff --git a/board/woomax/led.c b/board/woomax/led.c index f675dd52f0..6aa6c74f94 100644 --- a/board/woomax/led.c +++ b/board/woomax/led.c @@ -7,43 +7,57 @@ #include "gpio.h" #include "led_common.h" #include "led_onoff_states.h" +#include "chipset.h" -#define LED_OFF_LVL 1 -#define LED_ON_LVL 0 +#define LED_ON_LVL 0 +#define LED_OFF_LVL 1 -const int led_charge_lvl_1; -const int led_charge_lvl_2 = 100; +const int led_charge_lvl_1 = 5; + +const int led_charge_lvl_2 = 95; struct led_descriptor led_bat_state_table[LED_NUM_STATES][LED_NUM_PHASES] = { - [STATE_CHARGING_LVL_1] = {{EC_LED_COLOR_BLUE, 2 * LED_ONE_SEC}, - {EC_LED_COLOR_RED, 2 * LED_ONE_SEC} }, - [STATE_CHARGING_LVL_2] = {{EC_LED_COLOR_RED, LED_INDEFINITE} }, - [STATE_CHARGING_FULL_CHARGE] = {{EC_LED_COLOR_BLUE, LED_INDEFINITE} }, - [STATE_DISCHARGE_S0] = {{EC_LED_COLOR_BLUE, LED_INDEFINITE} }, - [STATE_DISCHARGE_S3] = {{EC_LED_COLOR_RED, 1 * LED_ONE_SEC}, - {LED_OFF, 3 * LED_ONE_SEC} }, - [STATE_DISCHARGE_S5] = {{LED_OFF, LED_INDEFINITE} }, - [STATE_BATTERY_ERROR] = {{EC_LED_COLOR_BLUE, 2 * LED_ONE_SEC}, - {EC_LED_COLOR_RED, 2 * LED_ONE_SEC} }, - [STATE_FACTORY_TEST] = {{EC_LED_COLOR_BLUE, LED_INDEFINITE} }, + [STATE_CHARGING_LVL_1] = {{EC_LED_COLOR_AMBER, LED_INDEFINITE} }, + [STATE_CHARGING_LVL_2] = {{EC_LED_COLOR_AMBER, LED_INDEFINITE} }, + [STATE_CHARGING_FULL_CHARGE] = {{EC_LED_COLOR_WHITE, LED_INDEFINITE} }, + [STATE_DISCHARGE_S0] = {{LED_OFF, LED_INDEFINITE} }, + [STATE_DISCHARGE_S3] = {{LED_OFF, LED_INDEFINITE} }, + [STATE_DISCHARGE_S5] = {{LED_OFF, LED_INDEFINITE} }, + [STATE_BATTERY_ERROR] = {{EC_LED_COLOR_AMBER, 1 * LED_ONE_SEC}, + {LED_OFF, 1 * LED_ONE_SEC} }, + [STATE_FACTORY_TEST] = {{EC_LED_COLOR_WHITE, 2 * LED_ONE_SEC}, + {EC_LED_COLOR_AMBER, 2 * LED_ONE_SEC} }, +}; + +const struct led_descriptor + led_pwr_state_table[PWR_LED_NUM_STATES][LED_NUM_PHASES] = { + [PWR_LED_STATE_ON] = {{EC_LED_COLOR_WHITE, LED_INDEFINITE} }, + [PWR_LED_STATE_SUSPEND_AC] = {{EC_LED_COLOR_WHITE, 1 * LED_ONE_SEC}, + {LED_OFF, 3 * LED_ONE_SEC} }, + [PWR_LED_STATE_SUSPEND_NO_AC] = {{EC_LED_COLOR_WHITE, 1 * LED_ONE_SEC}, + {LED_OFF, 3 * LED_ONE_SEC} }, + [PWR_LED_STATE_OFF] = {{LED_OFF, LED_INDEFINITE} }, }; -BUILD_ASSERT(ARRAY_SIZE(led_bat_state_table) == LED_NUM_STATES); -const enum ec_led_id supported_led_ids[] = { EC_LED_ID_BATTERY_LED }; + +const enum ec_led_id supported_led_ids[] = { + EC_LED_ID_BATTERY_LED, + EC_LED_ID_POWER_LED, +}; const int supported_led_ids_count = ARRAY_SIZE(supported_led_ids); void led_set_color_battery(enum ec_led_colors color) { switch (color) { - case EC_LED_COLOR_BLUE: - gpio_set_level(GPIO_LED_FULL_L, LED_ON_LVL); - gpio_set_level(GPIO_LED_CHRG_L, LED_OFF_LVL); - break; - case EC_LED_COLOR_RED: + case EC_LED_COLOR_AMBER: gpio_set_level(GPIO_LED_FULL_L, LED_OFF_LVL); gpio_set_level(GPIO_LED_CHRG_L, LED_ON_LVL); break; + case EC_LED_COLOR_WHITE: + gpio_set_level(GPIO_LED_CHRG_L, LED_OFF_LVL); + gpio_set_level(GPIO_LED_FULL_L, LED_ON_LVL); + break; default: /* LED_OFF and other unsupported colors */ gpio_set_level(GPIO_LED_FULL_L, LED_OFF_LVL); gpio_set_level(GPIO_LED_CHRG_L, LED_OFF_LVL); @@ -51,20 +65,41 @@ void led_set_color_battery(enum ec_led_colors color) } } +void led_set_color_power(enum ec_led_colors color) +{ + if (color == EC_LED_COLOR_WHITE) + gpio_set_level(GPIO_LED_3_L, LED_ON_LVL); + else + /* LED_OFF and unsupported colors */ + gpio_set_level(GPIO_LED_3_L, LED_OFF_LVL); +} + void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range) { - brightness_range[EC_LED_COLOR_BLUE] = 1; - brightness_range[EC_LED_COLOR_RED] = 1; + if (led_id == EC_LED_ID_BATTERY_LED) { + brightness_range[EC_LED_COLOR_AMBER] = 1; + brightness_range[EC_LED_COLOR_WHITE] = 1; + } else if (led_id == EC_LED_ID_POWER_LED) { + brightness_range[EC_LED_COLOR_WHITE] = 1; + } } int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness) { - if (brightness[EC_LED_COLOR_BLUE] != 0) - led_set_color_battery(EC_LED_COLOR_BLUE); - else if (brightness[EC_LED_COLOR_RED] != 0) - led_set_color_battery(EC_LED_COLOR_RED); - else - led_set_color_battery(LED_OFF); + if (led_id == EC_LED_ID_BATTERY_LED) { + if (brightness[EC_LED_COLOR_AMBER] != 0) + led_set_color_battery(EC_LED_COLOR_AMBER); + else if (brightness[EC_LED_COLOR_WHITE] != 0) + led_set_color_battery(EC_LED_COLOR_WHITE); + else + led_set_color_battery(LED_OFF); + } else if (led_id == EC_LED_ID_POWER_LED) { + if (brightness[EC_LED_COLOR_WHITE] != 0) + led_set_color_power(EC_LED_COLOR_WHITE); + else + led_set_color_power(LED_OFF); + } return EC_SUCCESS; } + |