diff options
-rw-r--r-- | common/battery_fuel_gauge.c | 17 | ||||
-rw-r--r-- | include/battery_fuel_gauge.h | 15 |
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 */ |