Re: [PATCH v3 08/11] power: supply: bq257xx: Add fields for 'charging' and 'overvoltage' states

From: Sebastian Reichel

Date: Wed Mar 11 2026 - 03:27:55 EST


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 <macromorgan@xxxxxxxxxxx>
> Signed-off-by: Alexey Charkov <alchark@xxxxxxxxxxx>
> ---

Reviewed-by: Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxx>

-- 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
>

Attachment: signature.asc
Description: PGP signature