Messages in this thread Patch in this message | | | From | Eliav Farber <> | Subject | [PATCH v3 12/19] hwmon: (mr75203) fix voltage equation for negative source input | Date | Tue, 30 Aug 2022 19:22:05 +0000 |
| |
According to Moortec Embedded Voltage Monitor (MEVM) series 3 data sheet, the minimum input signal is -100mv and maximum input signal is +1000mv. When n was small enough, such that PVT_N_CONST * n < PVT_R_CONST it resulted in n overflowing to a very large number (since n is u32 type).
This change fixes the problem by casting n to long and replacing shift right with div operation.
Signed-off-by: Eliav Farber <farbere@amazon.com> --- V3 -> V2: - Fix equation to support negative values instead of limiting value to zero.
drivers/hwmon/mr75203.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/hwmon/mr75203.c b/drivers/hwmon/mr75203.c index 1cd5ff6eacce..d1f090a9baac 100644 --- a/drivers/hwmon/mr75203.c +++ b/drivers/hwmon/mr75203.c @@ -222,10 +222,11 @@ static int pvt_read_in(struct device *dev, u32 attr, int channel, long *val) return ret; n &= SAMPLE_DATA_MSK; + /* Convert the N bitstream count into voltage */ pre_scaler = pvt->vd[channel].pre_scaler; - *val = pre_scaler * (PVT_N_CONST * n - PVT_R_CONST) >> - PVT_CONV_BITS; + *val = pre_scaler * (PVT_N_CONST * (long)n - PVT_R_CONST) / + (1 << PVT_CONV_BITS); return 0; default: -- 2.37.1
| |