From d051855055592bd6b302193edb6c3ebb600a48d4 Mon Sep 17 00:00:00 2001 From: james_chao Date: Mon, 7 Dec 2015 21:39:52 +0800 Subject: Terra: add battery information Terra 12 and Terra 13 use different batterys, terra 12 use 2 series battery, terra 13 use 3 series battery, and we can know the battery type from battery manufacture name. BUG=None BRANCH=firmware-strago-7287.B TEST=Check the EC console output message Change-Id: Id6702d8bb208f0e8f699e3cd66466b6b05865d3b Signed-off-by: james_chao Reviewed-on: https://chromium-review.googlesource.com/316371 Reviewed-by: Shawn N --- board/terra/battery.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 75 insertions(+), 6 deletions(-) diff --git a/board/terra/battery.c b/board/terra/battery.c index 43fa956ced..120ebe6bc3 100644 --- a/board/terra/battery.c +++ b/board/terra/battery.c @@ -7,26 +7,95 @@ #include "battery.h" #include "battery_smart.h" +#include "console.h" + +#define CPRINTS(format, args...) cprints(CC_CHARGER, format, ## args) /* Shutdown mode parameter to write to manufacturer access register */ #define SB_SHUTDOWN_DATA 0x0010 -static const struct battery_info info = { +enum BatterySeries { + UNKNOWN, + SERIES_2, + SERIES_3, +}; + +static enum BatterySeries series; + +static const struct battery_info info_prechg = { + .voltage_max = 8700,/* mV */ + .voltage_normal = 8400, + .voltage_min = 6000, + .precharge_current = 256,/* mA */ + .start_charging_min_c = 0, + .start_charging_max_c = 55, + .charging_min_c = 0, + .charging_max_c = 55, + .discharging_min_c = 0, + .discharging_max_c = 60, +}; + +static const struct battery_info info_2s = { .voltage_max = 8700,/* mV */ .voltage_normal = 7600, .voltage_min = 6000, - .precharge_current = 150,/* mA */ + .precharge_current = 256,/* mA */ + .start_charging_min_c = 0, + .start_charging_max_c = 55, + .charging_min_c = 0, + .charging_max_c = 55, + .discharging_min_c = 0, + .discharging_max_c = 60, +}; + +static const struct battery_info info_3s = { + .voltage_max = 13050,/* mV */ + .voltage_normal = 11400, + .voltage_min = 9000, + .precharge_current = 256,/* mA */ .start_charging_min_c = 0, - .start_charging_max_c = 45, + .start_charging_max_c = 55, .charging_min_c = 0, - .charging_max_c = 45, - .discharging_min_c = -20, + .charging_max_c = 55, + .discharging_min_c = 0, .discharging_max_c = 60, }; const struct battery_info *battery_get_info(void) { - return &info; + const struct battery_info *ret = &info_prechg; + + if (series == UNKNOWN) { + char manuf[11]; + + if (!battery_manufacturer_name(manuf, sizeof(manuf))) { + if (manuf[9] == 'A') { + CPRINTS("2s battery"); + series = SERIES_2; + } else if (manuf[9] == 'B') { + CPRINTS("3s battery"); + series = SERIES_3; + } else { + CPRINTS("unknown battery"); + } + } else { + CPRINTS("read manufacture name error"); + } + } + + switch (series) { + case UNKNOWN: + ret = &info_prechg; + break; + case SERIES_2: + ret = &info_2s; + break; + case SERIES_3: + ret = &info_3s; + break; + } + + return ret; } int board_cut_off_battery(void) -- cgit v1.2.1