aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hwmon
diff options
context:
space:
mode:
authorGuenter Roeck <linux@roeck-us.net>2015-03-30 14:13:49 -0400
committerGuenter Roeck <linux@roeck-us.net>2016-04-19 09:32:36 -0400
commit8638d0afb4df0d3cebcd10c3056dcb4a52432941 (patch)
tree98782c5a44d7678d49ab8f75231825ec3bc87504 /drivers/hwmon
parentd376684880beb603a11fb6593489a21398d2a491 (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.c93
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 */
460struct it87_data { 460struct 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 */
1740static SENSOR_DEVICE_ATTR(in9_label, S_IRUGO, show_label, NULL, 0); 1740static SENSOR_DEVICE_ATTR(in9_label, S_IRUGO, show_label, NULL, 0);
1741 1741
1742static 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}
1748static DEVICE_ATTR(name, S_IRUGO, show_name, NULL);
1749
1750static umode_t it87_in_is_visible(struct kobject *kobj, 1742static 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,
1899static struct attribute *it87_attributes[] = { 1891static 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
2463static 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. */
2474static void it87_init_device(struct platform_device *pdev) 2455static 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,
2785error: 2742 data, data->groups);
2786 it87_remove_files(dev); 2743 return PTR_ERR_OR_ZERO(hwmon_dev);
2787 return err;
2788}
2789
2790static 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
2800static struct platform_driver it87_driver = { 2746static 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
2808static int __init it87_device_add(int index, unsigned short address, 2753static int __init it87_device_add(int index, unsigned short address,