diff options
-rw-r--r-- | board/fennel/board.h | 5 | ||||
-rw-r--r-- | board/fennel/gpio.inc | 6 | ||||
-rw-r--r-- | board/fennel/led.c | 99 |
3 files changed, 72 insertions, 38 deletions
diff --git a/board/fennel/board.h b/board/fennel/board.h index aa24e60526..2c239f2f3f 100644 --- a/board/fennel/board.h +++ b/board/fennel/board.h @@ -45,6 +45,9 @@ #define CONFIG_USB_MUX_IT5205 +#define CONFIG_LED_ONOFF_STATES +#define CONFIG_LED_POWER_LED + /* Motion Sensors */ #ifndef VARIANT_KUKUI_NO_SENSORS #define CONFIG_ACCEL_LIS2DWL /* Lid accel */ @@ -89,8 +92,6 @@ (EC_HOST_EVENT_MASK(EC_HOST_EVENT_LID_OPEN) |\ EC_HOST_EVENT_MASK(EC_HOST_EVENT_POWER_BUTTON)) -#define CONFIG_LED_ONOFF_STATES - #ifndef __ASSEMBLER__ enum adc_channel { diff --git a/board/fennel/gpio.inc b/board/fennel/gpio.inc index 7aed6abfc2..3dccd94506 100644 --- a/board/fennel/gpio.inc +++ b/board/fennel/gpio.inc @@ -84,9 +84,9 @@ GPIO(BOOTBLOCK_EN_L, PIN(C, 1), GPIO_ODR_HIGH) GPIO(EN_PP1800_S5_L, PIN(A, 14), GPIO_OUT_LOW) GPIO(USB_C0_DISCHARGE, PIN(B, 6), GPIO_OUT_LOW) -IOEX(LED_BLUE, EXPIN(0, 1, 4), GPIO_OUT_HIGH) /* LED BLUE */ -IOEX(LED_GREEN, EXPIN(0, 1, 3), GPIO_OUT_HIGH) /* LED GREEN */ -IOEX(LED_ORANGE, EXPIN(0, 1, 2), GPIO_OUT_HIGH) /* LED ORANGE */ +IOEX(PWR_LED_WHITE_L, EXPIN(0, 1, 4), GPIO_OUT_HIGH) +IOEX(BAT_LED_GREEN_FULL_L, EXPIN(0, 1, 3), GPIO_OUT_HIGH) +IOEX(BAT_LED_RED_L, EXPIN(0, 1, 2), GPIO_OUT_HIGH) IOEX(KB_BL_EN, EXPIN(0, 0, 7), GPIO_OUT_LOW) /* diff --git a/board/fennel/led.c b/board/fennel/led.c index f1228e7f56..69b9fcfe97 100644 --- a/board/fennel/led.c +++ b/board/fennel/led.c @@ -10,71 +10,104 @@ #include "ec_commands.h" #include "led_common.h" #include "led_onoff_states.h" + #define LED_ON_LVL 0 #define LED_OFF_LVL 1 + const int led_charge_lvl_1 = 5; -const int led_charge_lvl_2 = 95; +const int led_charge_lvl_2 = 97; + struct led_descriptor led_bat_state_table[LED_NUM_STATES][LED_NUM_PHASES] = { - [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_BLUE, LED_INDEFINITE} }, - [STATE_DISCHARGE_S0] = {{EC_LED_COLOR_BLUE, LED_INDEFINITE} }, - [STATE_DISCHARGE_S3] = {{EC_LED_COLOR_AMBER, 1 * LED_ONE_SEC}, - {LED_OFF, 3 * LED_ONE_SEC} }, + [STATE_CHARGING_LVL_1] = {{EC_LED_COLOR_RED, LED_INDEFINITE} }, + [STATE_CHARGING_LVL_2] = {{EC_LED_COLOR_AMBER, LED_INDEFINITE} }, + [STATE_CHARGING_FULL_CHARGE] = {{EC_LED_COLOR_GREEN, 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}, + [STATE_BATTERY_ERROR] = {{EC_LED_COLOR_RED, 1 * LED_ONE_SEC}, {LED_OFF, 1 * LED_ONE_SEC} }, - [STATE_FACTORY_TEST] = {{EC_LED_COLOR_BLUE, 2 * LED_ONE_SEC}, - {EC_LED_COLOR_AMBER, 2 * 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, 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} }, +}; + const enum ec_led_id supported_led_ids[] = { - EC_LED_ID_BATTERY_LED + 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_AMBER: - ioex_set_level(IOEX_LED_ORANGE, LED_ON_LVL); - ioex_set_level(IOEX_LED_BLUE, LED_OFF_LVL); - ioex_set_level(IOEX_LED_GREEN, LED_OFF_LVL); + case EC_LED_COLOR_GREEN: + ioex_set_level(IOEX_BAT_LED_GREEN_FULL_L, LED_ON_LVL); + ioex_set_level(IOEX_BAT_LED_RED_L, LED_OFF_LVL); break; - case EC_LED_COLOR_BLUE: - ioex_set_level(IOEX_LED_BLUE, LED_ON_LVL); - ioex_set_level(IOEX_LED_ORANGE, LED_OFF_LVL); - ioex_set_level(IOEX_LED_GREEN, LED_OFF_LVL); + case EC_LED_COLOR_AMBER: + ioex_set_level(IOEX_BAT_LED_GREEN_FULL_L, LED_ON_LVL); + ioex_set_level(IOEX_BAT_LED_RED_L, LED_ON_LVL); break; - case EC_LED_COLOR_GREEN: - ioex_set_level(IOEX_LED_GREEN, LED_ON_LVL); - ioex_set_level(IOEX_LED_BLUE, LED_OFF_LVL); - ioex_set_level(IOEX_LED_ORANGE, LED_OFF_LVL); + case EC_LED_COLOR_RED: + ioex_set_level(IOEX_BAT_LED_GREEN_FULL_L, LED_OFF_LVL); + ioex_set_level(IOEX_BAT_LED_RED_L, LED_ON_LVL); break; default: /* LED_OFF and other unsupported colors */ - ioex_set_level(IOEX_LED_GREEN, LED_OFF_LVL); - ioex_set_level(IOEX_LED_BLUE, LED_OFF_LVL); - ioex_set_level(IOEX_LED_ORANGE, LED_OFF_LVL); + ioex_set_level(IOEX_BAT_LED_GREEN_FULL_L, LED_OFF_LVL); + ioex_set_level(IOEX_BAT_LED_RED_L, LED_OFF_LVL); + break; + } +} + +void led_set_color_power(enum ec_led_colors color) +{ + switch (color) { + case EC_LED_COLOR_WHITE: + ioex_set_level(IOEX_PWR_LED_WHITE_L, LED_ON_LVL); + break; + default: + ioex_set_level(IOEX_PWR_LED_WHITE_L, LED_OFF_LVL); break; } } + void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range) { if (led_id == EC_LED_ID_BATTERY_LED) { - brightness_range[EC_LED_COLOR_AMBER] = 1; - brightness_range[EC_LED_COLOR_BLUE] = 1; brightness_range[EC_LED_COLOR_GREEN] = 1; + brightness_range[EC_LED_COLOR_AMBER] = 1; + brightness_range[EC_LED_COLOR_RED] = 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 (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_BLUE] != 0) - led_set_color_battery(EC_LED_COLOR_BLUE); - else if (brightness[EC_LED_COLOR_GREEN] != 0) + if (brightness[EC_LED_COLOR_GREEN] != 0) led_set_color_battery(EC_LED_COLOR_GREEN); + else if (brightness[EC_LED_COLOR_AMBER] != 0) + led_set_color_battery(EC_LED_COLOR_AMBER); + else if (brightness[EC_LED_COLOR_RED] != 0) + led_set_color_battery(EC_LED_COLOR_RED); 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); + } else { + return EC_ERROR_INVAL; } return EC_SUCCESS; } |