2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-15 16:53:54 +08:00

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>
This commit is contained in:
Guenter Roeck 2013-03-30 14:23:20 -07:00
parent 5292971563
commit 87533770be

View File

@ -1834,40 +1834,57 @@ static const struct attribute_group it87_group_in = {
.is_visible = it87_in_is_visible,
};
static struct attribute *it87_attributes_temp[3][6] = {
static umode_t it87_temp_is_visible(struct kobject *kobj,
struct attribute *attr, int index)
{
struct device *dev = container_of(kobj, struct device, kobj);
struct it87_data *data = dev_get_drvdata(dev);
int i = index / 7; /* temperature index */
int a = index % 7; /* attribute index */
if (!(data->has_temp & (1 << i)))
return 0;
if (a == 5 && !has_temp_offset(data))
return 0;
if (a == 6 && !data->has_beep)
return 0;
return attr->mode;
}
static struct attribute *it87_attributes_temp[] = {
&sensor_dev_attr_temp1_input.dev_attr.attr,
&sensor_dev_attr_temp1_max.dev_attr.attr,
&sensor_dev_attr_temp1_min.dev_attr.attr,
&sensor_dev_attr_temp1_type.dev_attr.attr,
&sensor_dev_attr_temp1_alarm.dev_attr.attr,
NULL
} , {
&sensor_dev_attr_temp1_offset.dev_attr.attr, /* 5 */
&sensor_dev_attr_temp1_beep.dev_attr.attr, /* 6 */
&sensor_dev_attr_temp2_input.dev_attr.attr,
&sensor_dev_attr_temp2_max.dev_attr.attr,
&sensor_dev_attr_temp2_min.dev_attr.attr,
&sensor_dev_attr_temp2_type.dev_attr.attr,
&sensor_dev_attr_temp2_alarm.dev_attr.attr,
NULL
} , {
&sensor_dev_attr_temp2_offset.dev_attr.attr,
&sensor_dev_attr_temp2_beep.dev_attr.attr,
&sensor_dev_attr_temp3_input.dev_attr.attr,
&sensor_dev_attr_temp3_max.dev_attr.attr,
&sensor_dev_attr_temp3_min.dev_attr.attr,
&sensor_dev_attr_temp3_type.dev_attr.attr,
&sensor_dev_attr_temp3_alarm.dev_attr.attr,
NULL
} };
&sensor_dev_attr_temp3_offset.dev_attr.attr,
&sensor_dev_attr_temp3_beep.dev_attr.attr,
static const struct attribute_group it87_group_temp[3] = {
{ .attrs = it87_attributes_temp[0] },
{ .attrs = it87_attributes_temp[1] },
{ .attrs = it87_attributes_temp[2] },
NULL
};
static struct attribute *it87_attributes_temp_offset[] = {
&sensor_dev_attr_temp1_offset.dev_attr.attr,
&sensor_dev_attr_temp2_offset.dev_attr.attr,
&sensor_dev_attr_temp3_offset.dev_attr.attr,
static const struct attribute_group it87_group_temp = {
.attrs = it87_attributes_temp,
.is_visible = it87_temp_is_visible,
};
static struct attribute *it87_attributes[] = {
@ -1881,12 +1898,6 @@ static const struct attribute_group it87_group = {
.attrs = it87_attributes,
};
static struct attribute *it87_attributes_temp_beep[] = {
&sensor_dev_attr_temp1_beep.dev_attr.attr,
&sensor_dev_attr_temp2_beep.dev_attr.attr,
&sensor_dev_attr_temp3_beep.dev_attr.attr,
};
static struct attribute *it87_attributes_fan[6][3+1] = { {
&sensor_dev_attr_fan1_input.dev_attr.attr,
&sensor_dev_attr_fan1_min.dev_attr.attr,
@ -2436,18 +2447,8 @@ static void it87_remove_files(struct device *dev)
sysfs_remove_group(&dev->kobj, &it87_group);
sysfs_remove_group(&dev->kobj, &it87_group_in);
sysfs_remove_group(&dev->kobj, &it87_group_temp);
for (i = 0; i < 3; i++) {
if (!(data->has_temp & (1 << i)))
continue;
sysfs_remove_group(&dev->kobj, &it87_group_temp[i]);
if (has_temp_offset(data))
sysfs_remove_file(&dev->kobj,
it87_attributes_temp_offset[i]);
if (sio_data->beep_pin)
sysfs_remove_file(&dev->kobj,
it87_attributes_temp_beep[i]);
}
for (i = 0; i < 6; i++) {
if (!(data->has_fan & (1 << i)))
continue;
@ -2746,25 +2747,9 @@ static int it87_probe(struct platform_device *pdev)
if (err)
goto error;
for (i = 0; i < 3; i++) {
if (!(data->has_temp & (1 << i)))
continue;
err = sysfs_create_group(&dev->kobj, &it87_group_temp[i]);
if (err)
goto error;
if (has_temp_offset(data)) {
err = sysfs_create_file(&dev->kobj,
it87_attributes_temp_offset[i]);
if (err)
goto error;
}
if (sio_data->beep_pin) {
err = sysfs_create_file(&dev->kobj,
it87_attributes_temp_beep[i]);
if (err)
goto error;
}
}
err = sysfs_create_group(&dev->kobj, &it87_group_temp);
if (err)
goto error;
/* Do not create fan files for disabled fans */
fan_beep_need_rw = 1;