summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Lee <mike5@huaqin.corp-partner.google.com>2020-10-13 15:46:33 +0800
committerCommit Bot <commit-bot@chromium.org>2020-10-27 02:12:11 +0000
commite0bcfa438df88688b38b33c2a511d5a698c47885 (patch)
tree013ef56f49de6f907775bf58846454c500406af9
parent84d652d98788bde9adfc9f81da3d28821cd5f307 (diff)
downloadchrome-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.c40
-rw-r--r--board/cerise/board.h9
-rw-r--r--board/cerise/led.c39
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);