Commit 5f502a83 authored by Jean Delvare's avatar Jean Delvare Committed by Jean Delvare

hwmon: (lm90) Don't access nonexistent registers on Maxim chips

The Maxim chips supported by the lm90 driver have 8-bit high and low
remote limit values, not 11-bit as the other chips have. So stop reading
from and writing to registers that do not exist on these chips. Also
round the limit values set by the user properly.
Signed-off-by: default avatarJean Delvare <khali@linux-fr.org>
Acked-by: default avatarMartyn Welch <martyn.welch@gefanuc.com>
parent f65e1708
...@@ -323,10 +323,14 @@ static ssize_t set_temp11(struct device *dev, struct device_attribute *devattr, ...@@ -323,10 +323,14 @@ static ssize_t set_temp11(struct device *dev, struct device_attribute *devattr,
mutex_lock(&data->update_lock); mutex_lock(&data->update_lock);
if (data->kind == adt7461) if (data->kind == adt7461)
data->temp11[nr] = TEMP2_TO_REG_ADT7461(val); data->temp11[nr] = TEMP2_TO_REG_ADT7461(val);
else if (data->kind == max6657 || data->kind == max6680)
data->temp11[nr] = TEMP1_TO_REG(val) << 8;
else else
data->temp11[nr] = TEMP2_TO_REG(val); data->temp11[nr] = TEMP2_TO_REG(val);
i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2], i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2],
data->temp11[nr] >> 8); data->temp11[nr] >> 8);
if (data->kind != max6657 && data->kind != max6680)
i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2 + 1], i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2 + 1],
data->temp11[nr] & 0xff); data->temp11[nr] & 0xff);
mutex_unlock(&data->update_lock); mutex_unlock(&data->update_lock);
...@@ -801,12 +805,21 @@ static struct lm90_data *lm90_update_device(struct device *dev) ...@@ -801,12 +805,21 @@ static struct lm90_data *lm90_update_device(struct device *dev)
lm90_read16(client, LM90_REG_R_REMOTE_TEMPH, lm90_read16(client, LM90_REG_R_REMOTE_TEMPH,
LM90_REG_R_REMOTE_TEMPL, &data->temp11[0]); LM90_REG_R_REMOTE_TEMPL, &data->temp11[0]);
if (lm90_read_reg(client, LM90_REG_R_REMOTE_LOWH, &h) == 0 if (lm90_read_reg(client, LM90_REG_R_REMOTE_LOWH, &h) == 0) {
&& lm90_read_reg(client, LM90_REG_R_REMOTE_LOWL, &l) == 0) data->temp11[1] = h << 8;
data->temp11[1] = (h << 8) | l; if (data->kind != max6657 && data->kind != max6680
if (lm90_read_reg(client, LM90_REG_R_REMOTE_HIGHH, &h) == 0 && lm90_read_reg(client, LM90_REG_R_REMOTE_LOWL,
&& lm90_read_reg(client, LM90_REG_R_REMOTE_HIGHL, &l) == 0) &l) == 0)
data->temp11[2] = (h << 8) | l; data->temp11[1] |= l;
}
if (lm90_read_reg(client, LM90_REG_R_REMOTE_HIGHH, &h) == 0) {
data->temp11[2] = h << 8;
if (data->kind != max6657 && data->kind != max6680
&& lm90_read_reg(client, LM90_REG_R_REMOTE_HIGHL,
&l) == 0)
data->temp11[2] |= l;
}
if (data->kind != max6657) { if (data->kind != max6657) {
if (lm90_read_reg(client, LM90_REG_R_REMOTE_OFFSH, if (lm90_read_reg(client, LM90_REG_R_REMOTE_OFFSH,
&h) == 0 &h) == 0
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment