mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 08:44:21 +08:00
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: Jean Delvare <khali@linux-fr.org> Acked-by: Martyn Welch <martyn.welch@gefanuc.com>
This commit is contained in:
parent
f65e17086f
commit
5f502a834a
@ -323,12 +323,16 @@ static ssize_t set_temp11(struct device *dev, struct device_attribute *devattr,
|
||||
mutex_lock(&data->update_lock);
|
||||
if (data->kind == adt7461)
|
||||
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
|
||||
data->temp11[nr] = TEMP2_TO_REG(val);
|
||||
|
||||
i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2],
|
||||
data->temp11[nr] >> 8);
|
||||
i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2 + 1],
|
||||
data->temp11[nr] & 0xff);
|
||||
if (data->kind != max6657 && data->kind != max6680)
|
||||
i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2 + 1],
|
||||
data->temp11[nr] & 0xff);
|
||||
mutex_unlock(&data->update_lock);
|
||||
return count;
|
||||
}
|
||||
@ -801,12 +805,21 @@ static struct lm90_data *lm90_update_device(struct device *dev)
|
||||
lm90_read16(client, LM90_REG_R_REMOTE_TEMPH,
|
||||
LM90_REG_R_REMOTE_TEMPL, &data->temp11[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) | l;
|
||||
if (lm90_read_reg(client, LM90_REG_R_REMOTE_HIGHH, &h) == 0
|
||||
&& lm90_read_reg(client, LM90_REG_R_REMOTE_HIGHL, &l) == 0)
|
||||
data->temp11[2] = (h << 8) | l;
|
||||
if (lm90_read_reg(client, LM90_REG_R_REMOTE_LOWH, &h) == 0) {
|
||||
data->temp11[1] = h << 8;
|
||||
if (data->kind != max6657 && data->kind != max6680
|
||||
&& lm90_read_reg(client, LM90_REG_R_REMOTE_LOWL,
|
||||
&l) == 0)
|
||||
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 (lm90_read_reg(client, LM90_REG_R_REMOTE_OFFSH,
|
||||
&h) == 0
|
||||
|
Loading…
Reference in New Issue
Block a user