summaryrefslogtreecommitdiff
path: root/board/kevin
diff options
context:
space:
mode:
authorWonjoon Lee <woojoo.lee@samsung.com>2016-11-08 19:05:51 +0900
committerchrome-bot <chrome-bot@chromium.org>2017-01-30 16:48:44 -0800
commit21b47a9ee5a30388184c4f767b8997da63d9bdd0 (patch)
tree73368fd5fa1763d836861d3d6106e0d13deb3aaa /board/kevin
parent93951a491dd00e20addc1ff99c2896bb9752e665 (diff)
downloadchrome-ec-21b47a9ee5a30388184c4f767b8997da63d9bdd0.tar.gz
kevin: discharge when battery is near full
For device that are using ceramic caps, when battery is full, discharge to 97% and then charge again until the battery is full. This should also help us meet CEC energy spec. BUG=chrome-os-partner:56255 BRANCH=gru TEST=Manual on kevin, insert charger with battery at 97%, verify battery does charge until 100%, and then discharge down to 96% and verify battery charges. Charge to 100% again. Change-Id: I5099cbbb1228823cc611c456e7e3d8311f1c94d6 Signed-off-by: Wonjoon Lee <woojoo.lee@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/434220 Commit-Ready: Shawn N <shawnn@chromium.org> Tested-by: Shawn N <shawnn@chromium.org> Reviewed-by: Shawn N <shawnn@chromium.org>
Diffstat (limited to 'board/kevin')
-rw-r--r--board/kevin/battery.c21
-rw-r--r--board/kevin/led_gru.c3
-rw-r--r--board/kevin/led_kevin.c6
3 files changed, 20 insertions, 10 deletions
diff --git a/board/kevin/battery.c b/board/kevin/battery.c
index 50df1d0258..019dad2f3c 100644
--- a/board/kevin/battery.c
+++ b/board/kevin/battery.c
@@ -108,8 +108,8 @@ enum battery_disconnect_state battery_get_disconnect_state(void)
int charger_profile_override(struct charge_state_data *curr)
{
- static int prev_state = ST_IDLE;
const struct battery_info *batt_info = battery_get_info();
+ int now_discharging;
/* battery temp in 0.1 deg C */
int bat_temp_c = curr->batt.temperature - 2731;
@@ -117,19 +117,22 @@ int charger_profile_override(struct charge_state_data *curr)
if (curr->state == ST_CHARGE) {
/* Don't charge if outside of allowable temperature range */
if (bat_temp_c >= batt_info->charging_max_c * 10 ||
- bat_temp_c < batt_info->charging_min_c * 10 ||
- /* Don't start charging if battery is nearly full */
- (prev_state != ST_CHARGE &&
- curr->batt.state_of_charge > 95) ||
- /* Don't charge if battery voltage is approaching max */
- curr->batt.voltage > batt_info->voltage_max - 10) {
+ bat_temp_c < batt_info->charging_min_c * 10) {
curr->requested_current = curr->requested_voltage = 0;
curr->batt.flags &= ~BATT_FLAG_WANT_CHARGE;
curr->state = ST_IDLE;
- }
+ now_discharging = 0;
+ /* Don't start charging if battery is nearly full */
+ } else if (curr->batt.status & STATUS_FULLY_CHARGED) {
+ curr->requested_current = curr->requested_voltage = 0;
+ curr->batt.flags &= ~BATT_FLAG_WANT_CHARGE;
+ curr->state = ST_DISCHARGE;
+ now_discharging = 1;
+ } else
+ now_discharging = 0;
+ charger_discharge_on_ac(now_discharging);
}
- prev_state = curr->state;
return 0;
}
diff --git a/board/kevin/led_gru.c b/board/kevin/led_gru.c
index 35b9e22117..f02ecb868e 100644
--- a/board/kevin/led_gru.c
+++ b/board/kevin/led_gru.c
@@ -106,6 +106,9 @@ static void gru_led_set_battery(void)
else if (charge_get_percent() < 10)
bat_led_set_color((battery_second & 3)
? LED_OFF : LED_AMBER);
+ else if (charge_get_percent() >= BATTERY_LEVEL_NEAR_FULL &&
+ (chflags & CHARGE_FLAG_EXTERNAL_POWER))
+ bat_led_set_color(LED_GREEN);
else
bat_led_set_color(LED_OFF);
break;
diff --git a/board/kevin/led_kevin.c b/board/kevin/led_kevin.c
index 21c1d0fe95..a06c1553ef 100644
--- a/board/kevin/led_kevin.c
+++ b/board/kevin/led_kevin.c
@@ -86,7 +86,11 @@ static void kevin_led_set_power_battery(void)
/* CHIPSET_STATE_OFF */
switch (charge_get_state()) {
case PWR_STATE_DISCHARGE:
- set_color(LED_OFF);
+ if ((charge_get_flags() & CHARGE_FLAG_EXTERNAL_POWER) &&
+ charge_get_percent() >= BATTERY_LEVEL_NEAR_FULL)
+ set_color(LED_GREEN);
+ else
+ set_color(LED_OFF);
break;
case PWR_STATE_CHARGE:
set_color(LED_RED);