diff --git a/driver/charger/rt946x.c b/driver/charger/rt946x.c index 2d0f15f90c..27b92abf43 100644 --- a/driver/charger/rt946x.c +++ b/driver/charger/rt946x.c @@ -63,6 +63,13 @@ enum rt946x_ilmtsel { RT946X_ILMTSEL_LOWER_LEVEL, /* lower of above two */ }; +enum rt946x_chg_stat { + RT946X_CHGSTAT_READY = 0, + RT946X_CHGSTAT_IN_PROGRESS, + RT946X_CHGSTAT_DONE, + RT946X_CHGSTAT_FAULT, +}; + enum rt946x_adc_in_sel { RT946X_ADC_VBUS_DIV5 = 1, RT946X_ADC_VBUS_DIV2, @@ -911,6 +918,18 @@ int rt946x_is_vbus_ready(void) 0 : !!(val & RT946X_MASK_PWR_RDY); } +int rt946x_is_charge_done(void) +{ + int val = 0; + + if (rt946x_read8(RT946X_REG_CHGSTAT, &val)) + return 0; + + val = (val & RT946X_MASK_CHG_STAT) >> RT946X_SHIFT_CHG_STAT; + + return val == RT946X_CHGSTAT_DONE; +} + int rt946x_cutoff_battery(void) { return rt946x_set_bit(RT946X_REG_CHGCTRL2, RT946X_MASK_SHIP_MODE); diff --git a/driver/charger/rt946x.h b/driver/charger/rt946x.h index aff1c99928..208a8e80fe 100644 --- a/driver/charger/rt946x.h +++ b/driver/charger/rt946x.h @@ -315,6 +315,9 @@ int rt946x_enable_charger_boost(int en); */ int rt946x_is_vbus_ready(void); +/* Return 1 if rt946x triggers charge termination due to full charge. */ +int rt946x_is_charge_done(void); + /* * Cut off the battery (force BATFET to turn off). * Return 0 if it succeeds.