mirror of
https://github.com/team-infusion-developers/android_kernel_samsung_msm8976.git
synced 2024-11-07 04:09:21 +00:00
hwmon: (ina2xx) Cast to s16 on shunt and current regs
commit c0214f98943b1fe43f7be61b7782b0c8f0836f28 upstream. All devices supported by ina2xx are bidirectional and report the measured shunt voltage and power values as a signed 16 bit, but the current driver implementation caches all registers as u16, leading to an incorrect sign extension when reporting to userspace in ina2xx_get_value(). This patch fixes the problem by casting the signed registers to s16. Tested on an INA219. Signed-off-by: Fabio Baltieri <fabio.baltieri@gmail.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
7029f0641d
commit
172a9e9a5f
1 changed files with 4 additions and 3 deletions
|
@ -147,7 +147,8 @@ static int ina2xx_get_value(struct ina2xx_data *data, u8 reg)
|
|||
|
||||
switch (reg) {
|
||||
case INA2XX_SHUNT_VOLTAGE:
|
||||
val = DIV_ROUND_CLOSEST(data->regs[reg],
|
||||
/* signed register */
|
||||
val = DIV_ROUND_CLOSEST((s16)data->regs[reg],
|
||||
data->config->shunt_div);
|
||||
break;
|
||||
case INA2XX_BUS_VOLTAGE:
|
||||
|
@ -159,8 +160,8 @@ static int ina2xx_get_value(struct ina2xx_data *data, u8 reg)
|
|||
val = data->regs[reg] * data->config->power_lsb;
|
||||
break;
|
||||
case INA2XX_CURRENT:
|
||||
/* LSB=1mA (selected). Is in mA */
|
||||
val = data->regs[reg];
|
||||
/* signed register, LSB=1mA (selected), in mA */
|
||||
val = (s16)data->regs[reg];
|
||||
break;
|
||||
default:
|
||||
/* programmer goofed */
|
||||
|
|
Loading…
Reference in a new issue