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:
parent
5292971563
commit
87533770be
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user