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:
Jean Delvare 2008-10-17 17:51:09 +02:00 committed by Jean Delvare
parent f65e17086f
commit 5f502a834a
1 changed files with 21 additions and 8 deletions

View File

@ -323,12 +323,16 @@ 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);
i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2 + 1], if (data->kind != max6657 && data->kind != max6680)
data->temp11[nr] & 0xff); i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2 + 1],
data->temp11[nr] & 0xff);
mutex_unlock(&data->update_lock); mutex_unlock(&data->update_lock);
return count; 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_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