diff options
author | Diana Z <dzigterman@chromium.org> | 2018-07-31 09:37:24 -0600 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-08-01 19:35:26 -0700 |
commit | fe10a59e056643e3b23a5d1b0e6142323b0e5ced (patch) | |
tree | 610aca1fd3159e071d6cad94d7fe65a35fa1bb48 /board/phaser | |
parent | d01e71d5b4b1c20c9bd2f9acce7e3a48a1460b78 (diff) | |
download | chrome-ec-fe10a59e056643e3b23a5d1b0e6142323b0e5ced.tar.gz |
octopus: Refactor power LED code
The upcoming work to implement the fleex power LED will require slightly
different power LED behavior, so this refactors the power LED code to be
more flexible. This change also sets the phaser power LED GPIO name to
something more clear, and protects the code from a possible
divide-by-zero condition which can be hit with undefined states.
Currently, there will be prints 4 times per second that the board is in
the undefined state, which should draw a developer's attention to the
issue.
BRANCH=None
BUG=None
TEST=verified power LED behaved the same on phaser in all different
power states, verified that removing a state's entry in the table
results in an error print to the console in that state
Change-Id: I58733008e5e49d1e631d79a8631d2ca04127bd08
Signed-off-by: Diana Z <dzigterman@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/1156872
Reviewed-by: Furquan Shaikh <furquan@chromium.org>
Reviewed-by: Jett Rink <jettrink@chromium.org>
Diffstat (limited to 'board/phaser')
-rw-r--r-- | board/phaser/gpio.inc | 2 | ||||
-rw-r--r-- | board/phaser/led.c | 32 |
2 files changed, 21 insertions, 13 deletions
diff --git a/board/phaser/gpio.inc b/board/phaser/gpio.inc index 94e848efb7..ba5c99f6e9 100644 --- a/board/phaser/gpio.inc +++ b/board/phaser/gpio.inc @@ -138,7 +138,7 @@ GPIO(USB2_OTG_ID, PIN(8, 3), GPIO_ODR_LOW) /* OTG ID */ /* LED */ GPIO(BAT_LED_RED_L, PIN(C, 3), GPIO_OUT_HIGH) /* LED_1_L */ GPIO(BAT_LED_GREEN_L, PIN(C, 4), GPIO_OUT_HIGH) /* LED_2_L */ -GPIO(LED_3_L, PIN(D, 7), GPIO_OUT_HIGH) +GPIO(PWR_LED_WHITE_L, PIN(D, 7), GPIO_OUT_HIGH) /* LED_3_L */ /* Keyboard Backlight */ GPIO(KB_BL_PWR_EN, PIN(6, 2), GPIO_OUT_LOW) diff --git a/board/phaser/led.c b/board/phaser/led.c index 18315abd0d..46f97071c3 100644 --- a/board/phaser/led.c +++ b/board/phaser/led.c @@ -18,10 +18,6 @@ const int led_charge_lvl_1 = 5; const int led_charge_lvl_2 = 97; -const int led_power_blink_on_msec = 3000; - -const int led_power_blink_off_msec = 500; - const struct led_descriptor led_bat_state_table[LED_NUM_STATES][LED_NUM_PHASES] = { [STATE_CHARGING_LVL_1] = {{EC_LED_COLOR_RED, LED_INDEFINITE} }, @@ -30,8 +26,19 @@ const struct led_descriptor [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_RED, 1 * LED_ONE_SEC}, {LED_OFF, 1 * LED_ONE_SEC} }, - [STATE_FACTORY_TEST] = {{EC_LED_COLOR_RED, 2 * LED_ONE_SEC}, {EC_LED_COLOR_GREEN, 2 * LED_ONE_SEC} }, + [STATE_BATTERY_ERROR] = {{EC_LED_COLOR_RED, 1 * LED_ONE_SEC}, + {LED_OFF, 1 * LED_ONE_SEC} }, + [STATE_FACTORY_TEST] = {{EC_LED_COLOR_RED, 2 * LED_ONE_SEC}, + {EC_LED_COLOR_GREEN, 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, 3 * LED_ONE_SEC}, + {LED_OFF, 0.5 * LED_ONE_SEC} }, + [PWR_LED_STATE_SUSPEND_NO_AC] = {{LED_OFF, LED_INDEFINITE} }, + [PWR_LED_STATE_OFF] = {{LED_OFF, LED_INDEFINITE} }, }; const enum ec_led_id supported_led_ids[] = { @@ -41,12 +48,13 @@ const enum ec_led_id supported_led_ids[] = { const int supported_led_ids_count = ARRAY_SIZE(supported_led_ids); -void led_set_color_power(int enable) +void led_set_color_power(enum ec_led_colors color) { - if (enable) - gpio_set_level(GPIO_LED_3_L, LED_ON_LVL); + if (color == EC_LED_COLOR_WHITE) + gpio_set_level(GPIO_PWR_LED_WHITE_L, LED_ON_LVL); else - gpio_set_level(GPIO_LED_3_L, LED_OFF_LVL); + /* LED_OFF and unsupported colors */ + gpio_set_level(GPIO_PWR_LED_WHITE_L, LED_OFF_LVL); } void led_set_color_battery(enum ec_led_colors color) @@ -95,9 +103,9 @@ int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness) 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(1); + led_set_color_power(EC_LED_COLOR_WHITE); else - led_set_color_power(0); + led_set_color_power(LED_OFF); } return EC_SUCCESS; |