diff options
Diffstat (limited to 'drivers/hwmon/asb100.c')
| -rw-r--r-- | drivers/hwmon/asb100.c | 122 |
1 files changed, 68 insertions, 54 deletions
diff --git a/drivers/hwmon/asb100.c b/drivers/hwmon/asb100.c index facc1ccb8338..57b1c7b7ac3f 100644 --- a/drivers/hwmon/asb100.c +++ b/drivers/hwmon/asb100.c | |||
| @@ -298,12 +298,6 @@ sysfs_in(4); | |||
| 298 | sysfs_in(5); | 298 | sysfs_in(5); |
| 299 | sysfs_in(6); | 299 | sysfs_in(6); |
| 300 | 300 | ||
| 301 | #define device_create_file_in(client, offset) do { \ | ||
| 302 | device_create_file(&client->dev, &dev_attr_in##offset##_input); \ | ||
| 303 | device_create_file(&client->dev, &dev_attr_in##offset##_min); \ | ||
| 304 | device_create_file(&client->dev, &dev_attr_in##offset##_max); \ | ||
| 305 | } while (0) | ||
| 306 | |||
| 307 | /* 3 Fans */ | 301 | /* 3 Fans */ |
| 308 | static ssize_t show_fan(struct device *dev, char *buf, int nr) | 302 | static ssize_t show_fan(struct device *dev, char *buf, int nr) |
| 309 | { | 303 | { |
| @@ -421,12 +415,6 @@ sysfs_fan(1); | |||
| 421 | sysfs_fan(2); | 415 | sysfs_fan(2); |
| 422 | sysfs_fan(3); | 416 | sysfs_fan(3); |
| 423 | 417 | ||
| 424 | #define device_create_file_fan(client, offset) do { \ | ||
| 425 | device_create_file(&client->dev, &dev_attr_fan##offset##_input); \ | ||
| 426 | device_create_file(&client->dev, &dev_attr_fan##offset##_min); \ | ||
| 427 | device_create_file(&client->dev, &dev_attr_fan##offset##_div); \ | ||
| 428 | } while (0) | ||
| 429 | |||
| 430 | /* 4 Temp. Sensors */ | 418 | /* 4 Temp. Sensors */ |
| 431 | static int sprintf_temp_from_reg(u16 reg, char *buf, int nr) | 419 | static int sprintf_temp_from_reg(u16 reg, char *buf, int nr) |
| 432 | { | 420 | { |
| @@ -515,12 +503,6 @@ sysfs_temp(3); | |||
| 515 | sysfs_temp(4); | 503 | sysfs_temp(4); |
| 516 | 504 | ||
| 517 | /* VID */ | 505 | /* VID */ |
| 518 | #define device_create_file_temp(client, num) do { \ | ||
| 519 | device_create_file(&client->dev, &dev_attr_temp##num##_input); \ | ||
| 520 | device_create_file(&client->dev, &dev_attr_temp##num##_max); \ | ||
| 521 | device_create_file(&client->dev, &dev_attr_temp##num##_max_hyst); \ | ||
| 522 | } while (0) | ||
| 523 | |||
| 524 | static ssize_t show_vid(struct device *dev, struct device_attribute *attr, char *buf) | 506 | static ssize_t show_vid(struct device *dev, struct device_attribute *attr, char *buf) |
| 525 | { | 507 | { |
| 526 | struct asb100_data *data = asb100_update_device(dev); | 508 | struct asb100_data *data = asb100_update_device(dev); |
| @@ -528,8 +510,6 @@ static ssize_t show_vid(struct device *dev, struct device_attribute *attr, char | |||
| 528 | } | 510 | } |
| 529 | 511 | ||
| 530 | static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid, NULL); | 512 | static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid, NULL); |
| 531 | #define device_create_file_vid(client) \ | ||
| 532 | device_create_file(&client->dev, &dev_attr_cpu0_vid) | ||
| 533 | 513 | ||
| 534 | /* VRM */ | 514 | /* VRM */ |
| 535 | static ssize_t show_vrm(struct device *dev, struct device_attribute *attr, char *buf) | 515 | static ssize_t show_vrm(struct device *dev, struct device_attribute *attr, char *buf) |
| @@ -549,8 +529,6 @@ static ssize_t set_vrm(struct device *dev, struct device_attribute *attr, const | |||
| 549 | 529 | ||
| 550 | /* Alarms */ | 530 | /* Alarms */ |
| 551 | static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm, set_vrm); | 531 | static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm, set_vrm); |
| 552 | #define device_create_file_vrm(client) \ | ||
| 553 | device_create_file(&client->dev, &dev_attr_vrm); | ||
| 554 | 532 | ||
| 555 | static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, char *buf) | 533 | static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, char *buf) |
| 556 | { | 534 | { |
| @@ -559,8 +537,6 @@ static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, ch | |||
| 559 | } | 537 | } |
| 560 | 538 | ||
| 561 | static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); | 539 | static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); |
| 562 | #define device_create_file_alarms(client) \ | ||
| 563 | device_create_file(&client->dev, &dev_attr_alarms) | ||
| 564 | 540 | ||
| 565 | /* 1 PWM */ | 541 | /* 1 PWM */ |
| 566 | static ssize_t show_pwm1(struct device *dev, struct device_attribute *attr, char *buf) | 542 | static ssize_t show_pwm1(struct device *dev, struct device_attribute *attr, char *buf) |
| @@ -607,10 +583,65 @@ static ssize_t set_pwm_enable1(struct device *dev, struct device_attribute *attr | |||
| 607 | static DEVICE_ATTR(pwm1, S_IRUGO | S_IWUSR, show_pwm1, set_pwm1); | 583 | static DEVICE_ATTR(pwm1, S_IRUGO | S_IWUSR, show_pwm1, set_pwm1); |
| 608 | static DEVICE_ATTR(pwm1_enable, S_IRUGO | S_IWUSR, | 584 | static DEVICE_ATTR(pwm1_enable, S_IRUGO | S_IWUSR, |
| 609 | show_pwm_enable1, set_pwm_enable1); | 585 | show_pwm_enable1, set_pwm_enable1); |
| 610 | #define device_create_file_pwm1(client) do { \ | 586 | |
| 611 | device_create_file(&new_client->dev, &dev_attr_pwm1); \ | 587 | static struct attribute *asb100_attributes[] = { |
| 612 | device_create_file(&new_client->dev, &dev_attr_pwm1_enable); \ | 588 | &dev_attr_in0_input.attr, |
| 613 | } while (0) | 589 | &dev_attr_in0_min.attr, |
| 590 | &dev_attr_in0_max.attr, | ||
| 591 | &dev_attr_in1_input.attr, | ||
| 592 | &dev_attr_in1_min.attr, | ||
| 593 | &dev_attr_in1_max.attr, | ||
| 594 | &dev_attr_in2_input.attr, | ||
| 595 | &dev_attr_in2_min.attr, | ||
| 596 | &dev_attr_in2_max.attr, | ||
| 597 | &dev_attr_in3_input.attr, | ||
| 598 | &dev_attr_in3_min.attr, | ||
| 599 | &dev_attr_in3_max.attr, | ||
| 600 | &dev_attr_in4_input.attr, | ||
| 601 | &dev_attr_in4_min.attr, | ||
| 602 | &dev_attr_in4_max.attr, | ||
| 603 | &dev_attr_in5_input.attr, | ||
| 604 | &dev_attr_in5_min.attr, | ||
| 605 | &dev_attr_in5_max.attr, | ||
| 606 | &dev_attr_in6_input.attr, | ||
| 607 | &dev_attr_in6_min.attr, | ||
| 608 | &dev_attr_in6_max.attr, | ||
| 609 | |||
| 610 | &dev_attr_fan1_input.attr, | ||
| 611 | &dev_attr_fan1_min.attr, | ||
| 612 | &dev_attr_fan1_div.attr, | ||
| 613 | &dev_attr_fan2_input.attr, | ||
| 614 | &dev_attr_fan2_min.attr, | ||
| 615 | &dev_attr_fan2_div.attr, | ||
| 616 | &dev_attr_fan3_input.attr, | ||
| 617 | &dev_attr_fan3_min.attr, | ||
| 618 | &dev_attr_fan3_div.attr, | ||
| 619 | |||
| 620 | &dev_attr_temp1_input.attr, | ||
| 621 | &dev_attr_temp1_max.attr, | ||
| 622 | &dev_attr_temp1_max_hyst.attr, | ||
| 623 | &dev_attr_temp2_input.attr, | ||
| 624 | &dev_attr_temp2_max.attr, | ||
| 625 | &dev_attr_temp2_max_hyst.attr, | ||
| 626 | &dev_attr_temp3_input.attr, | ||
| 627 | &dev_attr_temp3_max.attr, | ||
| 628 | &dev_attr_temp3_max_hyst.attr, | ||
| 629 | &dev_attr_temp4_input.attr, | ||
| 630 | &dev_attr_temp4_max.attr, | ||
| 631 | &dev_attr_temp4_max_hyst.attr, | ||
| 632 | |||
| 633 | &dev_attr_cpu0_vid.attr, | ||
| 634 | &dev_attr_vrm.attr, | ||
| 635 | &dev_attr_alarms.attr, | ||
| 636 | &dev_attr_pwm1.attr, | ||
| 637 | &dev_attr_pwm1_enable.attr, | ||
| 638 | |||
| 639 | NULL | ||
| 640 | }; | ||
| 641 | |||
| 642 | static const struct attribute_group asb100_group = { | ||
| 643 | .attrs = asb100_attributes, | ||
| 644 | }; | ||
| 614 | 645 | ||
| 615 | /* This function is called when: | 646 | /* This function is called when: |
| 616 | asb100_driver is inserted (when this module is loaded), for each | 647 | asb100_driver is inserted (when this module is loaded), for each |
| @@ -810,38 +841,19 @@ static int asb100_detect(struct i2c_adapter *adapter, int address, int kind) | |||
| 810 | data->fan_min[2] = asb100_read_value(new_client, ASB100_REG_FAN_MIN(2)); | 841 | data->fan_min[2] = asb100_read_value(new_client, ASB100_REG_FAN_MIN(2)); |
| 811 | 842 | ||
| 812 | /* Register sysfs hooks */ | 843 | /* Register sysfs hooks */ |
| 844 | if ((err = sysfs_create_group(&new_client->dev.kobj, &asb100_group))) | ||
| 845 | goto ERROR3; | ||
| 846 | |||
| 813 | data->class_dev = hwmon_device_register(&new_client->dev); | 847 | data->class_dev = hwmon_device_register(&new_client->dev); |
| 814 | if (IS_ERR(data->class_dev)) { | 848 | if (IS_ERR(data->class_dev)) { |
| 815 | err = PTR_ERR(data->class_dev); | 849 | err = PTR_ERR(data->class_dev); |
| 816 | goto ERROR3; | 850 | goto ERROR4; |
| 817 | } | 851 | } |
| 818 | 852 | ||
| 819 | device_create_file_in(new_client, 0); | ||
| 820 | device_create_file_in(new_client, 1); | ||
| 821 | device_create_file_in(new_client, 2); | ||
| 822 | device_create_file_in(new_client, 3); | ||
| 823 | device_create_file_in(new_client, 4); | ||
| 824 | device_create_file_in(new_client, 5); | ||
| 825 | device_create_file_in(new_client, 6); | ||
| 826 | |||
| 827 | device_create_file_fan(new_client, 1); | ||
| 828 | device_create_file_fan(new_client, 2); | ||
| 829 | device_create_file_fan(new_client, 3); | ||
| 830 | |||
| 831 | device_create_file_temp(new_client, 1); | ||
| 832 | device_create_file_temp(new_client, 2); | ||
| 833 | device_create_file_temp(new_client, 3); | ||
| 834 | device_create_file_temp(new_client, 4); | ||
| 835 | |||
| 836 | device_create_file_vid(new_client); | ||
| 837 | device_create_file_vrm(new_client); | ||
| 838 | |||
| 839 | device_create_file_alarms(new_client); | ||
| 840 | |||
| 841 | device_create_file_pwm1(new_client); | ||
| 842 | |||
| 843 | return 0; | 853 | return 0; |
| 844 | 854 | ||
| 855 | ERROR4: | ||
| 856 | sysfs_remove_group(&new_client->dev.kobj, &asb100_group); | ||
| 845 | ERROR3: | 857 | ERROR3: |
| 846 | i2c_detach_client(data->lm75[1]); | 858 | i2c_detach_client(data->lm75[1]); |
| 847 | i2c_detach_client(data->lm75[0]); | 859 | i2c_detach_client(data->lm75[0]); |
| @@ -861,8 +873,10 @@ static int asb100_detach_client(struct i2c_client *client) | |||
| 861 | int err; | 873 | int err; |
| 862 | 874 | ||
| 863 | /* main client */ | 875 | /* main client */ |
| 864 | if (data) | 876 | if (data) { |
| 865 | hwmon_device_unregister(data->class_dev); | 877 | hwmon_device_unregister(data->class_dev); |
| 878 | sysfs_remove_group(&client->dev.kobj, &asb100_group); | ||
| 879 | } | ||
| 866 | 880 | ||
| 867 | if ((err = i2c_detach_client(client))) | 881 | if ((err = i2c_detach_client(client))) |
| 868 | return err; | 882 | return err; |
