diff options
author | Ting Shen <phoenixshen@google.com> | 2019-07-30 17:02:15 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-07-31 13:01:47 +0000 |
commit | 9dbf748033d8ce9f5038c9f98409abac50b3759d (patch) | |
tree | fe75809d34da9879a1498728f5665887f5c3af5c | |
parent | ec315b1aebb015d39f6d6c3bac25e331c77c0429 (diff) | |
download | chrome-ec-9dbf748033d8ce9f5038c9f98409abac50b3759d.tar.gz |
baseboard/kukui: add smart battery
Add a smart battery for implementation Kodama and Jacuzzi.
BUG=b:137172860
TEST=boot on a jacuzzi, verify that `battery` command looks good
BRANCH=master
Change-Id: Ifdaf3c700ea9dccb7f60a266395644daec4eab2f
Signed-off-by: Ting Shen <phoenixshen@google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1725387
Tested-by: Ting Shen <phoenixshen@chromium.org>
Commit-Queue: Ting Shen <phoenixshen@chromium.org>
Reviewed-by: Alexandru M Stan <amstan@chromium.org>
-rw-r--r-- | baseboard/kukui/baseboard.h | 3 | ||||
-rw-r--r-- | baseboard/kukui/battery_smart.c | 112 | ||||
-rw-r--r-- | baseboard/kukui/build.mk | 1 |
3 files changed, 116 insertions, 0 deletions
diff --git a/baseboard/kukui/baseboard.h b/baseboard/kukui/baseboard.h index b1da5368bf..3499ced3df 100644 --- a/baseboard/kukui/baseboard.h +++ b/baseboard/kukui/baseboard.h @@ -12,6 +12,7 @@ * Variant battery defines, pick one: * VARIANT_KUKUI_BATTERY_MAX17055 * VARIANT_KUKUI_BATTERY_MM8013 + * VARIANT_KUKUI_BATTERY_SMART */ #if defined(VARIANT_KUKUI_BATTERY_MAX17055) #define CONFIG_BATTERY_MAX17055 @@ -19,6 +20,8 @@ #define BATTERY_MAX17055_RSENSE 5 /* m-ohm */ #elif defined(VARIANT_KUKUI_BATTERY_MM8013) #define CONFIG_BATTERY_MM8013 +#elif defined(VARIANT_KUKUI_BATTERY_SMART) +#define CONFIG_BATTERY_SMART #else #error Must define a VARIANT_KUKUI_BATTERY #endif /* VARIANT_KUKUI_BATTERY */ diff --git a/baseboard/kukui/battery_smart.c b/baseboard/kukui/battery_smart.c new file mode 100644 index 0000000000..93fa215326 --- /dev/null +++ b/baseboard/kukui/battery_smart.c @@ -0,0 +1,112 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Battery pack vendor provided charging profile + */ + +#include "battery.h" +#include "battery_fuel_gauge.h" +#include "battery_smart.h" +#include "gpio.h" +#include "system.h" + +static enum battery_present batt_pres_prev = BP_NOT_SURE; + +/* Shutdown mode parameter to write to manufacturer access register */ +#define SB_SHIP_MODE_REG SB_MANUFACTURER_ACCESS +#define SB_SHUTDOWN_DATA 0x0010 + +static const struct battery_info info = { + .voltage_max = 13200, + .voltage_normal = 11580, + .voltage_min = 9000, + .precharge_current = 256, + .start_charging_min_c = 0, + .start_charging_max_c = 45, + .charging_min_c = 0, + .charging_max_c = 60, + .discharging_min_c = -20, + .discharging_max_c = 60, +}; + +const struct battery_info *battery_get_info(void) +{ + return &info; +} + +enum battery_disconnect_state battery_get_disconnect_state(void) +{ + if (battery_is_present() == BP_YES) + return BATTERY_NOT_DISCONNECTED; + return BATTERY_DISCONNECTED; +} + +enum battery_present battery_hw_present(void) +{ + return gpio_get_level(GPIO_EC_BATT_PRES_ODL) ? BP_NO : BP_YES; +} + +static int battery_init(void) +{ + int batt_status; + + return battery_status(&batt_status) ? 0 : + !!(batt_status & STATUS_INITIALIZED); +} + +/* + * Physical detection of battery. + */ +static enum battery_present battery_check_present_status(void) +{ + enum battery_present batt_pres; + + /* Get the physical hardware status */ + batt_pres = battery_hw_present(); + + /* + * If the battery is not physically connected, then no need to perform + * any more checks. + */ + if (batt_pres != BP_YES) + return batt_pres; + + /* + * If the battery is present now and was present last time we checked, + * return early. + */ + if (batt_pres == batt_pres_prev) + return batt_pres; + + /* + * Ensure that battery is: + * 1. Not in cutoff + * 2. Initialized + */ + if (battery_is_cut_off() != BATTERY_CUTOFF_STATE_NORMAL || + battery_init() == 0) { + batt_pres = BP_NO; + } + + return batt_pres; +} + +enum battery_present battery_is_present(void) +{ + batt_pres_prev = battery_check_present_status(); + return batt_pres_prev; +} + +int board_cut_off_battery(void) +{ + int rv; + + /* Ship mode command must be sent twice to take effect */ + rv = sb_write(SB_SHIP_MODE_REG, SB_SHUTDOWN_DATA); + + if (rv != EC_SUCCESS) + return rv; + + return sb_write(SB_SHIP_MODE_REG, SB_SHUTDOWN_DATA); +} diff --git a/baseboard/kukui/build.mk b/baseboard/kukui/build.mk index af328fc2ab..465df10aa9 100644 --- a/baseboard/kukui/build.mk +++ b/baseboard/kukui/build.mk @@ -12,6 +12,7 @@ baseboard-$(CONFIG_BOOTBLOCK)+=emmc.o baseboard-$(VARIANT_KUKUI_BATTERY_MAX17055)+=battery_max17055.o baseboard-$(VARIANT_KUKUI_BATTERY_MM8013)+=battery_mm8013.o +baseboard-$(VARIANT_KUKUI_BATTERY_SMART)+=battery_smart.o baseboard-$(VARIANT_KUKUI_CHARGER_MT6370)+=charger_mt6370.o |