diff options
author | david.huang <david.huang@quantatw.com> | 2018-01-10 12:21:32 +0800 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2019-04-18 22:55:12 +0000 |
commit | 231122e5ddf364b9f576e978194c97d041ef542b (patch) | |
tree | ca3b9b248d036fba55feeb8f4d8e2d593d60167d | |
parent | f9bf7ebf0c91a1dadbcab29d5d2c2b9deec6829b (diff) | |
download | chrome-ec-231122e5ddf364b9f576e978194c97d041ef542b.tar.gz |
Gnawty: Change charge voltage for battery
Change battery charge voltage based on Cycle Count or State of Health
for different battery.
BRANCH=gnawty
BUG=b:37408815
TEST=Use console command "charger" to check charge voltage with different
battery.
Change-Id: I02414440d0f913dcead85b66c0035466bf8c5e10
Signed-off-by: David Huang <David.Huang@quantatw.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/863303
Reviewed-by: Vincent Wang <vwang@chromium.org>
Reviewed-by: Scott Collyer <scollyer@chromium.org>
-rw-r--r-- | board/gnawty/bq24717.c | 57 | ||||
-rw-r--r-- | board/gnawty/bq24717.h | 2 | ||||
-rw-r--r-- | driver/battery/smart.c | 6 | ||||
-rw-r--r-- | include/battery.h | 3 |
4 files changed, 37 insertions, 31 deletions
diff --git a/board/gnawty/bq24717.c b/board/gnawty/bq24717.c index ec0dd2a920..5849a0c88f 100644 --- a/board/gnawty/bq24717.c +++ b/board/gnawty/bq24717.c @@ -11,6 +11,7 @@ #include "charger.h" #include "console.h" #include "common.h" +#include "host_command.h" #include "system.h" #include "util.h" @@ -166,52 +167,47 @@ int charger_get_voltage(int *voltage) return ret; } -static int battery_charge_voltage_check(void) +int battery_charge_voltage_check(void) { - int cycle, fcc, dc, soh, rv, change = 0; + int cycle, fcc, dc, soh = 100; int board_version = 0; board_version = system_get_board_version(); if (board_version == 0x00) { - rv = battery_cycle_count(&cycle); - if (!rv && cycle >= 21) { - CPRINTF("Cycle change charge voltage\n"); - change = 1; - return change; - } + cycle = *(int *)host_get_memmap(EC_MEMMAP_BATT_CCNT); + if (cycle >= 21) + return 1; } else if ((board_version == 0x02) || (board_version == 0x04)) { - rv = battery_full_charge_capacity(&fcc); - rv &= battery_design_capacity(&dc); - if (!rv) { - soh = fcc*100/dc; - if (soh <= 95) { - CPRINTF("SOH change charge voltage\n"); - change = 1; - return change; - } - } + fcc = *(int *)host_get_memmap(EC_MEMMAP_BATT_LFCC); + dc = *(int *)host_get_memmap(EC_MEMMAP_BATT_DCAP); + if (dc != 0) + soh = fcc * 100 / dc; + if (soh <= 95) + return 1; } - return change; + return 0; } int charger_set_voltage(int voltage) { - int board_version = 0; + int desired_voltage, board_version = 0; board_version = system_get_board_version(); - if (battery_charge_voltage_check()) { - if (voltage != 0) { - if (board_version == 0x00) - voltage = charger_closest_voltage(12750); - else if (board_version == 0x02) - voltage = charger_closest_voltage(17200); - else if (board_version == 0x04) - voltage = charger_closest_voltage(12900); + if (voltage != 0) { + if (battery_charge_voltage_check()) { + if (!sb_read(SB_CHARGING_VOLTAGE, &desired_voltage)) { + if (board_version == 0x00) + voltage = desired_voltage - 132; + else if (board_version == 0x02) + voltage = desired_voltage - 200; + else if (board_version == 0x04) + voltage = desired_voltage - 150; + voltage = charger_closest_voltage(voltage); + } } - } else - voltage = charger_closest_voltage(voltage); + } cached_voltage = voltage; @@ -222,7 +218,6 @@ int charger_set_voltage(int voltage) return sbc_write(SB_CHARGING_VOLTAGE, voltage); } - /* Charging power state initialization */ int charger_post_init(void) { diff --git a/board/gnawty/bq24717.h b/board/gnawty/bq24717.h index 5bcc55fe16..354b0fe37d 100644 --- a/board/gnawty/bq24717.h +++ b/board/gnawty/bq24717.h @@ -128,4 +128,6 @@ #define INPUT_I_MAX (8064) #define INPUT_I_STEP (64) +void charger_battery_get_params(void); + #endif /* __CROS_EC_CHARGER_BQ24717_H */ diff --git a/driver/battery/smart.c b/driver/battery/smart.c index 2a0278cee5..60da5e6b14 100644 --- a/driver/battery/smart.c +++ b/driver/battery/smart.c @@ -259,6 +259,12 @@ void battery_get_params(struct batt_params *batt) batt_new.desired_voltage = batt_new.desired_current = 0; } + if (sb_read(SB_CYCLE_COUNT, &batt_new.cycle)) + batt_new.flags |= BATT_FLAG_BAD_ANY; + if (sb_read(SB_FULL_CHARGE_CAPACITY, &batt_new.full_charge_cap)) + batt_new.flags |= BATT_FLAG_BAD_ANY; + if (sb_read(SB_DESIGN_CAPACITY, &batt_new.design_cap)) + batt_new.flags |= BATT_FLAG_BAD_ANY; /* Update visible battery parameters */ memcpy(batt, &batt_new, sizeof(*batt)); } diff --git a/include/battery.h b/include/battery.h index 540a143653..9e88d8938e 100644 --- a/include/battery.h +++ b/include/battery.h @@ -49,6 +49,9 @@ struct batt_params { int current; /* Battery current (mA); negative=discharging */ int desired_voltage; /* Charging voltage desired by battery (mV) */ int desired_current; /* Charging current desired by battery (mA) */ + int cycle; + int full_charge_cap; + int design_cap; int flags; /* Flags */ }; |