summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwen zhang <zhangwen6@huaqin.corp-partner.google.com>2020-11-04 15:52:20 +0800
committerCommit Bot <commit-bot@chromium.org>2020-11-11 01:23:50 +0000
commit48dfb28451d7ecf756a02261ce69fa001ddcc848 (patch)
tree6679dfdd947edd7f0e767797dee13021372bb441
parent7c9ac7b813463aaf52e0afaa008d71faf6f0da7e (diff)
downloadchrome-ec-48dfb28451d7ecf756a02261ce69fa001ddcc848.tar.gz
Kakadu: Update Led Behavior
According to the requirement of OEM, update the led behavior. BUG=b:172400861 BRANCH=firmware-kukui-12573.B TEST=1.make -j BOARD=kakadu 2.verified LED behavior and result is OK. Change-Id: I9b81e8f4b345eb8e9766a99fee95668affacc853 Signed-off-by: wen zhang <zhangwen6@huaqin.corp-partner.google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2517417 Reviewed-by: Chen-Tsung Hsieh <chentsung@chromium.org> Commit-Queue: Chen-Tsung Hsieh <chentsung@chromium.org> (cherry picked from commit fca5fa19da53c5cf598c0c6b9500668fc72ace25) Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2526848
-rw-r--r--board/kakadu/led.c168
1 files changed, 103 insertions, 65 deletions
diff --git a/board/kakadu/led.c b/board/kakadu/led.c
index 80470e0913..87bce0d5ca 100644
--- a/board/kakadu/led.c
+++ b/board/kakadu/led.c
@@ -10,66 +10,123 @@
#include "driver/charger/rt946x.h"
#include "hooks.h"
#include "led_common.h"
+#include "power.h"
const enum ec_led_id supported_led_ids[] = { EC_LED_ID_BATTERY_LED };
const int supported_led_ids_count = ARRAY_SIZE(supported_led_ids);
-static enum charge_state prv_chstate = PWR_STATE_INIT;
-
#define LED_OFF MT6370_LED_ID_OFF
-#define LED_RED MT6370_LED_ID1
-#define LED_GREEN MT6370_LED_ID2
-#define LED_BLUE MT6370_LED_ID3
+#define LED_AMBER MT6370_LED_ID1
+#define LED_WHITE MT6370_LED_ID2
#define LED_MASK_OFF 0
-#define LED_MASK_RED MT6370_MASK_RGB_ISNK1DIM_EN
-#define LED_MASK_GREEN MT6370_MASK_RGB_ISNK2DIM_EN
-#define LED_MASK_BLUE MT6370_MASK_RGB_ISNK3DIM_EN
+#define LED_MASK_AMBER MT6370_MASK_RGB_ISNK1DIM_EN
+#define LED_MASK_WHITE MT6370_MASK_RGB_ISNK2DIM_EN
static void kakadu_led_set_battery(void)
{
enum charge_state chstate;
- static uint8_t prv_r, prv_g, prv_b;
+ enum power_state powerstate;
+ static uint8_t prv_white, prv_amber;
+ static uint8_t time_cnt;
uint8_t br[EC_LED_COLOR_COUNT] = { 0 };
chstate = charge_get_state();
-
- if (prv_chstate == chstate &&
- chstate != PWR_STATE_DISCHARGE)
- return;
-
- prv_chstate = chstate;
+ powerstate = power_get_state();
switch (chstate) {
case PWR_STATE_CHARGE:
- /* RGB(current, duty) = (4mA,1/32)*/
- br[EC_LED_COLOR_BLUE] = 1;
+ case PWR_STATE_CHARGE_NEAR_FULL:
+ if (charge_get_percent() < 94) {
+ br[EC_LED_COLOR_AMBER] = 1;
+ br[EC_LED_COLOR_WHITE] = 0;
+ break;
+ }
+ br[EC_LED_COLOR_WHITE] = 1;
+ br[EC_LED_COLOR_AMBER] = 0;
break;
case PWR_STATE_DISCHARGE:
- /* display SoC 10% = real battery SoC 13%*/
- if (charge_get_percent() <= 13)
- br[EC_LED_COLOR_RED] = 1;
- break;
- case PWR_STATE_CHARGE_NEAR_FULL:
- br[EC_LED_COLOR_GREEN] = 1;
+ if (powerstate == POWER_S0) {
+ /* display SoC 10% = real battery SoC 13% */
+ if (charge_get_percent() < 14) {
+ if (time_cnt < 1) {
+ time_cnt++;
+ br[EC_LED_COLOR_WHITE] = 0;
+ br[EC_LED_COLOR_AMBER] = 1;
+ } else {
+ time_cnt++;
+ br[EC_LED_COLOR_WHITE] = 0;
+ br[EC_LED_COLOR_AMBER] = 0;
+ if (time_cnt > 3)
+ time_cnt = 0;
+ }
+ break;
+ }
+ br[EC_LED_COLOR_WHITE] = 1;
+ br[EC_LED_COLOR_AMBER] = 0;
+ break;
+ } else if (powerstate == POWER_S3) {
+ if (time_cnt < 2) {
+ time_cnt++;
+ br[EC_LED_COLOR_WHITE] = 1;
+ br[EC_LED_COLOR_AMBER] = 0;
+ } else {
+ time_cnt++;
+ br[EC_LED_COLOR_WHITE] = 0;
+ br[EC_LED_COLOR_AMBER] = 0;
+ if (time_cnt > 3)
+ time_cnt = 0;
+ }
+ break;
+ } else if (powerstate == POWER_S5 || powerstate == POWER_G3) {
+ br[EC_LED_COLOR_WHITE] = 0;
+ br[EC_LED_COLOR_AMBER] = 0;
+ }
break;
case PWR_STATE_ERROR:
- br[EC_LED_COLOR_RED] = 1;
+ if (powerstate == POWER_S0) {
+ if (time_cnt < 1) {
+ time_cnt++;
+ br[EC_LED_COLOR_WHITE] = 0;
+ br[EC_LED_COLOR_AMBER] = 1;
+ } else {
+ time_cnt++;
+ br[EC_LED_COLOR_WHITE] = 0;
+ br[EC_LED_COLOR_AMBER] = 0;
+ if (time_cnt > 1)
+ time_cnt = 0;
+ }
+ break;
+ } else if (powerstate == POWER_S3) {
+ if (time_cnt < 2) {
+ time_cnt++;
+ br[EC_LED_COLOR_WHITE] = 1;
+ br[EC_LED_COLOR_AMBER] = 0;
+ } else {
+ time_cnt++;
+ br[EC_LED_COLOR_WHITE] = 0;
+ br[EC_LED_COLOR_AMBER] = 0;
+ if (time_cnt > 3)
+ time_cnt = 0;
+ }
+ break;
+ } else if (powerstate == POWER_S5 || powerstate == POWER_G3) {
+ br[EC_LED_COLOR_WHITE] = 0;
+ br[EC_LED_COLOR_AMBER] = 0;
+ }
break;
default:
/* Other states don't alter LED behavior */
return;
}
- if (prv_r == br[EC_LED_COLOR_RED] &&
- prv_g == br[EC_LED_COLOR_GREEN] &&
- prv_b == br[EC_LED_COLOR_BLUE])
+ if (prv_white == br[EC_LED_COLOR_WHITE] &&
+ prv_amber == br[EC_LED_COLOR_AMBER])
return;
- prv_r = br[EC_LED_COLOR_RED];
- prv_g = br[EC_LED_COLOR_GREEN];
- prv_b = br[EC_LED_COLOR_BLUE];
+ prv_white = br[EC_LED_COLOR_WHITE];
+ prv_amber = br[EC_LED_COLOR_AMBER];
led_set_brightness(EC_LED_ID_BATTERY_LED, br);
}
@@ -78,56 +135,40 @@ void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range)
if (led_id != EC_LED_ID_BATTERY_LED)
return;
- brightness_range[EC_LED_COLOR_RED] = MT6370_LED_BRIGHTNESS_MAX;
- brightness_range[EC_LED_COLOR_GREEN] = MT6370_LED_BRIGHTNESS_MAX;
- brightness_range[EC_LED_COLOR_BLUE] = MT6370_LED_BRIGHTNESS_MAX;
+ brightness_range[EC_LED_COLOR_WHITE] = MT6370_LED_BRIGHTNESS_MAX;
+ brightness_range[EC_LED_COLOR_AMBER] = MT6370_LED_BRIGHTNESS_MAX;
}
int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness)
{
- uint8_t red, green, blue;
+ uint8_t white, amber;
if (led_id != EC_LED_ID_BATTERY_LED)
return EC_ERROR_INVAL;
- red = brightness[EC_LED_COLOR_RED];
- green = brightness[EC_LED_COLOR_GREEN];
- blue = brightness[EC_LED_COLOR_BLUE];
+ white = brightness[EC_LED_COLOR_WHITE];
+ amber = brightness[EC_LED_COLOR_AMBER];
- mt6370_led_set_brightness(LED_RED, red);
- mt6370_led_set_brightness(LED_GREEN, green);
- mt6370_led_set_brightness(LED_BLUE, blue);
+ mt6370_led_set_brightness(LED_WHITE, white);
+ mt6370_led_set_brightness(LED_AMBER, amber);
/* Enables LED sink power if necessary. */
- mt6370_led_set_color((red ? LED_MASK_RED : 0) |
- (blue ? LED_MASK_BLUE : 0) |
- (green ? LED_MASK_GREEN : 0));
+ mt6370_led_set_color((white ? LED_MASK_WHITE : 0) |
+ (amber ? LED_MASK_AMBER : 0));
return EC_SUCCESS;
}
-/*
- * Reset prv_chstate so that led can be updated immediately once
- * auto-controlled.
- */
-static void led_reset_auto_control(void)
-{
- prv_chstate = PWR_STATE_INIT;
-}
-
static void kakadu_led_init(void)
{
const enum mt6370_led_dim_mode dim = MT6370_LED_DIM_MODE_PWM;
const enum mt6370_led_pwm_freq freq = MT6370_LED_PWM_FREQ1000;
mt6370_led_set_color(0);
- mt6370_led_set_dim_mode(LED_RED, dim);
- mt6370_led_set_dim_mode(LED_GREEN, dim);
- mt6370_led_set_dim_mode(LED_BLUE, dim);
- mt6370_led_set_pwm_frequency(LED_RED, freq);
- mt6370_led_set_pwm_frequency(LED_GREEN, freq);
- mt6370_led_set_pwm_frequency(LED_BLUE, freq);
- mt6370_led_set_pwm_dim_duty(LED_RED, 0);
- mt6370_led_set_pwm_dim_duty(LED_GREEN, 0);
- mt6370_led_set_pwm_dim_duty(LED_BLUE, 0);
+ mt6370_led_set_dim_mode(LED_WHITE, dim);
+ mt6370_led_set_dim_mode(LED_AMBER, dim);
+ mt6370_led_set_pwm_frequency(LED_WHITE, freq);
+ mt6370_led_set_pwm_frequency(LED_AMBER, freq);
+ mt6370_led_set_pwm_dim_duty(LED_WHITE, 255);
+ mt6370_led_set_pwm_dim_duty(LED_AMBER, 255);
}
DECLARE_HOOK(HOOK_INIT, kakadu_led_init, HOOK_PRIO_DEFAULT);
@@ -136,8 +177,6 @@ static void led_second(void)
{
if (led_auto_control_is_enabled(EC_LED_ID_BATTERY_LED))
kakadu_led_set_battery();
- else
- led_reset_auto_control();
}
DECLARE_HOOK(HOOK_SECOND, led_second, HOOK_PRIO_DEFAULT);
@@ -150,13 +189,12 @@ __override void led_control(enum ec_led_id led_id, enum ec_led_state state)
return;
if (state == LED_STATE_RESET) {
- led_reset_auto_control();
led_auto_control(EC_LED_ID_BATTERY_LED, 1);
return;
}
if (state)
- br[EC_LED_COLOR_GREEN] = 1;
+ br[EC_LED_COLOR_WHITE] = 1;
led_auto_control(EC_LED_ID_BATTERY_LED, 0);
led_set_brightness(EC_LED_ID_BATTERY_LED, br);