summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjames_chao <james_chao@asus.com>2015-12-07 21:39:52 +0800
committerChromeOS bot <3su6n15k.default@developer.gserviceaccount.com>2015-12-07 19:27:56 +0000
commitd051855055592bd6b302193edb6c3ebb600a48d4 (patch)
tree7b414212fdf40574f254d10ec2aefb72dd793b0d
parentf2a05b1a0d807ab1e462495736633610d76ce5bc (diff)
downloadchrome-ec-d051855055592bd6b302193edb6c3ebb600a48d4.tar.gz
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 <james_chao@asus.com> Reviewed-on: https://chromium-review.googlesource.com/316371 Reviewed-by: Shawn N <shawnn@chromium.org>
-rw-r--r--board/terra/battery.c81
1 files 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)