summaryrefslogtreecommitdiff
path: root/include/charger.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/charger.h')
-rw-r--r--include/charger.h158
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);