mirror of https://gitee.com/openkylin/linux.git
acpi_power_meter: remove duplicate code between register_{ro,rw}_attrs
Key off the attr->set method being present to set the sysfs attribute as writable. Signed-off-by: Kyle McMartin <kyle@redhat.com> Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
This commit is contained in:
parent
3c45f2c78d
commit
f49d6a7ed2
|
@ -630,19 +630,24 @@ static int read_domain_devices(struct acpi_power_meter_resource *resource)
|
|||
}
|
||||
|
||||
/* Registration and deregistration */
|
||||
static int register_ro_attrs(struct acpi_power_meter_resource *resource,
|
||||
struct sensor_template *ro)
|
||||
static int register_attrs(struct acpi_power_meter_resource *resource,
|
||||
struct sensor_template *attrs)
|
||||
{
|
||||
struct device *dev = &resource->acpi_dev->dev;
|
||||
struct sensor_device_attribute *sensors =
|
||||
&resource->sensors[resource->num_sensors];
|
||||
int res = 0;
|
||||
|
||||
while (ro->label) {
|
||||
sensors->dev_attr.attr.name = ro->label;
|
||||
while (attrs->label) {
|
||||
sensors->dev_attr.attr.name = attrs->label;
|
||||
sensors->dev_attr.attr.mode = S_IRUGO;
|
||||
sensors->dev_attr.show = ro->show;
|
||||
sensors->index = ro->index;
|
||||
sensors->dev_attr.show = attrs->show;
|
||||
sensors->index = attrs->index;
|
||||
|
||||
if (attrs->set) {
|
||||
sensors->dev_attr.attr.mode |= S_IWUSR;
|
||||
sensors->dev_attr.store = attrs->set;
|
||||
}
|
||||
|
||||
sysfs_attr_init(&sensors->dev_attr.attr);
|
||||
res = device_create_file(dev, &sensors->dev_attr);
|
||||
|
@ -652,37 +657,7 @@ static int register_ro_attrs(struct acpi_power_meter_resource *resource,
|
|||
}
|
||||
sensors++;
|
||||
resource->num_sensors++;
|
||||
ro++;
|
||||
}
|
||||
|
||||
error:
|
||||
return res;
|
||||
}
|
||||
|
||||
static int register_rw_attrs(struct acpi_power_meter_resource *resource,
|
||||
struct sensor_template *rw)
|
||||
{
|
||||
struct device *dev = &resource->acpi_dev->dev;
|
||||
struct sensor_device_attribute *sensors =
|
||||
&resource->sensors[resource->num_sensors];
|
||||
int res = 0;
|
||||
|
||||
while (rw->label) {
|
||||
sensors->dev_attr.attr.name = rw->label;
|
||||
sensors->dev_attr.attr.mode = S_IRUGO | S_IWUSR;
|
||||
sensors->dev_attr.show = rw->show;
|
||||
sensors->dev_attr.store = rw->set;
|
||||
sensors->index = rw->index;
|
||||
|
||||
sysfs_attr_init(&sensors->dev_attr.attr);
|
||||
res = device_create_file(dev, &sensors->dev_attr);
|
||||
if (res) {
|
||||
sensors->dev_attr.attr.name = NULL;
|
||||
goto error;
|
||||
}
|
||||
sensors++;
|
||||
resource->num_sensors++;
|
||||
rw++;
|
||||
attrs++;
|
||||
}
|
||||
|
||||
error:
|
||||
|
@ -714,10 +689,10 @@ static int setup_attrs(struct acpi_power_meter_resource *resource)
|
|||
return res;
|
||||
|
||||
if (resource->caps.flags & POWER_METER_CAN_MEASURE) {
|
||||
res = register_ro_attrs(resource, meter_ro_attrs);
|
||||
res = register_attrs(resource, meter_ro_attrs);
|
||||
if (res)
|
||||
goto error;
|
||||
res = register_rw_attrs(resource, meter_rw_attrs);
|
||||
res = register_attrs(resource, meter_rw_attrs);
|
||||
if (res)
|
||||
goto error;
|
||||
}
|
||||
|
@ -730,27 +705,27 @@ static int setup_attrs(struct acpi_power_meter_resource *resource)
|
|||
}
|
||||
|
||||
if (resource->caps.configurable_cap) {
|
||||
res = register_rw_attrs(resource, rw_cap_attrs);
|
||||
res = register_attrs(resource, rw_cap_attrs);
|
||||
if (res)
|
||||
goto error;
|
||||
} else {
|
||||
res = register_ro_attrs(resource, ro_cap_attrs);
|
||||
res = register_attrs(resource, ro_cap_attrs);
|
||||
if (res)
|
||||
goto error;
|
||||
}
|
||||
res = register_ro_attrs(resource, misc_cap_attrs);
|
||||
res = register_attrs(resource, misc_cap_attrs);
|
||||
if (res)
|
||||
goto error;
|
||||
}
|
||||
skip_unsafe_cap:
|
||||
|
||||
if (resource->caps.flags & POWER_METER_CAN_TRIP) {
|
||||
res = register_rw_attrs(resource, trip_attrs);
|
||||
res = register_attrs(resource, trip_attrs);
|
||||
if (res)
|
||||
goto error;
|
||||
}
|
||||
|
||||
res = register_ro_attrs(resource, misc_attrs);
|
||||
res = register_attrs(resource, misc_attrs);
|
||||
if (res)
|
||||
goto error;
|
||||
|
||||
|
|
Loading…
Reference in New Issue