summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordavid.huang <david.huang@quantatw.com>2018-01-10 12:21:32 +0800
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2019-04-18 22:55:12 +0000
commit231122e5ddf364b9f576e978194c97d041ef542b (patch)
treeca3b9b248d036fba55feeb8f4d8e2d593d60167d
parentf9bf7ebf0c91a1dadbcab29d5d2c2b9deec6829b (diff)
downloadchrome-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.c57
-rw-r--r--board/gnawty/bq24717.h2
-rw-r--r--driver/battery/smart.c6
-rw-r--r--include/battery.h3
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 */
};