aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hwmon
diff options
context:
space:
mode:
authorGuenter Roeck <linux@roeck-us.net>2013-03-30 17:23:20 -0400
committerGuenter Roeck <linux@roeck-us.net>2016-04-19 09:32:36 -0400
commit87533770be36ecea55b86fa377ba4232d720df23 (patch)
tree2bbfc5789e6228a1bf540981f2291224e6e05cc9 /drivers/hwmon
parent52929715634ad36782bd7018ab0bf59a6619c393 (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.c87
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
1837static struct attribute *it87_attributes_temp[3][6] = { 1837static 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
1857static 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
1861static 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
1867static struct attribute *it87_attributes_temp_offset[] = { 1885static 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
1873static struct attribute *it87_attributes[] = { 1890static 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
1884static 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
1890static struct attribute *it87_attributes_fan[6][3+1] = { { 1901static 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;