diff options
author | Guenter Roeck <linux@roeck-us.net> | 2013-03-30 17:23:20 -0400 |
---|---|---|
committer | Guenter Roeck <linux@roeck-us.net> | 2016-04-19 09:32:36 -0400 |
commit | 87533770be36ecea55b86fa377ba4232d720df23 (patch) | |
tree | 2bbfc5789e6228a1bf540981f2291224e6e05cc9 /drivers/hwmon | |
parent | 52929715634ad36782bd7018ab0bf59a6619c393 (diff) |
hwmon: (it87) Use is_visible for temperature sensors
Simplify code and reduce object size by more than 200 bytes on x86_64.
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 | 87 |
1 files changed, 36 insertions, 51 deletions
diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c index 81c11d1d67e2..c7feea9a6f80 100644 --- a/drivers/hwmon/it87.c +++ b/drivers/hwmon/it87.c | |||
@@ -1834,40 +1834,57 @@ static const struct attribute_group it87_group_in = { | |||
1834 | .is_visible = it87_in_is_visible, | 1834 | .is_visible = it87_in_is_visible, |
1835 | }; | 1835 | }; |
1836 | 1836 | ||
1837 | static struct attribute *it87_attributes_temp[3][6] = { | 1837 | static umode_t it87_temp_is_visible(struct kobject *kobj, |
1838 | struct attribute *attr, int index) | ||
1838 | { | 1839 | { |
1840 | struct device *dev = container_of(kobj, struct device, kobj); | ||
1841 | struct it87_data *data = dev_get_drvdata(dev); | ||
1842 | int i = index / 7; /* temperature index */ | ||
1843 | int a = index % 7; /* attribute index */ | ||
1844 | |||
1845 | if (!(data->has_temp & (1 << i))) | ||
1846 | return 0; | ||
1847 | |||
1848 | if (a == 5 && !has_temp_offset(data)) | ||
1849 | return 0; | ||
1850 | |||
1851 | if (a == 6 && !data->has_beep) | ||
1852 | return 0; | ||
1853 | |||
1854 | return attr->mode; | ||
1855 | } | ||
1856 | |||
1857 | static struct attribute *it87_attributes_temp[] = { | ||
1839 | &sensor_dev_attr_temp1_input.dev_attr.attr, | 1858 | &sensor_dev_attr_temp1_input.dev_attr.attr, |
1840 | &sensor_dev_attr_temp1_max.dev_attr.attr, | 1859 | &sensor_dev_attr_temp1_max.dev_attr.attr, |
1841 | &sensor_dev_attr_temp1_min.dev_attr.attr, | 1860 | &sensor_dev_attr_temp1_min.dev_attr.attr, |
1842 | &sensor_dev_attr_temp1_type.dev_attr.attr, | 1861 | &sensor_dev_attr_temp1_type.dev_attr.attr, |
1843 | &sensor_dev_attr_temp1_alarm.dev_attr.attr, | 1862 | &sensor_dev_attr_temp1_alarm.dev_attr.attr, |
1844 | NULL | 1863 | &sensor_dev_attr_temp1_offset.dev_attr.attr, /* 5 */ |
1845 | } , { | 1864 | &sensor_dev_attr_temp1_beep.dev_attr.attr, /* 6 */ |
1865 | |||
1846 | &sensor_dev_attr_temp2_input.dev_attr.attr, | 1866 | &sensor_dev_attr_temp2_input.dev_attr.attr, |
1847 | &sensor_dev_attr_temp2_max.dev_attr.attr, | 1867 | &sensor_dev_attr_temp2_max.dev_attr.attr, |
1848 | &sensor_dev_attr_temp2_min.dev_attr.attr, | 1868 | &sensor_dev_attr_temp2_min.dev_attr.attr, |
1849 | &sensor_dev_attr_temp2_type.dev_attr.attr, | 1869 | &sensor_dev_attr_temp2_type.dev_attr.attr, |
1850 | &sensor_dev_attr_temp2_alarm.dev_attr.attr, | 1870 | &sensor_dev_attr_temp2_alarm.dev_attr.attr, |
1851 | NULL | 1871 | &sensor_dev_attr_temp2_offset.dev_attr.attr, |
1852 | } , { | 1872 | &sensor_dev_attr_temp2_beep.dev_attr.attr, |
1873 | |||
1853 | &sensor_dev_attr_temp3_input.dev_attr.attr, | 1874 | &sensor_dev_attr_temp3_input.dev_attr.attr, |
1854 | &sensor_dev_attr_temp3_max.dev_attr.attr, | 1875 | &sensor_dev_attr_temp3_max.dev_attr.attr, |
1855 | &sensor_dev_attr_temp3_min.dev_attr.attr, | 1876 | &sensor_dev_attr_temp3_min.dev_attr.attr, |
1856 | &sensor_dev_attr_temp3_type.dev_attr.attr, | 1877 | &sensor_dev_attr_temp3_type.dev_attr.attr, |
1857 | &sensor_dev_attr_temp3_alarm.dev_attr.attr, | 1878 | &sensor_dev_attr_temp3_alarm.dev_attr.attr, |
1858 | NULL | 1879 | &sensor_dev_attr_temp3_offset.dev_attr.attr, |
1859 | } }; | 1880 | &sensor_dev_attr_temp3_beep.dev_attr.attr, |
1860 | 1881 | ||
1861 | static const struct attribute_group it87_group_temp[3] = { | 1882 | NULL |
1862 | { .attrs = it87_attributes_temp[0] }, | ||
1863 | { .attrs = it87_attributes_temp[1] }, | ||
1864 | { .attrs = it87_attributes_temp[2] }, | ||
1865 | }; | 1883 | }; |
1866 | 1884 | ||
1867 | static struct attribute *it87_attributes_temp_offset[] = { | 1885 | static const struct attribute_group it87_group_temp = { |
1868 | &sensor_dev_attr_temp1_offset.dev_attr.attr, | 1886 | .attrs = it87_attributes_temp, |
1869 | &sensor_dev_attr_temp2_offset.dev_attr.attr, | 1887 | .is_visible = it87_temp_is_visible, |
1870 | &sensor_dev_attr_temp3_offset.dev_attr.attr, | ||
1871 | }; | 1888 | }; |
1872 | 1889 | ||
1873 | static struct attribute *it87_attributes[] = { | 1890 | static struct attribute *it87_attributes[] = { |
@@ -1881,12 +1898,6 @@ static const struct attribute_group it87_group = { | |||
1881 | .attrs = it87_attributes, | 1898 | .attrs = it87_attributes, |
1882 | }; | 1899 | }; |
1883 | 1900 | ||
1884 | static struct attribute *it87_attributes_temp_beep[] = { | ||
1885 | &sensor_dev_attr_temp1_beep.dev_attr.attr, | ||
1886 | &sensor_dev_attr_temp2_beep.dev_attr.attr, | ||
1887 | &sensor_dev_attr_temp3_beep.dev_attr.attr, | ||
1888 | }; | ||
1889 | |||
1890 | static struct attribute *it87_attributes_fan[6][3+1] = { { | 1901 | static struct attribute *it87_attributes_fan[6][3+1] = { { |
1891 | &sensor_dev_attr_fan1_input.dev_attr.attr, | 1902 | &sensor_dev_attr_fan1_input.dev_attr.attr, |
1892 | &sensor_dev_attr_fan1_min.dev_attr.attr, | 1903 | &sensor_dev_attr_fan1_min.dev_attr.attr, |
@@ -2436,18 +2447,8 @@ static void it87_remove_files(struct device *dev) | |||
2436 | 2447 | ||
2437 | sysfs_remove_group(&dev->kobj, &it87_group); | 2448 | sysfs_remove_group(&dev->kobj, &it87_group); |
2438 | sysfs_remove_group(&dev->kobj, &it87_group_in); | 2449 | sysfs_remove_group(&dev->kobj, &it87_group_in); |
2450 | sysfs_remove_group(&dev->kobj, &it87_group_temp); | ||
2439 | 2451 | ||
2440 | for (i = 0; i < 3; i++) { | ||
2441 | if (!(data->has_temp & (1 << i))) | ||
2442 | continue; | ||
2443 | sysfs_remove_group(&dev->kobj, &it87_group_temp[i]); | ||
2444 | if (has_temp_offset(data)) | ||
2445 | sysfs_remove_file(&dev->kobj, | ||
2446 | it87_attributes_temp_offset[i]); | ||
2447 | if (sio_data->beep_pin) | ||
2448 | sysfs_remove_file(&dev->kobj, | ||
2449 | it87_attributes_temp_beep[i]); | ||
2450 | } | ||
2451 | for (i = 0; i < 6; i++) { | 2452 | for (i = 0; i < 6; i++) { |
2452 | if (!(data->has_fan & (1 << i))) | 2453 | if (!(data->has_fan & (1 << i))) |
2453 | continue; | 2454 | continue; |
@@ -2746,25 +2747,9 @@ static int it87_probe(struct platform_device *pdev) | |||
2746 | if (err) | 2747 | if (err) |
2747 | goto error; | 2748 | goto error; |
2748 | 2749 | ||
2749 | for (i = 0; i < 3; i++) { | 2750 | err = sysfs_create_group(&dev->kobj, &it87_group_temp); |
2750 | if (!(data->has_temp & (1 << i))) | 2751 | if (err) |
2751 | continue; | 2752 | goto error; |
2752 | err = sysfs_create_group(&dev->kobj, &it87_group_temp[i]); | ||
2753 | if (err) | ||
2754 | goto error; | ||
2755 | if (has_temp_offset(data)) { | ||
2756 | err = sysfs_create_file(&dev->kobj, | ||
2757 | it87_attributes_temp_offset[i]); | ||
2758 | if (err) | ||
2759 | goto error; | ||
2760 | } | ||
2761 | if (sio_data->beep_pin) { | ||
2762 | err = sysfs_create_file(&dev->kobj, | ||
2763 | it87_attributes_temp_beep[i]); | ||
2764 | if (err) | ||
2765 | goto error; | ||
2766 | } | ||
2767 | } | ||
2768 | 2753 | ||
2769 | /* Do not create fan files for disabled fans */ | 2754 | /* Do not create fan files for disabled fans */ |
2770 | fan_beep_need_rw = 1; | 2755 | fan_beep_need_rw = 1; |