diff options
Diffstat (limited to 'driver/charger/bq25710.c')
-rw-r--r-- | driver/charger/bq25710.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/driver/charger/bq25710.c b/driver/charger/bq25710.c index 13da37ab65..096d15ed1c 100644 --- a/driver/charger/bq25710.c +++ b/driver/charger/bq25710.c @@ -5,6 +5,8 @@ * TI bq25710 battery charger driver. */ +#include <stdbool.h> + #include "battery.h" #include "battery_smart.h" #include "bq25710.h" @@ -20,6 +22,11 @@ #include "timer.h" #include "util.h" +#if !defined(CONFIG_CHARGER_BQ25710) && \ + !defined(CONFIG_CHARGER_BQ25720) +#error Only the BQ25720 and BQ25710 are supported by bq25710 driver. +#endif + #ifndef CONFIG_CHARGER_NARROW_VDC #error "BQ25710 is a NVDC charger, please enable CONFIG_CHARGER_NARROW_VDC." #endif @@ -164,6 +171,39 @@ static int bq25710_set_low_power_mode(int chgnum, int enable) return EC_SUCCESS; } +static int bq25710_set_psys_sensing(int chgnum, bool enable) +{ + int rv; + int reg; + int mask, on, off; + + rv = raw_read16(chgnum, BQ25710_REG_CHARGE_OPTION_1, ®); + if (rv) + return rv; + + if (IS_ENABLED(CONFIG_CHARGER_BQ25720)) { + mask = BQ25720_CHARGE_OPTION_1_PSYS_MASK; + on = BQ25720_CHARGE_OPTION_1_PSYS_ON; + off = BQ25720_CHARGE_OPTION_1_PSYS_OFF; + } else if (IS_ENABLED(CONFIG_CHARGER_BQ25710)) { + mask = BQ25710_CHARGE_OPTION_1_PSYS_MASK; + on = BQ25710_CHARGE_OPTION_1_PSYS_ON; + off = BQ25710_CHARGE_OPTION_1_PSYS_OFF; + } + + reg &= ~mask; + if (enable) + reg |= on; + else + reg |= off; + + rv = raw_write16(chgnum, BQ25710_REG_CHARGE_OPTION_1, reg); + if (rv) + return rv; + + return EC_SUCCESS; +} + static int bq25710_adc_start(int chgnum, int adc_en_mask) { int reg; @@ -245,6 +285,9 @@ static void bq25710_init(int chgnum) bq25710_set_low_power_mode(chgnum, 1); } + if (IS_ENABLED(CONFIG_CHARGER_BQ25710_PSYS_SENSING)) + bq25710_set_psys_sensing(chgnum, true); + if (!raw_read16(chgnum, BQ25710_REG_PROCHOT_OPTION_1, ®)) { /* Disable VDPM prochot profile at initialization */ reg &= ~BQ25710_PROCHOT_PROFILE_VDPM; |