diff options
author | Simon Glass <sjg@chromium.org> | 2023-05-08 15:33:31 -0600 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2023-05-11 14:04:30 +0000 |
commit | b729eab7c75553c830b54be5da7a348127f0b49c (patch) | |
tree | db654291e97be430144d4bcad27e4f04db9f87f7 /include/charge_state.h | |
parent | c1b39d008cf6aa8ed53780c5b4ff1bd55951d1b4 (diff) | |
download | chrome-ec-b729eab7c75553c830b54be5da7a348127f0b49c.tar.gz |
charger: Move charger_state_v2.h into charge_state.h
We don't have a v1 anymore, so the name makes no sense. Move it into
the existing file.
Include charge_state.h instead of v2, doing this in the same change to
avoid build errors.
This makes no functional change.
BUG=b:218332694
TEST=make buildall
Change-Id: Ic3e3adc45e4d002c2cd5ba8aa65e24686e01d628
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4516191
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Simon Glass <sjg@chromium.org>
Tested-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Yuval Peress <peress@google.com>
Diffstat (limited to 'include/charge_state.h')
-rw-r--r-- | include/charge_state.h | 228 |
1 files changed, 226 insertions, 2 deletions
diff --git a/include/charge_state.h b/include/charge_state.h index 57f9521b0e..34576dc333 100644 --- a/include/charge_state.h +++ b/include/charge_state.h @@ -5,7 +5,13 @@ #ifndef __CROS_EC_CHARGE_STATE_H #define __CROS_EC_CHARGE_STATE_H +#include "battery.h" +#include "battery_smart.h" +#include "charger.h" +#include "chipset.h" #include "common.h" +#include "ec_ec_comm_client.h" +#include "ocpc.h" #include "stdbool.h" #include "timer.h" @@ -61,7 +67,7 @@ enum led_pwr_state { /* Battery is responsive */ #define CHARGE_FLAG_BATT_RESPONSIVE BIT(2) -/* Debugging constants, in the same order as enum led_pwr_state. This string +/* Debugging constants, in the same order as enum pwr_state. This string * table was moved here to sync with enum above. */ #define CHARGE_STATE_NAME_TABLE \ @@ -72,6 +78,46 @@ enum led_pwr_state { } /* End of CHARGE_STATE_NAME_TABLE macro */ +/* + * The values exported by charge_get_state() and charge_get_flags() are used + * only to control the LEDs (with one not-quite-correct exception). For V2 + * we use a different set of states internally. + */ +enum charge_state_v2 { + ST_IDLE = 0, + ST_DISCHARGE, + ST_CHARGE, + ST_PRECHARGE, + + NUM_STATES_V2 +}; + +struct charge_state_data { + timestamp_t ts; + int ac; + int batt_is_charging; + struct charger_params chg; + struct batt_params batt; + enum charge_state_v2 state; + int requested_voltage; + int requested_current; + int desired_input_current; +#ifdef CONFIG_CHARGER_OTG + int output_current; +#endif +#ifdef CONFIG_EC_EC_COMM_BATTERY_CLIENT + int input_voltage; +#endif +#ifdef CONFIG_OCPC + struct ocpc_data ocpc; +#endif +}; + +struct sustain_soc { + int8_t lower; + int8_t upper; +}; + /** * Return current charge state. */ @@ -191,7 +237,185 @@ int charge_get_battery_temp(int idx, int *temp_ptr); */ const struct batt_params *charger_current_battery_params(void); +/** + * Set the output current limit and voltage. This is used to provide power from + * the charger chip ("OTG" mode). + * + * @param chgnum Charger index to act upon + * @param ma Maximum current to provide in mA (0 to disable output). + * @param mv Voltage in mV (ignored if ma == 0). + * @return EC_SUCCESS or error + */ +int charge_set_output_current_limit(int chgnum, int ma, int mv); + +/** + * Set the charge input current limit. This value is stored and sent every + * time AC is applied. + * + * The input current limit is automatically derated by + * CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT (if configured), and is clamped to + * no less than CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT mA (if configured). + * + * @param ma New input current limit in mA + * @param mv Negotiated charge voltage in mV. + * @return EC_SUCCESS or error + */ +int charge_set_input_current_limit(int ma, int mv); + +/** + * Set the desired manual charge current when in idle mode. + * + * @param curr_ma: Charge current in mA. + */ +void chgstate_set_manual_current(int curr_ma); + +/** + * Set the desired manual charge voltage when in idle mode. + * + * @param volt_mv: Charge voltage in mV. + */ +void chgstate_set_manual_voltage(int volt_mv); + +/** + * Board-specific routine to indicate if the base is connected. + */ +int board_is_base_connected(void); + +/** + * Board-specific routine to enable power distribution between lid and base + * (current can flow both ways). + */ +void board_enable_base_power(int enable); + +/** + * Board-specific routine to reset the base (in case it is unresponsive, e.g. + * if we told it to hibernate). + */ +void board_base_reset(void); + +/** + * Callback with which boards determine action on critical low battery + * + * The default implementation is provided in charge_state_v2.c. Overwrite it + * to customize it. + * + * @param curr Pointer to struct charge_state_data + * @return Action to take. + */ +enum critical_shutdown +board_critical_shutdown_check(struct charge_state_data *curr); + +/** + * Callback to set battery level for shutdown + * + * A board can implement this to customize shutdown battery level at runtime. + * + * @return battery level for shutdown + */ +uint8_t board_set_battery_level_shutdown(void); + +/** + * Return system PLT power and battery's desired power. + * + * @return desired power in mW + */ +int charge_get_plt_plus_bat_desired_mw(void); + +/** + * Get the stable battery charging current. The current will be + * CHARGE_CURRENT_UNINITIALIZED if not yet stable. + * + * @return stable battery charging current in mA + */ +int charge_get_stable_current(void); + +/** + * Select which charger IC will actually be performing the charger switching. + * + * @param idx The index into the chg_chips table. + */ +void charge_set_active_chg_chip(int idx); + +/** + * Retrieve which charger IC is the active charger IC performing the charger + * switching. + */ +int charge_get_active_chg_chip(void); + +/** + * Set the stable current. + * + * @param ma: battery charging current in mA + */ +void charge_set_stable_current(int ma); + +/** + * Reset stable current counter stable_ts. Calling this function would set + * stable_current to CHARGE_CURRENT_UNINITIALIZED. + */ +void charge_reset_stable_current(void); + +/** + * Reset stable current counter stable_ts. Calling this function would set + * stable_current to CHARGE_CURRENT_UNINITIALIZED. + * + * @param us: sample stable current until us later. + */ +void charge_reset_stable_current_us(uint64_t us); + +/** + * Check if the battery charging current is stable by examining the timestamp. + * + * @return true if stable timestamp expired, false otherwise. + */ +bool charge_is_current_stable(void); + +/** + * Reset the OCPC internal state data and set the target VSYS to the current + * battery voltage for the auxiliary chargers. + */ +void trigger_ocpc_reset(void); + +/* Track problems in communicating with the battery or charger */ +enum problem_type { + PR_STATIC_UPDATE, + PR_SET_VOLTAGE, + PR_SET_CURRENT, + PR_SET_MODE, + PR_SET_INPUT_CURR, + PR_POST_INIT, + PR_CHG_FLAGS, + PR_BATT_FLAGS, + PR_CUSTOM, + PR_CFG_SEC_CHG, + + NUM_PROBLEM_TYPES +}; + +void charge_problem(enum problem_type p, int v); + +struct charge_state_data *charge_get_status(void); + +enum ec_charge_control_mode get_chg_ctrl_mode(void); + +__test_only void reset_prev_disp_charge(void); + +/** + * Whether or not the charging progress was shown. Note, calling this function + * will reset the value to false. + * + * @return Whether or not the charging progress was printed to the console + */ +__test_only bool charging_progress_displayed(void); + +/** + * Callback for boards to request charger to enable bypass mode on/off. + * + * @return True for requesting bypass on. False for requesting bypass off. + */ +int board_should_charger_bypass(void); + /* Config Charger */ -#include "charge_state_v2.h" +#include "charge_state.h" #endif /* __CROS_EC_CHARGE_STATE_H */ |