summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTommy Chung <tommy.chung@quanta.corp-partner.google.com>2020-08-17 10:42:47 +0800
committerCommit Bot <commit-bot@chromium.org>2020-08-19 05:00:04 +0000
commit5f2dde0ec319b4bf1ec863e23d545df885be71c3 (patch)
tree884be30e14af5ac4d4f57aa6d54d79bdc2838428
parent0432c138624c2bff8c9625663d0d08815eb0b1c1 (diff)
downloadchrome-ec-5f2dde0ec319b4bf1ec863e23d545df885be71c3.tar.gz
burnet: add power led
BUG=none BRANCH=firmware-kukui-12573.B TEST=make sure battery led is showing battery state on system S3. make sure power led is showing white on S0. make sure power led is blinking white on S3. make sure power led is OFF on S5/G3. Signed-off-by: Tommy Chung <tommy.chung@quanta.corp-partner.google.com> Change-Id: Ia257a8adc923dd87be304d6070d18550147e4fef Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2359614 Reviewed-by: Ting Shen <phoenixshen@chromium.org>
-rw-r--r--board/burnet/gpio.inc1
-rw-r--r--board/burnet/led.c53
2 files changed, 41 insertions, 13 deletions
diff --git a/board/burnet/gpio.inc b/board/burnet/gpio.inc
index 7fa9f4e1c6..e7d9c2006b 100644
--- a/board/burnet/gpio.inc
+++ b/board/burnet/gpio.inc
@@ -86,6 +86,7 @@ GPIO(USB_C0_DISCHARGE, PIN(B, 6), GPIO_OUT_LOW)
IOEX(BAT_LED_AMBER_L, EXPIN(0, 1, 2), GPIO_OUT_HIGH)
IOEX(BAT_LED_WHITE_L, EXPIN(0, 1, 4), GPIO_OUT_HIGH)
+IOEX(PWR_LED_WHITE_L, EXPIN(0, 1, 3), GPIO_OUT_HIGH)
/*
* TODO(b:138352732): On IT88801 expander, To be readded once IT8801 driver and
diff --git a/board/burnet/led.c b/board/burnet/led.c
index 5b65d7b948..46dab20697 100644
--- a/board/burnet/led.c
+++ b/board/burnet/led.c
@@ -14,7 +14,13 @@
#define BAT_LED_ON 0
#define BAT_LED_OFF 1
-const enum ec_led_id supported_led_ids[] = {EC_LED_ID_BATTERY_LED};
+#define POWER_LED_ON 0
+#define POWER_LED_OFF 1
+
+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);
@@ -46,6 +52,21 @@ static int led_set_color_battery(enum led_color color)
return EC_SUCCESS;
}
+static int led_set_color_power(enum ec_led_colors color)
+{
+ switch (color) {
+ case LED_OFF:
+ ioex_set_level(IOEX_PWR_LED_WHITE_L, POWER_LED_OFF);
+ break;
+ case LED_WHITE:
+ ioex_set_level(IOEX_PWR_LED_WHITE_L, POWER_LED_ON);
+ break;
+ default:
+ return EC_ERROR_UNKNOWN;
+ }
+ return EC_SUCCESS;
+}
+
void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range)
{
brightness_range[EC_LED_COLOR_WHITE] = 1;
@@ -78,25 +99,28 @@ int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness)
return EC_SUCCESS;
}
+static void led_set_power(void)
+{
+ static int power_tick;
+
+ power_tick++;
+
+ if (chipset_in_state(CHIPSET_STATE_ON))
+ led_set_color_power(LED_WHITE);
+ else if (chipset_in_state(CHIPSET_STATE_ANY_SUSPEND))
+ led_set_color_power(
+ (power_tick & 0x2) ? LED_WHITE : LED_OFF);
+ else
+ led_set_color_power(LED_OFF);
+}
+
static void led_set_battery(void)
{
static int battery_ticks;
- static int power_ticks;
uint32_t chflags = charge_get_flags();
battery_ticks++;
- /* override battery led for system suspend */
- if (chipset_in_state(CHIPSET_STATE_SUSPEND |
- CHIPSET_STATE_STANDBY) &&
- charge_get_state() != PWR_STATE_CHARGE) {
- led_set_color_battery(power_ticks++ & 0x2 ?
- LED_WHITE : LED_OFF);
- return;
- }
-
- power_ticks = 0;
-
switch (charge_get_state()) {
case PWR_STATE_CHARGE:
led_set_color_battery(LED_AMBER);
@@ -141,6 +165,9 @@ static void led_set_battery(void)
/* Called by hook task every TICK */
static void led_tick(void)
{
+ if (led_auto_control_is_enabled(EC_LED_ID_POWER_LED))
+ led_set_power();
+
if (led_auto_control_is_enabled(EC_LED_ID_BATTERY_LED))
led_set_battery();
}