aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hwmon/smsc47m1.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/hwmon/smsc47m1.c')
-rw-r--r--drivers/hwmon/smsc47m1.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/drivers/hwmon/smsc47m1.c b/drivers/hwmon/smsc47m1.c
index 0d7f0c4d06bb..d1b498548736 100644
--- a/drivers/hwmon/smsc47m1.c
+++ b/drivers/hwmon/smsc47m1.c
@@ -198,6 +198,14 @@ static ssize_t get_fan_div(struct device *dev, struct device_attribute
198 return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[attr->index])); 198 return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[attr->index]));
199} 199}
200 200
201static ssize_t get_fan_alarm(struct device *dev, struct device_attribute
202 *devattr, char *buf)
203{
204 int bitnr = to_sensor_dev_attr(devattr)->index;
205 struct smsc47m1_data *data = smsc47m1_update_device(dev, 0);
206 return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1);
207}
208
201static ssize_t get_pwm(struct device *dev, struct device_attribute 209static ssize_t get_pwm(struct device *dev, struct device_attribute
202 *devattr, char *buf) 210 *devattr, char *buf)
203{ 211{
@@ -347,6 +355,8 @@ static SENSOR_DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
347 get_fan_min, set_fan_min, offset - 1); \ 355 get_fan_min, set_fan_min, offset - 1); \
348static SENSOR_DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \ 356static SENSOR_DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \
349 get_fan_div, set_fan_div, offset - 1); \ 357 get_fan_div, set_fan_div, offset - 1); \
358static SENSOR_DEVICE_ATTR(fan##offset##_alarm, S_IRUGO, get_fan_alarm, \
359 NULL, offset - 1); \
350static SENSOR_DEVICE_ATTR(pwm##offset, S_IRUGO | S_IWUSR, \ 360static SENSOR_DEVICE_ATTR(pwm##offset, S_IRUGO | S_IWUSR, \
351 get_pwm, set_pwm, offset - 1); \ 361 get_pwm, set_pwm, offset - 1); \
352static SENSOR_DEVICE_ATTR(pwm##offset##_enable, S_IRUGO | S_IWUSR, \ 362static SENSOR_DEVICE_ATTR(pwm##offset##_enable, S_IRUGO | S_IWUSR, \
@@ -374,12 +384,15 @@ static struct attribute *smsc47m1_attributes[] = {
374 &sensor_dev_attr_fan1_input.dev_attr.attr, 384 &sensor_dev_attr_fan1_input.dev_attr.attr,
375 &sensor_dev_attr_fan1_min.dev_attr.attr, 385 &sensor_dev_attr_fan1_min.dev_attr.attr,
376 &sensor_dev_attr_fan1_div.dev_attr.attr, 386 &sensor_dev_attr_fan1_div.dev_attr.attr,
387 &sensor_dev_attr_fan1_alarm.dev_attr.attr,
377 &sensor_dev_attr_fan2_input.dev_attr.attr, 388 &sensor_dev_attr_fan2_input.dev_attr.attr,
378 &sensor_dev_attr_fan2_min.dev_attr.attr, 389 &sensor_dev_attr_fan2_min.dev_attr.attr,
379 &sensor_dev_attr_fan2_div.dev_attr.attr, 390 &sensor_dev_attr_fan2_div.dev_attr.attr,
391 &sensor_dev_attr_fan2_alarm.dev_attr.attr,
380 &sensor_dev_attr_fan3_input.dev_attr.attr, 392 &sensor_dev_attr_fan3_input.dev_attr.attr,
381 &sensor_dev_attr_fan3_min.dev_attr.attr, 393 &sensor_dev_attr_fan3_min.dev_attr.attr,
382 &sensor_dev_attr_fan3_div.dev_attr.attr, 394 &sensor_dev_attr_fan3_div.dev_attr.attr,
395 &sensor_dev_attr_fan3_alarm.dev_attr.attr,
383 396
384 &sensor_dev_attr_pwm1.dev_attr.attr, 397 &sensor_dev_attr_pwm1.dev_attr.attr,
385 &sensor_dev_attr_pwm1_enable.dev_attr.attr, 398 &sensor_dev_attr_pwm1_enable.dev_attr.attr,
@@ -533,7 +546,9 @@ static int __devinit smsc47m1_probe(struct platform_device *pdev)
533 || (err = device_create_file(dev, 546 || (err = device_create_file(dev,
534 &sensor_dev_attr_fan1_min.dev_attr)) 547 &sensor_dev_attr_fan1_min.dev_attr))
535 || (err = device_create_file(dev, 548 || (err = device_create_file(dev,
536 &sensor_dev_attr_fan1_div.dev_attr))) 549 &sensor_dev_attr_fan1_div.dev_attr))
550 || (err = device_create_file(dev,
551 &sensor_dev_attr_fan1_alarm.dev_attr)))
537 goto error_remove_files; 552 goto error_remove_files;
538 } else 553 } else
539 dev_dbg(dev, "Fan 1 not enabled by hardware, skipping\n"); 554 dev_dbg(dev, "Fan 1 not enabled by hardware, skipping\n");
@@ -544,7 +559,9 @@ static int __devinit smsc47m1_probe(struct platform_device *pdev)
544 || (err = device_create_file(dev, 559 || (err = device_create_file(dev,
545 &sensor_dev_attr_fan2_min.dev_attr)) 560 &sensor_dev_attr_fan2_min.dev_attr))
546 || (err = device_create_file(dev, 561 || (err = device_create_file(dev,
547 &sensor_dev_attr_fan2_div.dev_attr))) 562 &sensor_dev_attr_fan2_div.dev_attr))
563 || (err = device_create_file(dev,
564 &sensor_dev_attr_fan2_alarm.dev_attr)))
548 goto error_remove_files; 565 goto error_remove_files;
549 } else 566 } else
550 dev_dbg(dev, "Fan 2 not enabled by hardware, skipping\n"); 567 dev_dbg(dev, "Fan 2 not enabled by hardware, skipping\n");
@@ -555,7 +572,9 @@ static int __devinit smsc47m1_probe(struct platform_device *pdev)
555 || (err = device_create_file(dev, 572 || (err = device_create_file(dev,
556 &sensor_dev_attr_fan3_min.dev_attr)) 573 &sensor_dev_attr_fan3_min.dev_attr))
557 || (err = device_create_file(dev, 574 || (err = device_create_file(dev,
558 &sensor_dev_attr_fan3_div.dev_attr))) 575 &sensor_dev_attr_fan3_div.dev_attr))
576 || (err = device_create_file(dev,
577 &sensor_dev_attr_fan3_alarm.dev_attr)))
559 goto error_remove_files; 578 goto error_remove_files;
560 } else if (data->type == smsc47m2) 579 } else if (data->type == smsc47m2)
561 dev_dbg(dev, "Fan 3 not enabled by hardware, skipping\n"); 580 dev_dbg(dev, "Fan 3 not enabled by hardware, skipping\n");