diff options
author | Guenter Roeck <linux@roeck-us.net> | 2015-03-30 14:13:49 -0400 |
---|---|---|
committer | Guenter Roeck <linux@roeck-us.net> | 2016-04-19 09:32:36 -0400 |
commit | 8638d0afb4df0d3cebcd10c3056dcb4a52432941 (patch) | |
tree | 98782c5a44d7678d49ab8f75231825ec3bc87504 /drivers/hwmon | |
parent | d376684880beb603a11fb6593489a21398d2a491 (diff) |
hwmon: (it87) Convert to use new hwmon API
Convert to use devm_hwmon_device_register_with_groups to simplify
code and reduce code size. This also attaches sysfs attributes
to the hwmon device and no longer to the platform device.
Tested-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Diffstat (limited to 'drivers/hwmon')
-rw-r--r-- | drivers/hwmon/it87.c | 93 |
1 files changed, 19 insertions, 74 deletions
diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c index e4fb466fd9c3..e02c972ef81e 100644 --- a/drivers/hwmon/it87.c +++ b/drivers/hwmon/it87.c | |||
@@ -458,7 +458,7 @@ struct it87_sio_data { | |||
458 | * The structure is dynamically allocated. | 458 | * The structure is dynamically allocated. |
459 | */ | 459 | */ |
460 | struct it87_data { | 460 | struct it87_data { |
461 | struct device *hwmon_dev; | 461 | const struct attribute_group *groups[7]; |
462 | enum chips type; | 462 | enum chips type; |
463 | u16 features; | 463 | u16 features; |
464 | u8 peci_mask; | 464 | u8 peci_mask; |
@@ -1739,14 +1739,6 @@ static SENSOR_DEVICE_ATTR(in8_label, S_IRUGO, show_label, NULL, 2); | |||
1739 | /* AVCC3 */ | 1739 | /* AVCC3 */ |
1740 | static SENSOR_DEVICE_ATTR(in9_label, S_IRUGO, show_label, NULL, 0); | 1740 | static SENSOR_DEVICE_ATTR(in9_label, S_IRUGO, show_label, NULL, 0); |
1741 | 1741 | ||
1742 | static ssize_t show_name(struct device *dev, struct device_attribute | ||
1743 | *devattr, char *buf) | ||
1744 | { | ||
1745 | struct it87_data *data = dev_get_drvdata(dev); | ||
1746 | return sprintf(buf, "%s\n", data->name); | ||
1747 | } | ||
1748 | static DEVICE_ATTR(name, S_IRUGO, show_name, NULL); | ||
1749 | |||
1750 | static umode_t it87_in_is_visible(struct kobject *kobj, | 1742 | static umode_t it87_in_is_visible(struct kobject *kobj, |
1751 | struct attribute *attr, int index) | 1743 | struct attribute *attr, int index) |
1752 | { | 1744 | { |
@@ -1887,10 +1879,10 @@ static umode_t it87_is_visible(struct kobject *kobj, | |||
1887 | struct device *dev = container_of(kobj, struct device, kobj); | 1879 | struct device *dev = container_of(kobj, struct device, kobj); |
1888 | struct it87_data *data = dev_get_drvdata(dev); | 1880 | struct it87_data *data = dev_get_drvdata(dev); |
1889 | 1881 | ||
1890 | if ((index == 3 || index == 4) && !data->has_vid) | 1882 | if ((index == 2 || index == 3) && !data->has_vid) |
1891 | return 0; | 1883 | return 0; |
1892 | 1884 | ||
1893 | if (index > 4 && !(data->in_internal & (1 << (index - 5)))) | 1885 | if (index > 3 && !(data->in_internal & (1 << (index - 4)))) |
1894 | return 0; | 1886 | return 0; |
1895 | 1887 | ||
1896 | return attr->mode; | 1888 | return attr->mode; |
@@ -1899,10 +1891,9 @@ static umode_t it87_is_visible(struct kobject *kobj, | |||
1899 | static struct attribute *it87_attributes[] = { | 1891 | static struct attribute *it87_attributes[] = { |
1900 | &dev_attr_alarms.attr, | 1892 | &dev_attr_alarms.attr, |
1901 | &sensor_dev_attr_intrusion0_alarm.dev_attr.attr, | 1893 | &sensor_dev_attr_intrusion0_alarm.dev_attr.attr, |
1902 | &dev_attr_name.attr, | 1894 | &dev_attr_vrm.attr, /* 2 */ |
1903 | &dev_attr_vrm.attr, /* 3 */ | 1895 | &dev_attr_cpu0_vid.attr, /* 3 */ |
1904 | &dev_attr_cpu0_vid.attr, /* 4 */ | 1896 | &sensor_dev_attr_in3_label.dev_attr.attr, /* 4 .. 7 */ |
1905 | &sensor_dev_attr_in3_label.dev_attr.attr, /* 5 .. 8 */ | ||
1906 | &sensor_dev_attr_in7_label.dev_attr.attr, | 1897 | &sensor_dev_attr_in7_label.dev_attr.attr, |
1907 | &sensor_dev_attr_in8_label.dev_attr.attr, | 1898 | &sensor_dev_attr_in8_label.dev_attr.attr, |
1908 | &sensor_dev_attr_in9_label.dev_attr.attr, | 1899 | &sensor_dev_attr_in9_label.dev_attr.attr, |
@@ -2460,16 +2451,6 @@ exit: | |||
2460 | return err; | 2451 | return err; |
2461 | } | 2452 | } |
2462 | 2453 | ||
2463 | static void it87_remove_files(struct device *dev) | ||
2464 | { | ||
2465 | sysfs_remove_group(&dev->kobj, &it87_group); | ||
2466 | sysfs_remove_group(&dev->kobj, &it87_group_in); | ||
2467 | sysfs_remove_group(&dev->kobj, &it87_group_temp); | ||
2468 | sysfs_remove_group(&dev->kobj, &it87_group_fan); | ||
2469 | sysfs_remove_group(&dev->kobj, &it87_group_pwm); | ||
2470 | sysfs_remove_group(&dev->kobj, &it87_group_auto_pwm); | ||
2471 | } | ||
2472 | |||
2473 | /* Called when we have found a new IT87. */ | 2454 | /* Called when we have found a new IT87. */ |
2474 | static void it87_init_device(struct platform_device *pdev) | 2455 | static void it87_init_device(struct platform_device *pdev) |
2475 | { | 2456 | { |
@@ -2646,7 +2627,7 @@ static int it87_probe(struct platform_device *pdev) | |||
2646 | struct device *dev = &pdev->dev; | 2627 | struct device *dev = &pdev->dev; |
2647 | struct it87_sio_data *sio_data = dev_get_platdata(dev); | 2628 | struct it87_sio_data *sio_data = dev_get_platdata(dev); |
2648 | int enable_pwm_interface; | 2629 | int enable_pwm_interface; |
2649 | int err = 0; | 2630 | struct device *hwmon_dev; |
2650 | 2631 | ||
2651 | res = platform_get_resource(pdev, IORESOURCE_IO, 0); | 2632 | res = platform_get_resource(pdev, IORESOURCE_IO, 0); |
2652 | if (!devm_request_region(&pdev->dev, res->start, IT87_EC_EXTENT, | 2633 | if (!devm_request_region(&pdev->dev, res->start, IT87_EC_EXTENT, |
@@ -2666,7 +2647,6 @@ static int it87_probe(struct platform_device *pdev) | |||
2666 | data->features = it87_devices[sio_data->type].features; | 2647 | data->features = it87_devices[sio_data->type].features; |
2667 | data->peci_mask = it87_devices[sio_data->type].peci_mask; | 2648 | data->peci_mask = it87_devices[sio_data->type].peci_mask; |
2668 | data->old_peci_mask = it87_devices[sio_data->type].old_peci_mask; | 2649 | data->old_peci_mask = it87_devices[sio_data->type].old_peci_mask; |
2669 | data->name = it87_devices[sio_data->type].name; | ||
2670 | /* | 2650 | /* |
2671 | * IT8705F Datasheet 0.4.1, 3h == Version G. | 2651 | * IT8705F Datasheet 0.4.1, 3h == Version G. |
2672 | * IT8712F Datasheet 0.9.1, section 8.3.5 indicates 8h == Version J. | 2652 | * IT8712F Datasheet 0.9.1, section 8.3.5 indicates 8h == Version J. |
@@ -2742,59 +2722,25 @@ static int it87_probe(struct platform_device *pdev) | |||
2742 | data->vid = sio_data->vid_value; | 2722 | data->vid = sio_data->vid_value; |
2743 | } | 2723 | } |
2744 | 2724 | ||
2745 | /* Register sysfs hooks */ | 2725 | /* Prepare for sysfs hooks */ |
2746 | err = sysfs_create_group(&dev->kobj, &it87_group); | 2726 | data->groups[0] = &it87_group; |
2747 | if (err) | 2727 | data->groups[1] = &it87_group_in; |
2748 | return err; | 2728 | data->groups[2] = &it87_group_temp; |
2749 | 2729 | data->groups[3] = &it87_group_fan; | |
2750 | err = sysfs_create_group(&dev->kobj, &it87_group_in); | ||
2751 | if (err) | ||
2752 | goto error; | ||
2753 | |||
2754 | err = sysfs_create_group(&dev->kobj, &it87_group_temp); | ||
2755 | if (err) | ||
2756 | goto error; | ||
2757 | |||
2758 | err = sysfs_create_group(&dev->kobj, &it87_group_fan); | ||
2759 | if (err) | ||
2760 | goto error; | ||
2761 | 2730 | ||
2762 | if (enable_pwm_interface) { | 2731 | if (enable_pwm_interface) { |
2763 | data->has_pwm = (1 << ARRAY_SIZE(IT87_REG_PWM)) - 1; | 2732 | data->has_pwm = (1 << ARRAY_SIZE(IT87_REG_PWM)) - 1; |
2764 | data->has_pwm &= ~sio_data->skip_pwm; | 2733 | data->has_pwm &= ~sio_data->skip_pwm; |
2765 | 2734 | ||
2766 | err = sysfs_create_group(&dev->kobj, &it87_group_pwm); | 2735 | data->groups[4] = &it87_group_pwm; |
2767 | if (err) | 2736 | if (has_old_autopwm(data)) |
2768 | goto error; | 2737 | data->groups[5] = &it87_group_auto_pwm; |
2769 | if (has_old_autopwm(data)) { | ||
2770 | err = sysfs_create_group(&dev->kobj, | ||
2771 | &it87_group_auto_pwm); | ||
2772 | if (err) | ||
2773 | goto error; | ||
2774 | } | ||
2775 | } | ||
2776 | |||
2777 | data->hwmon_dev = hwmon_device_register(dev); | ||
2778 | if (IS_ERR(data->hwmon_dev)) { | ||
2779 | err = PTR_ERR(data->hwmon_dev); | ||
2780 | goto error; | ||
2781 | } | 2738 | } |
2782 | 2739 | ||
2783 | return 0; | 2740 | hwmon_dev = devm_hwmon_device_register_with_groups(dev, |
2784 | 2741 | it87_devices[sio_data->type].name, | |
2785 | error: | 2742 | data, data->groups); |
2786 | it87_remove_files(dev); | 2743 | return PTR_ERR_OR_ZERO(hwmon_dev); |
2787 | return err; | ||
2788 | } | ||
2789 | |||
2790 | static int it87_remove(struct platform_device *pdev) | ||
2791 | { | ||
2792 | struct it87_data *data = platform_get_drvdata(pdev); | ||
2793 | |||
2794 | hwmon_device_unregister(data->hwmon_dev); | ||
2795 | it87_remove_files(&pdev->dev); | ||
2796 | |||
2797 | return 0; | ||
2798 | } | 2744 | } |
2799 | 2745 | ||
2800 | static struct platform_driver it87_driver = { | 2746 | static struct platform_driver it87_driver = { |
@@ -2802,7 +2748,6 @@ static struct platform_driver it87_driver = { | |||
2802 | .name = DRVNAME, | 2748 | .name = DRVNAME, |
2803 | }, | 2749 | }, |
2804 | .probe = it87_probe, | 2750 | .probe = it87_probe, |
2805 | .remove = it87_remove, | ||
2806 | }; | 2751 | }; |
2807 | 2752 | ||
2808 | static int __init it87_device_add(int index, unsigned short address, | 2753 | static int __init it87_device_add(int index, unsigned short address, |