diff options
author | Guenter Roeck <guenter.roeck@ericsson.com> | 2012-01-16 16:51:45 -0500 |
---|---|---|
committer | Jean Delvare <khali@endymion.delvare> | 2012-01-16 16:51:45 -0500 |
commit | 786375f7298dcc78a7cf44be9e15fb79bddc6f25 (patch) | |
tree | 1fa888b117ab8e6a9012252599f231620c62aa95 /drivers/hwmon/lm63.c | |
parent | 662bda28328b983f842f008a81a5fd4e6de6c5fe (diff) |
hwmon: (lm63) Add support for external temperature offset register
LM63 and compatibles support a temperature offset register for the external
temperature sensor. Add support for it.
Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Diffstat (limited to 'drivers/hwmon/lm63.c')
-rw-r--r-- | drivers/hwmon/lm63.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/hwmon/lm63.c b/drivers/hwmon/lm63.c index e02d7f01b01b..313aee18be1d 100644 --- a/drivers/hwmon/lm63.c +++ b/drivers/hwmon/lm63.c | |||
@@ -180,9 +180,10 @@ struct lm63_data { | |||
180 | s8 temp8[3]; /* 0: local input | 180 | s8 temp8[3]; /* 0: local input |
181 | 1: local high limit | 181 | 1: local high limit |
182 | 2: remote critical limit */ | 182 | 2: remote critical limit */ |
183 | s16 temp11[3]; /* 0: remote input | 183 | s16 temp11[4]; /* 0: remote input |
184 | 1: remote low limit | 184 | 1: remote low limit |
185 | 2: remote high limit */ | 185 | 2: remote high limit |
186 | 3: remote offset */ | ||
186 | u8 temp2_crit_hyst; | 187 | u8 temp2_crit_hyst; |
187 | u8 alarms; | 188 | u8 alarms; |
188 | }; | 189 | }; |
@@ -318,11 +319,13 @@ static ssize_t show_temp11(struct device *dev, struct device_attribute *devattr, | |||
318 | static ssize_t set_temp11(struct device *dev, struct device_attribute *devattr, | 319 | static ssize_t set_temp11(struct device *dev, struct device_attribute *devattr, |
319 | const char *buf, size_t count) | 320 | const char *buf, size_t count) |
320 | { | 321 | { |
321 | static const u8 reg[4] = { | 322 | static const u8 reg[6] = { |
322 | LM63_REG_REMOTE_LOW_MSB, | 323 | LM63_REG_REMOTE_LOW_MSB, |
323 | LM63_REG_REMOTE_LOW_LSB, | 324 | LM63_REG_REMOTE_LOW_LSB, |
324 | LM63_REG_REMOTE_HIGH_MSB, | 325 | LM63_REG_REMOTE_HIGH_MSB, |
325 | LM63_REG_REMOTE_HIGH_LSB, | 326 | LM63_REG_REMOTE_HIGH_LSB, |
327 | LM63_REG_REMOTE_OFFSET_MSB, | ||
328 | LM63_REG_REMOTE_OFFSET_LSB, | ||
326 | }; | 329 | }; |
327 | 330 | ||
328 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | 331 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); |
@@ -418,6 +421,8 @@ static SENSOR_DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp11, | |||
418 | set_temp11, 1); | 421 | set_temp11, 1); |
419 | static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp11, | 422 | static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp11, |
420 | set_temp11, 2); | 423 | set_temp11, 2); |
424 | static SENSOR_DEVICE_ATTR(temp2_offset, S_IWUSR | S_IRUGO, show_temp11, | ||
425 | set_temp11, 3); | ||
421 | /* | 426 | /* |
422 | * On LM63, temp2_crit can be set only once, which should be job | 427 | * On LM63, temp2_crit can be set only once, which should be job |
423 | * of the bootloader. | 428 | * of the bootloader. |
@@ -445,6 +450,7 @@ static struct attribute *lm63_attributes[] = { | |||
445 | &sensor_dev_attr_temp2_min.dev_attr.attr, | 450 | &sensor_dev_attr_temp2_min.dev_attr.attr, |
446 | &sensor_dev_attr_temp1_max.dev_attr.attr, | 451 | &sensor_dev_attr_temp1_max.dev_attr.attr, |
447 | &sensor_dev_attr_temp2_max.dev_attr.attr, | 452 | &sensor_dev_attr_temp2_max.dev_attr.attr, |
453 | &sensor_dev_attr_temp2_offset.dev_attr.attr, | ||
448 | &sensor_dev_attr_temp2_crit.dev_attr.attr, | 454 | &sensor_dev_attr_temp2_crit.dev_attr.attr, |
449 | &dev_attr_temp2_crit_hyst.attr, | 455 | &dev_attr_temp2_crit_hyst.attr, |
450 | 456 | ||
@@ -668,6 +674,10 @@ static struct lm63_data *lm63_update_device(struct device *dev) | |||
668 | LM63_REG_REMOTE_HIGH_MSB) << 8) | 674 | LM63_REG_REMOTE_HIGH_MSB) << 8) |
669 | | i2c_smbus_read_byte_data(client, | 675 | | i2c_smbus_read_byte_data(client, |
670 | LM63_REG_REMOTE_HIGH_LSB); | 676 | LM63_REG_REMOTE_HIGH_LSB); |
677 | data->temp11[3] = (i2c_smbus_read_byte_data(client, | ||
678 | LM63_REG_REMOTE_OFFSET_MSB) << 8) | ||
679 | | i2c_smbus_read_byte_data(client, | ||
680 | LM63_REG_REMOTE_OFFSET_LSB); | ||
671 | data->temp8[2] = i2c_smbus_read_byte_data(client, | 681 | data->temp8[2] = i2c_smbus_read_byte_data(client, |
672 | LM63_REG_REMOTE_TCRIT); | 682 | LM63_REG_REMOTE_TCRIT); |
673 | data->temp2_crit_hyst = i2c_smbus_read_byte_data(client, | 683 | data->temp2_crit_hyst = i2c_smbus_read_byte_data(client, |