/* * Copyright 2020 Google LLC * * SPDX-License-Identifier: Apache-2.0 */ #ifndef ZEPHYR_DRIVERS_SENSOR_BATTERY_MAX17055_H_ #define ZEPHYR_DRIVERS_SENSOR_BATTERY_MAX17055_H_ /* Register addresses */ enum { STATUS = 0x0, REP_CAP = 0x5, REP_SOC = 0x6, INT_TEMP = 0x8, VCELL = 0x9, AVG_CURRENT = 0xb, FULL_CAP_REP = 0x10, TTE = 0x11, ICHG_TERM = 0x1e, CYCLES = 0x17, DESIGN_CAP = 0x18, TTF = 0x20, V_EMPTY = 0x3a, FSTAT = 0x3d, D_QACC = 0x45, D_PACC = 0x46, SOFT_WAKEUP = 0x60, HIB_CFG = 0xba, MODEL_CFG = 0xdb, }; /* Masks */ enum { FSTAT_DNR = 0x0001, HIB_CFG_CLEAR = 0x0000, MODELCFG_REFRESH = 0x8000, SOFT_WAKEUP_CLEAR = 0x0000, SOFT_WAKEUP_WAKEUP = 0x0090, STATUS_POR = 0x0002, }; struct max17055_data { const struct device *i2c; /* Current cell voltage in units of 1.25/16mV */ uint16_t voltage; /* Average current in units of 1.5625uV / Rsense */ int16_t avg_current; /* Remaining capacity as a %age */ uint16_t state_of_charge; /* Internal temperature in units of 1/256 degrees C */ int16_t internal_temp; /* Full charge capacity in 5/Rsense uA */ uint16_t full_cap; /* Remaining capacity in 5/Rsense uA */ uint16_t remaining_cap; /* Time to empty in seconds */ uint16_t time_to_empty; /* Time to full in seconds */ uint16_t time_to_full; /* Cycle count in 1/100ths (number of charge/discharge cycles) */ uint16_t cycle_count; /* Design capacity in 5/Rsense uA */ uint16_t design_cap; }; struct max17055_config { char *bus_name; /* Value of Rsense resistor in milliohms (typicallly 5 or 10) */ uint16_t rsense_mohms; /* The design capacity (aka label capacity) of the cell in mAh */ uint16_t design_capacity; /* Design voltage of cell in mV */ uint16_t design_voltage; /* Desired voltage of cell in mV */ uint16_t desired_voltage; /* Desired charging current in mA */ uint16_t desired_charging_current; /* The charge termination current in uA */ uint16_t i_chg_term; /* The empty voltage of the cell in mV */ uint16_t v_empty; }; #endif