Re: [PATCH] hwmon: (adt7475) Make volt2reg return same reg as reg2volt input

From: Guenter Roeck
Date: Thu Dec 05 2019 - 17:58:00 EST


On Fri, Dec 06, 2019 at 11:54:30AM +1300, Luuk Paulussen wrote:
> reg2volt returns the voltage that matches a given register value.
> Converting this back the other way with volt2reg didn't return the same
> register value because it used truncation instead of rounding.
>
> This meant that values read from sysfs could not be written back to sysfs
> to set back the same register value.
>
> With this change, volt2reg will return the same value for every voltage
> previously returned by reg2volt (for the set of possible input values)
>
> Signed-off-by: Luuk Paulussen <luuk.paulussen@xxxxxxxxxxxxxxxxxxx>
> ---
> drivers/hwmon/adt7475.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/hwmon/adt7475.c b/drivers/hwmon/adt7475.c
> index 6c64d50c9aae..5eed7dd2f16d 100644
> --- a/drivers/hwmon/adt7475.c
> +++ b/drivers/hwmon/adt7475.c
> @@ -294,9 +294,10 @@ static inline u16 volt2reg(int channel, long volt, u8 bypass_attn)
> long reg;
>
> if (bypass_attn & (1 << channel))
> - reg = (volt * 1024) / 2250;
> + reg = DIV_ROUND_CLOSEST((volt * 1024), 2250);

Unnecessary ( )

> else
> - reg = (volt * r[1] * 1024) / ((r[0] + r[1]) * 2250);
> + reg = DIV_ROUND_CLOSEST((volt * r[1] * 1024),
> + ((r[0] + r[1]) * 2250));

More unnecessary ( )

Otherwise good catch.

Guenter

> return clamp_val(reg, 0, 1023) & (0xff << 2);
> }
>
> --
> 2.24.0
>