diff options
author | David Huang <david.huang@quantatw.com> | 2018-11-06 21:20:23 +0800 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2018-11-28 05:40:02 +0000 |
commit | ac1838fa0d8384b70aa08bc8574e95261f8b7953 (patch) | |
tree | ed408c8feaaec631436cb76e441b171ae7e22ea7 | |
parent | 21b1ab572d73cb07c2d79f4490d04afc102c20f4 (diff) | |
download | chrome-ec-ac1838fa0d8384b70aa08bc8574e95261f8b7953.tar.gz |
Nami: Add battery AP18F4M for Bard and Ekko
Add AP18F4M battery config and discharge fet status for Bard and Ekko.
Battery type is encoded in SKU_ID[24:31]. Akali/Akali360 have been
shipped with SKU_ID[24:31] equal to zero.
BRANCH=nami
BUG=b:112564628, b:119522898
TEST=Make sure battery cut-off by console command "cutoff" and use
"chgstate" to check battery present is YES after resume from cut-off.
Change-Id: I55df5d212b834649f1c05425541b808fb4900e87
Signed-off-by: David Huang <David.Huang@quantatw.com>
Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/1319731
-rw-r--r-- | board/nami/battery.c | 56 | ||||
-rw-r--r-- | board/nami/board.h | 3 |
2 files changed, 51 insertions, 8 deletions
diff --git a/board/nami/battery.c b/board/nami/battery.c index 4b0cf5d631..785e90842b 100644 --- a/board/nami/battery.c +++ b/board/nami/battery.c @@ -75,6 +75,26 @@ static const struct battery_info info_3 = { .discharging_max_c = 60, }; +/* Panasonic AP18F4M (Bard/Ekko) */ +static const struct battery_info info_4 = { + .voltage_max = 8700, + .voltage_normal = 7600, + .voltage_min = 5500, + .precharge_current = 256, + .start_charging_min_c = 0, + .start_charging_max_c = 50, + .charging_min_c = 0, + .charging_max_c = 60, + .discharging_min_c = -20, + .discharging_max_c = 75, +}; + +enum battery_type { + BATTERY_TYPE_AP15 = 0, + BATTERY_TYPE_AP18, + BATTERY_TYPE_COUNT, +}; + enum gauge_type { GAUGE_TYPE_UNKNOWN = 0, GAUGE_TYPE_TI_BQ40Z50, @@ -126,18 +146,32 @@ static enum gauge_type get_gauge_ic(void) return GAUGE_TYPE_TI_BQ40Z50; } +static enum battery_type get_akali_battery_type(void) +{ + return CBI_SKU_CUSTOM_FIELD(sku); +} + void board_battery_init(void) { /* Only static config because gauge may not be initialized yet */ - if (oem == PROJECT_AKALI) { - info = &info_3; + switch (oem) { + case PROJECT_AKALI: + if (get_akali_battery_type() == BATTERY_TYPE_AP15) + info = &info_3; + else if (get_akali_battery_type() == BATTERY_TYPE_AP18) + info = &info_4; sb_ship_mode_reg = 0x3A; sb_shutdown_data = 0xC574; - return; - } else if (oem == PROJECT_SONA) + break; + case PROJECT_SONA: info = &info_1; - else if (oem == PROJECT_PANTHEON) + break; + case PROJECT_PANTHEON: info = &info_2; + break; + default: + break; + } } DECLARE_HOOK(HOOK_INIT, board_battery_init, HOOK_PRIO_DEFAULT); @@ -300,9 +334,15 @@ static int battery_check_disconnect_1(void) if (sb_read(SB_MANUFACTURER_ACCESS, &batt_discharge_fet)) return BATTERY_DISCONNECT_ERROR; - /* Bit 15: Discharge FET status (1: On, 0: Off) */ - if (batt_discharge_fet & 0x4000) - return BATTERY_NOT_DISCONNECTED; + if (get_akali_battery_type() == BATTERY_TYPE_AP15) { + /* Bit 15: Discharge FET status (1: On, 0: Off) */ + if (batt_discharge_fet & 0x4000) + return BATTERY_NOT_DISCONNECTED; + } else if (get_akali_battery_type() == BATTERY_TYPE_AP18) { + /* Bit 13: Discharge FET status (1: Off, 0: On) */ + if (!(batt_discharge_fet & 0x2000)) + return BATTERY_NOT_DISCONNECTED; + } return BATTERY_DISCONNECT_ERROR; } diff --git a/board/nami/board.h b/board/nami/board.h index fc816ea224..50fdc3d512 100644 --- a/board/nami/board.h +++ b/board/nami/board.h @@ -321,6 +321,9 @@ extern uint16_t board_version; extern uint8_t oem; extern uint32_t sku; +/* SKU_ID[24:31] are dedicated to OEM customization */ +#define CBI_SKU_CUSTOM_FIELD(val) ((val) >> 24) + #endif /* !__ASSEMBLER__ */ #endif /* __CROS_EC_BOARD_H */ |