diff options
Diffstat (limited to 'include/charger.h')
-rw-r--r-- | include/charger.h | 158 |
1 files changed, 123 insertions, 35 deletions
diff --git a/include/charger.h b/include/charger.h index 342f6a7b48..6aebf3b94c 100644 --- a/include/charger.h +++ b/include/charger.h @@ -40,6 +40,86 @@ struct charger_params { int flags; }; +struct charger_drv { + /* Function to call during HOOK_INIT after i2c init */ + void (*init)(int chgnum); + + /* Power state machine post init */ + enum ec_error_list (*post_init)(int chgnum); + + /* Get charger information */ + const struct charger_info * (*get_info)(int chgnum); + + /* Get smart battery charger status. Supported flags may vary. */ + enum ec_error_list (*get_status)(int chgnum, int *status); + + /* Set smart battery charger mode. Supported modes may vary. */ + enum ec_error_list (*set_mode)(int chgnum, int mode); + + /* + * For chargers that are able to supply output power for OTG dongle, + * this function enables or disables power output. + */ + enum ec_error_list (*enable_otg_power)(int chgnum, int enabled); + + /* + * Sets OTG current limit and voltage (independent of whether OTG + * power is currently enabled). + */ + enum ec_error_list (*set_otg_current_voltage)(int chgnum, + int output_current, + int output_voltage); + + /* Get/set charge current limit in mA */ + enum ec_error_list (*get_current)(int chgnum, int *current); + enum ec_error_list (*set_current)(int chgnum, int current); + + /* Get/set charge voltage limit in mV */ + enum ec_error_list (*get_voltage)(int chgnum, int *voltage); + enum ec_error_list (*set_voltage)(int chgnum, int voltage); + + /* Discharge battery when on AC power. */ + enum ec_error_list (*discharge_on_ac)(int chgnum, int enable); + + /* Get the VBUS voltage (mV) from the charger */ + int (*get_vbus_voltage)(int chgnum, int port); + + /* Set desired input current value */ + enum ec_error_list (*set_input_current)(int chgnum, int input_current); + + /* Get actual input current value */ + enum ec_error_list (*get_input_current)(int chgnum, int *input_current); + + enum ec_error_list (*manufacturer_id)(int chgnum, int *id); + enum ec_error_list (*device_id)(int chgnum, int *id); + enum ec_error_list (*get_option)(int chgnum, int *option); + enum ec_error_list (*set_option)(int chgnum, int option); + + /* Charge ramp functions */ + enum ec_error_list (*set_hw_ramp)(int chgnum, int enable); + int (*ramp_is_stable)(int chgnum); + int (*ramp_is_detected)(int chgnum); + int (*ramp_get_current_limit)(int chgnum); +}; + +struct charger_config_t { + int i2c_port; + uint16_t i2c_addr_flags; + const struct charger_drv *drv; +}; + +/* TODO(b/147672225): structure should be defined in board.c files */ +#ifndef CONFIG_CHARGER_RUNTIME_CONFIG +extern const struct charger_config_t chg_chips[]; +#else +extern struct charger_config_t chg_chips[]; +#endif +extern const unsigned int chg_cnt; + +#ifdef CONFIG_CHARGER_SINGLE_CHIP +#define CHARGER_SOLO 0 +#endif + /* Get the current charger_params. Failures are reported in .flags */ void charger_get_params(struct charger_params *chg); @@ -52,23 +132,48 @@ void charger_get_params(struct charger_params *chg); /* All of the above CHG_FLAG_BAD_* bits */ #define CHG_FLAG_BAD_ANY 0x0000001f +/** + * Return the closest match the charger can supply to the requested current. + * + * @param current Requested current in mA. + * + * @return Current the charger will actually supply if <current> is requested. + */ +int charger_closest_current(int current); + +/** + * Return the closest match the charger can supply to the requested voltage. + * + * @param voltage Requested voltage in mV. + * + * @return Voltage the charger will actually supply if <voltage> is requested. + */ +int charger_closest_voltage(int voltage); + +/* Driver wrapper functions */ + +/* + * TODO(b/147672225): charger_* functions should take chip arg, hardcode + * calls into driver to 0 for now. + */ + /* Power state machine post init */ -int charger_post_init(void); +enum ec_error_list charger_post_init(void); /* Get charger information. */ const struct charger_info *charger_get_info(void); /* Get smart battery charger status. Supported flags may vary. */ -int charger_get_status(int *status); +enum ec_error_list charger_get_status(int *status); /* Set smart battery charger mode. Supported modes may vary. */ -int charger_set_mode(int mode); +enum ec_error_list charger_set_mode(int mode); /** * For chargers that are able to supply output power for OTG dongle, this * function enables or disables power output. */ -int charger_enable_otg_power(int enabled); +enum ec_error_list charger_enable_otg_power(int enabled); /** * Sets OTG current limit and voltage (independent of whether OTG power is @@ -86,7 +191,8 @@ int charger_enable_otg_power(int enabled); * * @return EC_SUCCESS on success, an error otherwise. */ -int charger_set_otg_current_voltage(int output_current, int output_voltage); +enum ec_error_list charger_set_otg_current_voltage(int output_current, + int output_voltage); /** * Is the charger sourcing VBUS / OTG power? @@ -96,34 +202,16 @@ int charger_set_otg_current_voltage(int output_current, int output_voltage); */ int charger_is_sourcing_otg_power(int port); -/** - * Return the closest match the charger can supply to the requested current. - * - * @param current Requested current in mA. - * - * @return Current the charger will actually supply if <current> is requested. - */ -int charger_closest_current(int current); - -/** - * Return the closest match the charger can supply to the requested voltage. - * - * @param voltage Requested voltage in mV. - * - * @return Voltage the charger will actually supply if <voltage> is requested. - */ -int charger_closest_voltage(int voltage); - /* Get/set charge current limit in mA */ -int charger_get_current(int *current); -int charger_set_current(int current); +enum ec_error_list charger_get_current(int *current); +enum ec_error_list charger_set_current(int current); /* Get/set charge voltage limit in mV */ -int charger_get_voltage(int *voltage); -int charger_set_voltage(int voltage); +enum ec_error_list charger_get_voltage(int *voltage); +enum ec_error_list charger_set_voltage(int voltage); /* Discharge battery when on AC power. */ -int charger_discharge_on_ac(int enable); +enum ec_error_list charger_discharge_on_ac(int enable); /* Get the VBUS voltage (mV) from the charger */ int charger_get_vbus_voltage(int port); @@ -140,20 +228,20 @@ int charger_get_system_power(void); /* Other parameters that may be charger-specific, but are common so far. */ /* Set desired input current value */ -int charger_set_input_current(int input_current); +enum ec_error_list charger_set_input_current(int input_current); /* * Get actual input current value. * Actual input current may be less than the desired input current set * due to current ratings of the wall adapter. */ -int charger_get_input_current(int *input_current); +enum ec_error_list charger_get_input_current(int *input_current); -int charger_manufacturer_id(int *id); -int charger_device_id(int *id); -int charger_get_option(int *option); -int charger_set_option(int option); -int charger_set_hw_ramp(int enable); +enum ec_error_list charger_manufacturer_id(int *id); +enum ec_error_list charger_device_id(int *id); +enum ec_error_list charger_get_option(int *option); +enum ec_error_list charger_set_option(int option); +enum ec_error_list charger_set_hw_ramp(int enable); /* Print all charger info for debugging purposes */ void print_charger_debug(void); |