summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiana Z <dzigterman@chromium.org>2021-06-16 11:25:31 -0600
committerCommit Bot <commit-bot@chromium.org>2021-07-14 22:11:45 +0000
commitb95a06b0a1ebe2d85a713b30eec678d00adb7c66 (patch)
treecc1684322667150777c9d8e8d3a8f70430563e4d
parentaa284fcd49379fefe869b502050aaa40110ea1de (diff)
downloadchrome-ec-b95a06b0a1ebe2d85a713b30eec678d00adb7c66.tar.gz
Fuel Gauge: Add interface for optional sleep support
Some fuel gauges may support a "sleep" mode which will enable lower power consumption in some states. Set up a structure for this along with an API which boards may use to call it. BRANCH=None BUG=b:186774653 TEST=make -j buildall Signed-off-by: Diana Z <dzigterman@chromium.org> Change-Id: I155702bfb50a7353c7728445d60ecf853e39e4c2 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2967037 Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
-rw-r--r--common/battery_fuel_gauge.c17
-rw-r--r--include/battery_fuel_gauge.h15
2 files changed, 32 insertions, 0 deletions
diff --git a/common/battery_fuel_gauge.c b/common/battery_fuel_gauge.c
index 8135344f41..528713d68f 100644
--- a/common/battery_fuel_gauge.c
+++ b/common/battery_fuel_gauge.c
@@ -156,6 +156,23 @@ int board_cut_off_battery(void)
return rv ? EC_RES_ERROR : EC_RES_SUCCESS;
}
+enum ec_error_list battery_sleep_fuel_gauge(void)
+{
+ const struct sleep_mode_info *sleep_command;
+ int type = get_battery_type();
+
+ /* Sleep entry command must be supplied as it will vary by gauge */
+ if (type == BATTERY_TYPE_COUNT)
+ return EC_ERROR_UNKNOWN;
+
+ sleep_command = &board_battery_info[type].fuel_gauge.sleep_mode;
+
+ if (!sleep_command->sleep_supported)
+ return EC_ERROR_UNIMPLEMENTED;
+
+ return sb_write(sleep_command->reg_addr, sleep_command->reg_data);
+}
+
static enum ec_error_list battery_get_fet_status_regval(int *regval)
{
int rv;
diff --git a/include/battery_fuel_gauge.h b/include/battery_fuel_gauge.h
index 36da40b274..eb54b64c53 100644
--- a/include/battery_fuel_gauge.h
+++ b/include/battery_fuel_gauge.h
@@ -9,6 +9,7 @@
#define __CROS_EC_BATTERY_FUEL_GAUGE_H
#include "battery.h"
+#include <stdbool.h>
/* Number of writes needed to invoke battery cutoff command */
#define SHIP_MODE_WRITES 2
@@ -25,6 +26,12 @@ struct ship_mode_info {
const uint16_t reg_data[SHIP_MODE_WRITES];
};
+struct sleep_mode_info {
+ const bool sleep_supported;
+ const uint8_t reg_addr;
+ const uint16_t reg_data;
+};
+
struct fet_info {
const int mfgacc_support;
const uint8_t reg_addr;
@@ -39,6 +46,7 @@ struct fuel_gauge_info {
const char *device_name;
const uint8_t override_nil;
const struct ship_mode_info ship_mode;
+ const struct sleep_mode_info sleep_mode;
const struct fet_info fet;
#ifdef CONFIG_BATTERY_MEASURE_IMBALANCE
@@ -99,4 +107,11 @@ int cut_off_battery_block_write(const struct ship_mode_info *ship_mode);
*/
int cut_off_battery_sb_write(const struct ship_mode_info *ship_mode);
+/**
+ * Send the fuel gauge sleep command through SMBus.
+ *
+ * @return 0 if successful, non-zero if error occurred
+ */
+enum ec_error_list battery_sleep_fuel_gauge(void);
+
#endif /* __CROS_EC_BATTERY_FUEL_GAUGE_H */