Hi, On Tue, Mar 10, 2026 at 01:28:32PM +0400, Alexey Charkov wrote: > The driver currently reports the 'charging' and 'overvoltage' states based > on a logical expression in the get_charger_property() wrapper function. > This doesn't scale well to other chip variants, which may have a different > number and type of hardware reported conditions which fall into these > broad power supply states. > > Move the logic for determining 'charging' and 'overvoltage' states into > chip-specific accessors, which can be overridden by each variant as > needed. > > This helps keep the get_charger_property() wrapper function chip-agnostic > while allowing for new chip variants to be added bringing their own logic. > > Tested-by: Chris Morgan > Signed-off-by: Alexey Charkov > --- Reviewed-by: Sebastian Reichel -- Sebastian > drivers/power/supply/bq257xx_charger.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/power/supply/bq257xx_charger.c b/drivers/power/supply/bq257xx_charger.c > index deb60a9bd222..951abd035fc5 100644 > --- a/drivers/power/supply/bq257xx_charger.c > +++ b/drivers/power/supply/bq257xx_charger.c > @@ -64,8 +64,10 @@ struct bq257xx_chg { > struct bq257xx_device *bq; > struct power_supply *charger; > bool online; > + bool charging; > bool fast_charge; > bool pre_charge; > + bool overvoltage; > bool ov_fault; > bool batoc_fault; > bool oc_fault; > @@ -99,8 +101,10 @@ static int bq25703_get_state(struct bq257xx_chg *pdata) > pdata->online = reg & BQ25703_STS_AC_STAT; > pdata->fast_charge = reg & BQ25703_STS_IN_FCHRG; > pdata->pre_charge = reg & BQ25703_STS_IN_PCHRG; > + pdata->charging = pdata->fast_charge || pdata->pre_charge; > pdata->ov_fault = reg & BQ25703_STS_FAULT_ACOV; > pdata->batoc_fault = reg & BQ25703_STS_FAULT_BATOC; > + pdata->overvoltage = pdata->ov_fault || pdata->batoc_fault; > pdata->oc_fault = reg & BQ25703_STS_FAULT_ACOC; > > return 0; > @@ -471,14 +475,14 @@ static int bq257xx_get_charger_property(struct power_supply *psy, > case POWER_SUPPLY_PROP_STATUS: > if (!pdata->online) > val->intval = POWER_SUPPLY_STATUS_DISCHARGING; > - else if (pdata->fast_charge || pdata->pre_charge) > + else if (pdata->charging) > val->intval = POWER_SUPPLY_STATUS_CHARGING; > else > val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING; > break; > > case POWER_SUPPLY_PROP_HEALTH: > - if (pdata->ov_fault || pdata->batoc_fault) > + if (pdata->overvoltage) > val->intval = POWER_SUPPLY_HEALTH_OVERVOLTAGE; > else if (pdata->oc_fault) > val->intval = POWER_SUPPLY_HEALTH_OVERCURRENT; > > -- > 2.52.0 >