Re: [PATCH v3 05/11] power: supply: bq257xx: Fix VSYSMIN clamping logic

From: Sebastian Reichel

Date: Wed Mar 11 2026 - 03:25:04 EST


Hi,

On Tue, Mar 10, 2026 at 01:28:29PM +0400, Alexey Charkov wrote:
> The minimal system voltage (VSYSMIN) is meant to protect the battery from
> dangerous over-discharge. When the device tree provides a value for the
> minimum design voltage of the battery, the user should not be allowed to
> set a lower VSYSMIN, as that would defeat the purpose of this protection.
>
> Flip the clamping logic when setting VSYSMIN to ensure that battery design
> voltage is respected.
>
> Cc: stable@xxxxxxxxxxxxxxx
> Fixes: 1cc017b7f9c7 ("power: supply: bq257xx: Add support for BQ257XX charger")
> 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 | 7 +++----
> 1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/power/supply/bq257xx_charger.c b/drivers/power/supply/bq257xx_charger.c
> index 02c7d8b61e82..7ca4ae610902 100644
> --- a/drivers/power/supply/bq257xx_charger.c
> +++ b/drivers/power/supply/bq257xx_charger.c
> @@ -128,9 +128,8 @@ static int bq25703_get_min_vsys(struct bq257xx_chg *pdata, int *intval)
> * @vsys: voltage value to set in uV.
> *
> * This function takes a requested minimum system voltage value, clamps
> - * it between the minimum supported value by the charger and a user
> - * defined minimum system value, and then writes the value to the
> - * appropriate register.
> + * it between the user defined minimum system value and the maximum supported
> + * value by the charger, and then writes the value to the appropriate register.
> *
> * Return: Returns 0 on success or error if an error occurs.
> */
> @@ -139,7 +138,7 @@ static int bq25703_set_min_vsys(struct bq257xx_chg *pdata, int vsys)
> unsigned int reg;
> int vsys_min = pdata->vsys_min;
>
> - vsys = clamp(vsys, BQ25703_MINVSYS_MIN_UV, vsys_min);
> + vsys = clamp(vsys, vsys_min, BQ25703_MINVSYS_MAX_UV);
> reg = ((vsys - BQ25703_MINVSYS_MIN_UV) / BQ25703_MINVSYS_STEP_UV);
> reg = FIELD_PREP(BQ25703_MINVSYS_MASK, reg);
>
>
> --
> 2.52.0
>
>

Attachment: signature.asc
Description: PGP signature