diff options
author | Xin Xie <xxie@nvidia.com> | 2013-06-03 18:27:55 -0700 |
---|---|---|
committer | Riham Haidar <rhaidar@nvidia.com> | 2013-06-12 18:51:57 -0700 |
commit | 339d494c5790e7a96d00e94e7e6c68716644c18a (patch) | |
tree | e9a99e1768ec98395014bd6b69b18ce2e590a54a /drivers | |
parent | 6b4edf8cc448f0b3f65e718bcc248d0f2d205c39 (diff) |
hwmon: ina230: fix negative current reading
bug 1298931
Change-Id: If0037afb285b88dde11fe5f40def8f8fe9727c56
Signed-off-by: Xin Xie <xxie@nvidia.com>
Reviewed-on: http://git-master/r/235215
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/hwmon/ina230.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/hwmon/ina230.c b/drivers/hwmon/ina230.c index b3f25a2b21e6..3429843b9783 100644 --- a/drivers/hwmon/ina230.c +++ b/drivers/hwmon/ina230.c @@ -444,21 +444,22 @@ static s32 show_current(struct device *dev, } /* getting current readings in milli amps*/ - current_mA = be16_to_cpu(i2c_smbus_read_word_data(client, - INA230_CURRENT)); - if (current_mA < 0) { + retval = i2c_smbus_read_word_data(client, INA230_CURRENT); + if (retval < 0) { mutex_unlock(&data->mutex); - return -EINVAL; + return retval; } + current_mA = (s16) be16_to_cpu(retval); ensure_enabled_end(client); mutex_unlock(&data->mutex); if (data->pdata->shunt_polarity_inverted) - current_mA = (s16)current_mA * -1; + current_mA *= -1; - current_mA = - (current_mA * data->pdata->power_lsb) / data->pdata->divisor; + current_mA *= (s16) data->pdata->power_lsb; + if (data->pdata->divisor) + current_mA /= (s16) data->pdata->divisor; if (data->pdata->precision_multiplier) current_mA /= data->pdata->precision_multiplier; @@ -629,7 +630,7 @@ static int __devexit ina230_remove(struct i2c_client *client) } -static int ina230_suspend(struct i2c_client *client) +static int ina230_suspend(struct i2c_client *client, pm_message_t mesg) { return power_down_ina230(client); } |