diff options
author | michael5 <michael5_chen@pegatroncorp.com> | 2015-12-29 19:32:58 +0800 |
---|---|---|
committer | ChromeOS bot <3su6n15k.default@developer.gserviceaccount.com> | 2016-01-06 00:00:45 +0000 |
commit | 0be3bc3d96320fa4812ca584f1c7f57a920cc4d0 (patch) | |
tree | 3517f734e21abb87ca8a9a7832d21ef2cfcfc6a9 | |
parent | fec6f23d6014de573d50a27030dfe58ab0bbeb1d (diff) | |
download | chrome-ec-0be3bc3d96320fa4812ca584f1c7f57a920cc4d0.tar.gz |
edgar: Add abnormal battery detect condition
Add abnormal battery detect condition for battery charge current and
charge voltage return zero. And blink battery LED 1 sec on, 1 sec off.
BUG=none
BRANCH=firmware-strago-7287.B
TEST=Verify
Change-Id: Ic282c06548b9ff6adbd47d2d594e63888d2d82f9
Signed-off-by: michael5 <michael5_chen@pegatroncorp.com>
Reviewed-on: https://chromium-review.googlesource.com/319986
Reviewed-by: Shawn N <shawnn@chromium.org>
-rw-r--r-- | board/edgar/led.c | 20 | ||||
-rw-r--r-- | driver/battery/smart.c | 3 | ||||
-rw-r--r-- | include/battery.h | 4 |
3 files changed, 19 insertions, 8 deletions
diff --git a/board/edgar/led.c b/board/edgar/led.c index a43ebefd4e..17e63a3932 100644 --- a/board/edgar/led.c +++ b/board/edgar/led.c @@ -5,6 +5,7 @@ * Power/Battery LED control for Edgar */ +#include "battery.h" #include "charge_state.h" #include "chipset.h" #include "console.h" @@ -140,13 +141,15 @@ static void edgar_led_set_battery(void) int remaining_capacity; int full_charge_capacity; int permillage; - + int full_charge_flag; + const struct batt_params *batt = charger_current_battery_params(); battery_secs++; remaining_capacity = *(int *)host_get_memmap(EC_MEMMAP_BATT_CAP); full_charge_capacity = *(int *)host_get_memmap(EC_MEMMAP_BATT_LFCC); permillage = !full_charge_capacity ? 0 : (1000 * remaining_capacity) / full_charge_capacity; + full_charge_flag = ((batt->status & 0x0020) == 0) ? 0 : 1; /* BAT LED behavior: * Fully charged / idle: Blue @@ -157,11 +160,16 @@ static void edgar_led_set_battery(void) * situation: Orange in blinking mode (1 sec on, 1 sec off) * Using battery or not connected to AC power: OFF */ + if (!full_charge_flag && (batt->desired_voltage == 0) + && (batt->desired_current == 0)) { + bat_led_set_color( + (battery_secs % 2) < LED_ON_SECS + ? LED_ORANGE : LED_OFF); + return; + } switch (charge_get_state()) { case PWR_STATE_CHARGE: - bat_led_set_color( - charge_get_percent() == 100 - ? LED_BLUE : LED_ORANGE); + bat_led_set_color(full_charge_flag ? LED_BLUE : LED_ORANGE); break; case PWR_STATE_DISCHARGE: /* Less than 0%[UI], blink one second every two seconds */ @@ -185,9 +193,7 @@ static void edgar_led_set_battery(void) ? LED_ORANGE : LED_OFF); break; case PWR_STATE_CHARGE_NEAR_FULL: - bat_led_set_color( - charge_get_percent() == 100 - ? LED_BLUE : LED_ORANGE); + bat_led_set_color(full_charge_flag ? LED_BLUE : LED_ORANGE); break; case PWR_STATE_IDLE: /* External power connected in IDLE. */ if (charge_get_flags() & CHARGE_FLAG_FORCE_IDLE) diff --git a/driver/battery/smart.c b/driver/battery/smart.c index 0c63e0fec1..abaab2dd24 100644 --- a/driver/battery/smart.c +++ b/driver/battery/smart.c @@ -290,6 +290,9 @@ void battery_get_params(struct batt_params *batt) if (sb_read(SB_CHARGING_CURRENT, &batt_new.desired_current)) batt_new.flags |= BATT_FLAG_BAD_DESIRED_CURRENT; + if (sb_read(SB_BATTERY_STATUS, &batt_new.status)) + batt_new.flags |= BATT_FLAG_BAD_STATUS; + if (battery_remaining_capacity(&batt_new.remaining_capacity)) batt_new.flags |= BATT_FLAG_BAD_REMAINING_CAPACITY; diff --git a/include/battery.h b/include/battery.h index 18c84a37d3..14c7f57ad4 100644 --- a/include/battery.h +++ b/include/battery.h @@ -67,6 +67,7 @@ struct batt_params { int full_capacity; /* Capacity in mAh (might change occasionally) */ enum battery_present is_present; /* Is the battery physically present */ int flags; /* Flags */ + int status; /* Battery Status */ }; /* Flags for batt_params */ @@ -86,8 +87,9 @@ struct batt_params { #define BATT_FLAG_BAD_DESIRED_CURRENT 0x00000080 #define BATT_FLAG_BAD_REMAINING_CAPACITY 0x00000100 #define BATT_FLAG_BAD_FULL_CAPACITY 0x00000200 +#define BATT_FLAG_BAD_STATUS 0x00000400 /* All of the above BATT_FLAG_BAD_* bits */ -#define BATT_FLAG_BAD_ANY 0x000003fc +#define BATT_FLAG_BAD_ANY 0x000007fc /* Battery constants */ struct battery_info { |