Chargers
The charger subsystem exposes an API to uniformly access battery charger devices.
A charger device, or charger peripheral, is a device used to take external power provided to the system as an input and provide power as an output downstream to the battery pack(s) and system. The charger device can exist as a module, an integrated circuit, or as a functional block in a power management integrated circuit (PMIC).
The action of charging a battery pack is referred to as a charge cycle. When the charge cycle is executed the battery pack is charged according to the charge profile configured on the charger device. The charge profile is defined in the battery pack’s specification that is provided by the manufacturer. On charger devices with a control port, the charge profile can be configured by the host controller by setting the relevant properties, and can be adjusted at runtime to respond to environmental changes.
Basic Operation
Initiating a Charge Cycle
A charge cycle is initiated or terminated using charger_charge_enable().
Properties
Fundamentally, a property is a configurable setting, state, or quantity that a charger device can measure.
Chargers typically support multiple properties, such as temperature readings of the battery-pack or present-time current/voltage.
Properties are fetched by the client one at a time using charger_get_prop().
Properties are set by the client one at a time using charger_set_prop().
API Reference
- group charger_interface
- Charger Interface. - Typedefs - 
typedef uint16_t charger_prop_t
- A charger property’s identifier. - See charger_property for a list of identifiers 
 - 
typedef void (*charger_status_notifier_t)(enum charger_status status)
- The charger status change callback to notify the system. - Param status:
- Current charging state 
 
 - 
typedef void (*charger_online_notifier_t)(enum charger_online online)
- The charger online change callback to notify the system. - Param online:
- Current external supply state 
 
 - 
typedef int (*charger_get_property_t)(const struct device *dev, const charger_prop_t prop, union charger_propval *val)
- Callback API for getting a charger property. - See charger_get_property() for argument description 
 - 
typedef int (*charger_set_property_t)(const struct device *dev, const charger_prop_t prop, const union charger_propval *val)
- Callback API for setting a charger property. - See charger_set_property() for argument description 
 - 
typedef int (*charger_charge_enable_t)(const struct device *dev, const bool enable)
- Callback API enabling or disabling a charge cycle. - See charger_charge_enable() for argument description 
 - Enums - 
enum charger_property
- Runtime Dynamic Battery Parameters. - Values: - 
enumerator CHARGER_PROP_ONLINE = 0
- Indicates if external supply is present for the charger. - Value should be of type enum charger_online 
 - 
enumerator CHARGER_PROP_PRESENT
- Reports whether or not a battery is present. - Value should be of type bool 
 - 
enumerator CHARGER_PROP_STATUS
- Represents the charging status of the charger. - Value should be of type enum charger_status 
 - 
enumerator CHARGER_PROP_CHARGE_TYPE
- Represents the charging algo type of the charger. - Value should be of type enum charger_charge_type 
 - 
enumerator CHARGER_PROP_HEALTH
- Represents the health of the charger. - Value should be of type enum charger_health 
 - 
enumerator CHARGER_PROP_CONSTANT_CHARGE_CURRENT_UA
- Configuration of current sink used for charging in µA. 
 - 
enumerator CHARGER_PROP_PRECHARGE_CURRENT_UA
- Configuration of current sink used for conditioning in µA. 
 - 
enumerator CHARGER_PROP_CHARGE_TERM_CURRENT_UA
- Configuration of charge termination target in µA. 
 - 
enumerator CHARGER_PROP_CONSTANT_CHARGE_VOLTAGE_UV
- Configuration of charge voltage regulation target in µV. 
 - 
enumerator CHARGER_PROP_INPUT_REGULATION_CURRENT_UA
- Configuration of the input current regulation target in µA. - This value is a rising current threshold that is regulated by reducing the charge current output 
 - 
enumerator CHARGER_PROP_INPUT_REGULATION_VOLTAGE_UV
- Configuration of the input voltage regulation target in µV. - This value is a falling voltage threshold that is regulated by reducing the charge current output 
 - 
enumerator CHARGER_PROP_INPUT_CURRENT_NOTIFICATION
- Configuration to issue a notification to the system based on the input current level and timing. - Value should be of type struct charger_current_notifier 
 - 
enumerator CHARGER_PROP_DISCHARGE_CURRENT_NOTIFICATION
- Configuration to issue a notification to the system based on the battery discharge current level and timing. - Value should be of type struct charger_current_notifier 
 - 
enumerator CHARGER_PROP_SYSTEM_VOLTAGE_NOTIFICATION_UV
- Configuration of the falling system voltage threshold where a notification is issued to the system, measured in µV. 
 - 
enumerator CHARGER_PROP_STATUS_NOTIFICATION
- Configuration to issue a notification to the system based on the charger status change. - Value should be of type charger_status_notifier_t 
 - 
enumerator CHARGER_PROP_ONLINE_NOTIFICATION
- Configuration to issue a notification to the system based on the charger online change. - Value should be of type charger_online_notifier_t 
 - 
enumerator CHARGER_PROP_COMMON_COUNT
- Reserved to demark end of common charger properties. 
 - 
enumerator CHARGER_PROP_CUSTOM_BEGIN = CHARGER_PROP_COMMON_COUNT + 1
- Reserved to demark downstream custom properties - use this value as the actual value may change over future versions of this API. 
 - 
enumerator CHARGER_PROP_MAX = UINT16_MAX
- Reserved to demark end of valid enum properties. 
 
- 
enumerator CHARGER_PROP_ONLINE = 0
 - 
enum charger_online
- External supply states. - Values: - 
enumerator CHARGER_ONLINE_OFFLINE = 0
- External supply not present. 
 - 
enumerator CHARGER_ONLINE_FIXED
- External supply is present and of fixed output. 
 - 
enumerator CHARGER_ONLINE_PROGRAMMABLE
- External supply is present and of programmable output. 
 
- 
enumerator CHARGER_ONLINE_OFFLINE = 0
 - 
enum charger_status
- Charging states. - Values: - 
enumerator CHARGER_STATUS_UNKNOWN = 0
- Charging device state is unknown. 
 - 
enumerator CHARGER_STATUS_CHARGING
- Charging device is charging a battery. 
 - 
enumerator CHARGER_STATUS_DISCHARGING
- Charging device is not able to charge a battery. 
 - 
enumerator CHARGER_STATUS_NOT_CHARGING
- Charging device is not charging a battery. 
 - 
enumerator CHARGER_STATUS_FULL
- The battery is full and the charging device will not attempt charging. 
 
- 
enumerator CHARGER_STATUS_UNKNOWN = 0
 - 
enum charger_charge_type
- Charge algorithm types. - Values: - 
enumerator CHARGER_CHARGE_TYPE_UNKNOWN = 0
- Charge type is unknown. 
 - 
enumerator CHARGER_CHARGE_TYPE_NONE
- Charging is not occurring. 
 - 
enumerator CHARGER_CHARGE_TYPE_TRICKLE
- Charging is occurring at the slowest desired charge rate, typically for battery detection or preconditioning. 
 - 
enumerator CHARGER_CHARGE_TYPE_FAST
- Charging is occurring at the fastest desired charge rate. 
 - 
enumerator CHARGER_CHARGE_TYPE_STANDARD
- Charging is occurring at a moderate charge rate. 
 - 
enumerator CHARGER_CHARGE_TYPE_ADAPTIVE
 - 
enumerator CHARGER_CHARGE_TYPE_LONGLIFE
 - 
enumerator CHARGER_CHARGE_TYPE_BYPASS
 
- 
enumerator CHARGER_CHARGE_TYPE_UNKNOWN = 0
 - 
enum charger_health
- Charger health conditions. - These conditions determine the ability to, or the rate of, charge - Values: - 
enumerator CHARGER_HEALTH_UNKNOWN = 0
- Charger health condition is unknown. 
 - 
enumerator CHARGER_HEALTH_GOOD
- Charger health condition is good. 
 - 
enumerator CHARGER_HEALTH_OVERHEAT
- The charger device is overheated. 
 - 
enumerator CHARGER_HEALTH_OVERVOLTAGE
- The battery voltage has exceeded its overvoltage threshold. 
 - 
enumerator CHARGER_HEALTH_UNSPEC_FAILURE
- The battery or charger device is experiencing an unspecified failure. 
 - 
enumerator CHARGER_HEALTH_COLD
- The battery temperature is below the “cold” threshold. 
 - 
enumerator CHARGER_HEALTH_WATCHDOG_TIMER_EXPIRE
- The charger device’s watchdog timer has expired. 
 - 
enumerator CHARGER_HEALTH_SAFETY_TIMER_EXPIRE
- The charger device’s safety timer has expired. 
 - 
enumerator CHARGER_HEALTH_CALIBRATION_REQUIRED
- The charger device requires calibration. 
 - 
enumerator CHARGER_HEALTH_WARM
- The battery temperature is in the “warm” range. 
 - 
enumerator CHARGER_HEALTH_COOL
- The battery temperature is in the “cool” range. 
 - 
enumerator CHARGER_HEALTH_HOT
- The battery temperature is below the “hot” threshold. 
 - 
enumerator CHARGER_HEALTH_NO_BATTERY
- The charger device does not detect a battery. 
 
- 
enumerator CHARGER_HEALTH_UNKNOWN = 0
 - 
enum charger_notification_severity
- Charger severity levels for system notifications. - Values: - 
enumerator CHARGER_SEVERITY_PEAK = 0
- Most severe level, typically triggered instantaneously. 
 - 
enumerator CHARGER_SEVERITY_CRITICAL
- More severe than the warning level, less severe than peak. 
 - 
enumerator CHARGER_SEVERITY_WARNING
- Base severity level. 
 
- 
enumerator CHARGER_SEVERITY_PEAK = 0
 - Functions - 
int charger_get_prop(const struct device *dev, const charger_prop_t prop, union charger_propval *val)
- Fetch a battery charger property. - Parameters:
- dev – Pointer to the battery charger device 
- prop – Charger property to get 
- val – Pointer to charger_propval union 
 
- Return values:
- 0 – if successful 
- < – 0 if getting property failed 
 
 
 - 
int charger_set_prop(const struct device *dev, const charger_prop_t prop, const union charger_propval *val)
- Set a battery charger property. - Parameters:
- dev – Pointer to the battery charger device 
- prop – Charger property to set 
- val – Pointer to charger_propval union 
 
- Return values:
- 0 – if successful 
- < – 0 if setting property failed 
 
 
 - 
int charger_charge_enable(const struct device *dev, const bool enable)
- Enable or disable a charge cycle. - Parameters:
- dev – Pointer to the battery charger device 
- enable – true enables a charge cycle, false disables a charge cycle 
 
- Return values:
- 0 – if successful 
- -EIO – if communication with the charger failed 
- -EINVAL – if the conditions for initiating charging are invalid 
 
 
 - 
struct charger_current_notifier
- #include <charger.h>The input current thresholds for the charger to notify the system. 
 - 
union charger_propval
- #include <charger.h>container for a charger_property value Public Members - 
enum charger_online online
- CHARGER_PROP_ONLINE. 
 - 
bool present
- CHARGER_PROP_PRESENT. 
 - 
enum charger_status status
- CHARGER_PROP_STATUS. 
 - 
enum charger_charge_type charge_type
- CHARGER_PROP_CHARGE_TYPE. 
 - 
enum charger_health health
- CHARGER_PROP_HEALTH. 
 - 
uint32_t const_charge_current_ua
- CHARGER_PROP_CONSTANT_CHARGE_CURRENT_UA. 
 - 
uint32_t precharge_current_ua
- CHARGER_PROP_PRECHARGE_CURRENT_UA. 
 - 
uint32_t charge_term_current_ua
- CHARGER_PROP_CHARGE_TERM_CURRENT_UA. 
 - 
uint32_t const_charge_voltage_uv
- CHARGER_PROP_CONSTANT_CHARGE_VOLTAGE_UV. 
 - 
uint32_t input_current_regulation_current_ua
- CHARGER_PROP_INPUT_REGULATION_CURRENT_UA. 
 - 
uint32_t input_voltage_regulation_voltage_uv
- CHARGER_PROP_INPUT_REGULATION_VOLTAGE_UV. 
 - 
struct charger_current_notifier input_current_notification
- CHARGER_PROP_INPUT_CURRENT_NOTIFICATION. 
 - 
struct charger_current_notifier discharge_current_notification
- CHARGER_PROP_DISCHARGE_CURRENT_NOTIFICATION. 
 - 
uint32_t system_voltage_notification
- CHARGER_PROP_SYSTEM_VOLTAGE_NOTIFICATION_UV. 
 - 
charger_status_notifier_t status_notification
- CHARGER_PROP_STATUS_NOTIFICATION. 
 - 
charger_online_notifier_t online_notification
- CHARGER_PROP_ONLINE_NOTIFICATION. 
 
- 
enum charger_online online
 - 
struct charger_driver_api
- #include <charger.h>Charging device API. Caching is entirely on the onus of the client 
 
- 
typedef uint16_t charger_prop_t