diff options
author | Caveh Jalali <caveh@chromium.org> | 2021-02-08 23:59:38 -0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-02-12 23:22:13 +0000 |
commit | 30e829b73bd4299059bb8b17e6c10bad17040e7f (patch) | |
tree | 665bc9b20e59c4e3ffb27ad01b8d1c1046d09536 /baseboard | |
parent | 4930622994556168b9b2912cc1e2a6dc7906fbd8 (diff) | |
download | chrome-ec-30e829b73bd4299059bb8b17e6c10bad17040e7f.tar.gz |
brya: Enable battery support
This enables support for batteries on brya. Batteries are expected to be
of the "smart" variety with a fuel gauge.
The battery presence detect handling is taken from volteer as the
designs are similar.
BRANCH=none
BUG=b:173575131
TEST=buildall passes
Change-Id: Id008ae32564f2aa69d3406dd0d8b31d0d3cf21c0
Signed-off-by: Caveh Jalali <caveh@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2686977
Reviewed-by: Boris Mittelberg <bmbm@google.com>
Reviewed-by: Keith Short <keithshort@chromium.org>
Diffstat (limited to 'baseboard')
-rw-r--r-- | baseboard/brya/baseboard.h | 18 | ||||
-rw-r--r-- | baseboard/brya/battery_presence.c | 89 | ||||
-rw-r--r-- | baseboard/brya/build.mk | 3 |
3 files changed, 110 insertions, 0 deletions
diff --git a/baseboard/brya/baseboard.h b/baseboard/brya/baseboard.h index a28d843f51..ad0f4fc1e7 100644 --- a/baseboard/brya/baseboard.h +++ b/baseboard/brya/baseboard.h @@ -24,6 +24,14 @@ #define CONFIG_EXTPOWER_GPIO +/* Common battery defines */ +#define CONFIG_BATTERY_SMART +#define CONFIG_BATTERY_FUEL_GAUGE +#define CONFIG_BATTERY_CUT_OFF +#define CONFIG_BATTERY_PRESENT_CUSTOM +#define CONFIG_BATTERY_HW_PRESENT_CUSTOM +#define CONFIG_BATTERY_REVIVE_DISCONNECT + #define CONFIG_PWM /* Enable I2C Support */ @@ -32,9 +40,19 @@ #ifndef __ASSEMBLER__ +#include <stdbool.h> + +#include "common.h" #include "baseboard_usbc_config.h" #include "extpower.h" +/* + * Check battery disconnect state. + * This function will return if battery is initialized or not. + * @return true - initialized. false - not. + */ +__override_proto bool board_battery_is_initialized(void); + #endif /* !__ASSEMBLER__ */ #endif /* __CROS_EC_BASEBOARD_H */ diff --git a/baseboard/brya/battery_presence.c b/baseboard/brya/battery_presence.c new file mode 100644 index 0000000000..1bd8f7cabd --- /dev/null +++ b/baseboard/brya/battery_presence.c @@ -0,0 +1,89 @@ +/* Copyright 2021 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. + * + * Common battery presence checking for Brya family. + * Each board should implement board_battery_info[] to define the specific + * battery packs supported. + */ +#include <stdbool.h> + +#include "battery.h" +#include "battery_smart.h" +#include "gpio.h" + +static enum battery_present batt_pres_prev = BP_NOT_SURE; + +enum battery_present battery_hw_present(void) +{ + /* The GPIO is low when the battery is physically present */ + return gpio_get_level(GPIO_EC_BATT_PRES_ODL) ? BP_NO : BP_YES; +} + +static bool battery_init(void) +{ + int batt_status; + + return battery_status(&batt_status) ? 0 : + !!(batt_status & STATUS_INITIALIZED); +} + +__overridable bool board_battery_is_initialized(void) +{ + /* + * Set default to return true + */ + return true; +} + +/* + * Physical detection of battery. + */ +static enum battery_present battery_check_present_status(void) +{ + enum battery_present batt_pres; + bool batt_initialization_state; + + /* 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; + + /* + * Check battery initialization. If the battery is not initialized, + * then return BP_NOT_SURE. Battery could be in ship + * mode and might require pre-charge current to wake it up. BP_NO is not + * returned here because charger state machine will not provide + * pre-charge current assuming that battery is not present. + */ + batt_initialization_state = board_battery_is_initialized(); + if (!batt_initialization_state) + return BP_NOT_SURE; + /* + * Ensure that battery is: + * 1. Not in cutoff + * 2. Initialized + */ + if (battery_is_cut_off() || !battery_init()) + 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; +} diff --git a/baseboard/brya/build.mk b/baseboard/brya/build.mk index 11fecc502d..bb5f023c02 100644 --- a/baseboard/brya/build.mk +++ b/baseboard/brya/build.mk @@ -5,3 +5,6 @@ # # Brya baseboard specific files build # + +baseboard-y= +baseboard-y+=battery_presence.o |