diff options
author | Mike Lee <mike5@huaqin.corp-partner.google.com> | 2020-10-13 15:46:33 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-10-27 02:12:11 +0000 |
commit | e0bcfa438df88688b38b33c2a511d5a698c47885 (patch) | |
tree | 013ef56f49de6f907775bf58846454c500406af9 | |
parent | 84d652d98788bde9adfc9f81da3d28821cd5f307 (diff) | |
download | chrome-ec-e0bcfa438df88688b38b33c2a511d5a698c47885.tar.gz |
Cerise/Stern: Update Led Behavior
1. According to EC_SKU_ID to distinguish Cerise and Stern to execute
different Battery Led behavior
2. Modify Power Led 2s on, 2s off in S3
3. Add Battery low Led behavior
BUG=b:170654166
BRANCH=firmware-kukui-12573.B
TEST=make buildall
verified LED behavior and result is OK
Signed-off-by: Mike Lee <mike5@huaqin.corp-partner.google.com>
Change-Id: Iac86abc1bd86731acba363cd0da3d83a25896a4b
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2467597
Reviewed-by: Chen-Tsung Hsieh <chentsung@chromium.org>
Reviewed-by: Ting Shen <phoenixshen@chromium.org>
(cherry picked from commit 0dc36ee6f6fc647fcd12e0367f1722caca95551a)
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2494608
Reviewed-by: Aaron Zhang <zhangjianbo@huaqin.corp-partner.google.com>
Commit-Queue: Chen-Tsung Hsieh <chentsung@chromium.org>
-rw-r--r-- | board/cerise/board.c | 40 | ||||
-rw-r--r-- | board/cerise/board.h | 9 | ||||
-rw-r--r-- | board/cerise/led.c | 39 |
3 files changed, 81 insertions, 7 deletions
diff --git a/board/cerise/board.c b/board/cerise/board.c index 2f9fa19eda..61b06b3b3a 100644 --- a/board/cerise/board.c +++ b/board/cerise/board.c @@ -447,3 +447,43 @@ void lid_angle_peripheral_enable(int enable) keyboard_scan_enable(enable, KB_SCAN_DISABLE_LID_ANGLE); } #endif + +/* map from sku id voltage in mv */ +const int16_t sku_id_map[] = { + 109, /* 51.1K , 2.2K ohm */ + 211, /* 51.1k , 6.8K ohm */ +}; +BUILD_ASSERT(ARRAY_SIZE(sku_id_map) == BOARD_SKU_ID_COUNT); + +#define THRESHOLD_MV 56 /* Simply assume 1800/16/2 */ + +int board_get_sku_id(void) +{ + static int version = BOARD_SKU_ID_UNKNOWN; + int mv; + int i; + + if (version != BOARD_SKU_ID_UNKNOWN) + return version; + + mv = adc_read_channel(ADC_EC_SKU_ID); + + if (mv == ADC_READ_ERROR) + mv = adc_read_channel(ADC_EC_SKU_ID); + + for (i = 0; i < BOARD_SKU_ID_COUNT; ++i) { + if (mv < sku_id_map[i] + THRESHOLD_MV) { + version = i; + break; + } + } + /* + * For devices without pogo, Disable ADC module after we detect the + * board version, since this is the only thing ADC module needs to do + * for this board. + */ + if (version != BOARD_SKU_ID_UNKNOWN) + adc_disable(); + + return version; +} diff --git a/board/cerise/board.h b/board/cerise/board.h index 96fa560546..0adcf6b958 100644 --- a/board/cerise/board.h +++ b/board/cerise/board.h @@ -50,6 +50,7 @@ #define CONFIG_USB_MUX_IT5205 #define CONFIG_LED_ONOFF_STATES +#define CONFIG_LED_ONOFF_STATES_BAT_LOW 10 #define CONFIG_LED_POWER_LED #define CONFIG_LED_COMMON @@ -127,6 +128,13 @@ enum battery_type { BATTERY_TYPE_COUNT, }; +enum BOARD_SKU_ID { + BOARD_SKU_ID_UNKNOWN = -1, + BOARD_SKU_ID_REV0 = 0, + BOARD_SKU_ID_REV1 = 1, + BOARD_SKU_ID_COUNT, +}; + #include "gpio_signal.h" #include "registers.h" @@ -142,6 +150,7 @@ int board_is_sourcing_vbus(int port); /* returns the i2c port number of charger */ int board_get_charger_i2c(void); +int board_get_sku_id(void); #endif /* !__ASSEMBLER__ */ diff --git a/board/cerise/led.c b/board/cerise/led.c index ff5f9f2373..536733e87c 100644 --- a/board/cerise/led.c +++ b/board/cerise/led.c @@ -10,6 +10,7 @@ #include "ec_commands.h" #include "led_common.h" #include "led_onoff_states.h" +#include "hooks.h" #define LED_ON_LVL 0 #define LED_OFF_LVL 1 @@ -20,21 +21,30 @@ 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_AMBER, LED_INDEFINITE} }, [STATE_CHARGING_LVL_2] = {{EC_LED_COLOR_AMBER, LED_INDEFINITE} }, - [STATE_CHARGING_FULL_CHARGE] = {{EC_LED_COLOR_WHITE, 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}, + [STATE_DISCHARGE_S0_BAT_LOW] = {{EC_LED_COLOR_AMBER, 1 * LED_ONE_SEC}, + {LED_OFF, 3 * LED_ONE_SEC} }, + [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} }, }; +struct led_descriptor led_bat_clamshell[LED_NUM_STATES][LED_NUM_PHASES] = { + [STATE_DISCHARGE_S0] = {{EC_LED_COLOR_WHITE, LED_INDEFINITE} }, + [STATE_DISCHARGE_S3] = {{EC_LED_COLOR_WHITE, 2 * LED_ONE_SEC}, + {LED_OFF, 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] = {{LED_OFF, LED_INDEFINITE} }, + [PWR_LED_STATE_SUSPEND_AC] = {{EC_LED_COLOR_WHITE, 2 * LED_ONE_SEC}, + {LED_OFF, 2 * LED_ONE_SEC} }, + [PWR_LED_STATE_SUSPEND_NO_AC] = {{EC_LED_COLOR_WHITE, 2 * LED_ONE_SEC}, + {LED_OFF, 2 * LED_ONE_SEC} }, [PWR_LED_STATE_OFF] = {{LED_OFF, LED_INDEFINITE} }, }; @@ -103,3 +113,18 @@ int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness) } return EC_SUCCESS; } + +static void cerise_led_init(void) +{ + int i; + + if (board_get_sku_id() == BOARD_SKU_ID_REV0) { + for (i = 0; i < LED_NUM_PHASES; i++) { + led_bat_state_table[STATE_DISCHARGE_S0][i] = + led_bat_clamshell[STATE_DISCHARGE_S0][i]; + led_bat_state_table[STATE_DISCHARGE_S3][i] = + led_bat_clamshell[STATE_DISCHARGE_S3][i]; + } + } +} +DECLARE_HOOK(HOOK_INIT, cerise_led_init, HOOK_PRIO_DEFAULT); |