diff options
author | Simon Glass <sjg@chromium.org> | 2020-12-21 15:39:52 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-01-15 03:56:05 +0000 |
commit | 17b94bd691f43a5fd305cde34657e9cc0e2b0cab (patch) | |
tree | fa993223e149ad3e98095f9ca8403f3ba4ab0af9 | |
parent | 207dd397bf09afe2b188ca771024b6a0dc93849c (diff) | |
download | chrome-ec-17b94bd691f43a5fd305cde34657e9cc0e2b0cab.tar.gz |
Add information for battery presence
Copy this over from the EC code base so that volteer can detect its
battery,
BUG=b:175248556
TEST=build and boot on volteer (no actual test)
Cq-Depend: chromium:2600337
Change-Id: I6ba05ab09e23a2a5aaa8c4d5f13665ce58836dac
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/zephyr-chrome/+/2599491
Reviewed-by: Keith Short <keithshort@chromium.org>
Tested-by: Simon Glass <sjg@chromium.org>
Commit-Queue: Simon Glass <sjg@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2630163
Tested-by: Jack Rosenthal <jrosenth@chromium.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
Commit-Queue: Jack Rosenthal <jrosenth@chromium.org>
-rw-r--r-- | zephyr/projects/volteer/CMakeLists.txt | 1 | ||||
-rw-r--r-- | zephyr/projects/volteer/include/gpio_map.h | 1 | ||||
-rw-r--r-- | zephyr/projects/volteer/src/battery_presence.c | 89 |
3 files changed, 91 insertions, 0 deletions
diff --git a/zephyr/projects/volteer/CMakeLists.txt b/zephyr/projects/volteer/CMakeLists.txt index e73a98bb37..fd5ed88bfe 100644 --- a/zephyr/projects/volteer/CMakeLists.txt +++ b/zephyr/projects/volteer/CMakeLists.txt @@ -21,4 +21,5 @@ project(volteer) # Include board specific header files zephyr_include_directories(include) +target_sources(app PRIVATE "src/battery_presence.c") target_sources(app PRIVATE "src/pwrok_signals.c") diff --git a/zephyr/projects/volteer/include/gpio_map.h b/zephyr/projects/volteer/include/gpio_map.h index f23d1db1bb..f3bed679b1 100644 --- a/zephyr/projects/volteer/include/gpio_map.h +++ b/zephyr/projects/volteer/include/gpio_map.h @@ -23,6 +23,7 @@ */ #define GPIO_AC_PRESENT NAMED_GPIO(acok_od) #define GPIO_CPU_PROCHOT NAMED_GPIO(ec_prochot_odl) +#define GPIO_EC_BATT_PRES_ODL NAMED_GPIO(ec_batt_pres_odl) #define GPIO_EC_PCH_SYS_PWROK NAMED_GPIO(ec_pch_sys_pwrok) #define GPIO_EN_PP3300_A NAMED_GPIO(en_pp3300_a) #define GPIO_EN_PP5000 NAMED_GPIO(en_pp5000_a) diff --git a/zephyr/projects/volteer/src/battery_presence.c b/zephyr/projects/volteer/src/battery_presence.c new file mode 100644 index 0000000000..4953d7a49e --- /dev/null +++ b/zephyr/projects/volteer/src/battery_presence.c @@ -0,0 +1,89 @@ +/* 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. + * + * Common battery presence checking for Volteer 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; +} |