summaryrefslogtreecommitdiff
path: root/board/phaser
diff options
context:
space:
mode:
authorDiana Z <dzigterman@chromium.org>2018-07-31 09:37:24 -0600
committerchrome-bot <chrome-bot@chromium.org>2018-08-01 19:35:26 -0700
commitfe10a59e056643e3b23a5d1b0e6142323b0e5ced (patch)
tree610aca1fd3159e071d6cad94d7fe65a35fa1bb48 /board/phaser
parentd01e71d5b4b1c20c9bd2f9acce7e3a48a1460b78 (diff)
downloadchrome-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.inc2
-rw-r--r--board/phaser/led.c32
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;