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 >