diff options
author | Guenter Roeck <linux@roeck-us.net> | 2014-05-12 14:03:47 -0400 |
---|---|---|
committer | Guenter Roeck <linux@roeck-us.net> | 2014-05-21 19:02:24 -0400 |
commit | 03f49f641ab70b2ceea674e666f5b933e3bc5d27 (patch) | |
tree | 30d0b6bf539480839590394699f2d525ee5f7cf2 /drivers/hwmon | |
parent | d8850c19b589bd364d3c7cd1273193e6dfe83fd9 (diff) |
hwmon: (emc1403) Add support for alarm and diode fault status on EMC14x2
Alarm and fault status register on EMC1402, EMC1412, and EMC1422 is reported
in a different register than with other chips. Add support for it.
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Diffstat (limited to 'drivers/hwmon')
-rw-r--r-- | drivers/hwmon/emc1403.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/drivers/hwmon/emc1403.c b/drivers/hwmon/emc1403.c index 9acd5bfcfa01..f76e5503b89a 100644 --- a/drivers/hwmon/emc1403.c +++ b/drivers/hwmon/emc1403.c | |||
@@ -299,6 +299,39 @@ static const struct attribute_group emc1404_group = { | |||
299 | .attrs = emc1404_attrs, | 299 | .attrs = emc1404_attrs, |
300 | }; | 300 | }; |
301 | 301 | ||
302 | /* | ||
303 | * EMC14x2 uses a different register and different bits to report alarm and | ||
304 | * fault status. For simplicity, provide a separate attribute group for this | ||
305 | * chip series. | ||
306 | * Since we can not re-use the same attribute names, create a separate attribute | ||
307 | * array. | ||
308 | */ | ||
309 | static struct sensor_device_attribute_2 emc1402_alarms[] = { | ||
310 | SENSOR_ATTR_2(temp1_min_alarm, S_IRUGO, show_bit, NULL, 0x02, 0x20), | ||
311 | SENSOR_ATTR_2(temp1_max_alarm, S_IRUGO, show_bit, NULL, 0x02, 0x40), | ||
312 | SENSOR_ATTR_2(temp1_crit_alarm, S_IRUGO, show_bit, NULL, 0x02, 0x01), | ||
313 | |||
314 | SENSOR_ATTR_2(temp2_fault, S_IRUGO, show_bit, NULL, 0x02, 0x04), | ||
315 | SENSOR_ATTR_2(temp2_min_alarm, S_IRUGO, show_bit, NULL, 0x02, 0x08), | ||
316 | SENSOR_ATTR_2(temp2_max_alarm, S_IRUGO, show_bit, NULL, 0x02, 0x10), | ||
317 | SENSOR_ATTR_2(temp2_crit_alarm, S_IRUGO, show_bit, NULL, 0x02, 0x02), | ||
318 | }; | ||
319 | |||
320 | static struct attribute *emc1402_alarm_attrs[] = { | ||
321 | &emc1402_alarms[0].dev_attr.attr, | ||
322 | &emc1402_alarms[1].dev_attr.attr, | ||
323 | &emc1402_alarms[2].dev_attr.attr, | ||
324 | &emc1402_alarms[3].dev_attr.attr, | ||
325 | &emc1402_alarms[4].dev_attr.attr, | ||
326 | &emc1402_alarms[5].dev_attr.attr, | ||
327 | &emc1402_alarms[6].dev_attr.attr, | ||
328 | NULL, | ||
329 | }; | ||
330 | |||
331 | static const struct attribute_group emc1402_alarm_group = { | ||
332 | .attrs = emc1402_alarm_attrs, | ||
333 | }; | ||
334 | |||
302 | static int emc1403_detect(struct i2c_client *client, | 335 | static int emc1403_detect(struct i2c_client *client, |
303 | struct i2c_board_info *info) | 336 | struct i2c_board_info *info) |
304 | { | 337 | { |
@@ -395,6 +428,9 @@ static int emc1403_probe(struct i2c_client *client, | |||
395 | data->groups[0] = &emc1402_group; | 428 | data->groups[0] = &emc1402_group; |
396 | } | 429 | } |
397 | 430 | ||
431 | if (id->driver_data == emc1402) | ||
432 | data->groups[1] = &emc1402_alarm_group; | ||
433 | |||
398 | hwmon_dev = devm_hwmon_device_register_with_groups(&client->dev, | 434 | hwmon_dev = devm_hwmon_device_register_with_groups(&client->dev, |
399 | client->name, data, | 435 | client->name, data, |
400 | data->groups); | 436 | data->groups); |