summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXin Xie <xxie@nvidia.com>2013-06-03 18:27:55 -0700
committerRiham Haidar <rhaidar@nvidia.com>2013-06-12 18:51:57 -0700
commit339d494c5790e7a96d00e94e7e6c68716644c18a (patch)
treee9a99e1768ec98395014bd6b69b18ce2e590a54a
parent6b4edf8cc448f0b3f65e718bcc248d0f2d205c39 (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>
-rw-r--r--drivers/hwmon/ina230.c17
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);
}