提交 f49d6a7e 编写于 作者: K Kyle McMartin 提交者: Guenter Roeck

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: NKyle McMartin <kyle@redhat.com>
Signed-off-by: NGuenter Roeck <guenter.roeck@ericsson.com>
上级 3c45f2c7
...@@ -630,49 +630,24 @@ static int read_domain_devices(struct acpi_power_meter_resource *resource) ...@@ -630,49 +630,24 @@ static int read_domain_devices(struct acpi_power_meter_resource *resource)
} }
/* Registration and deregistration */ /* Registration and deregistration */
static int register_ro_attrs(struct acpi_power_meter_resource *resource, static int register_attrs(struct acpi_power_meter_resource *resource,
struct sensor_template *ro) struct sensor_template *attrs)
{ {
struct device *dev = &resource->acpi_dev->dev; struct device *dev = &resource->acpi_dev->dev;
struct sensor_device_attribute *sensors = struct sensor_device_attribute *sensors =
&resource->sensors[resource->num_sensors]; &resource->sensors[resource->num_sensors];
int res = 0; int res = 0;
while (ro->label) { while (attrs->label) {
sensors->dev_attr.attr.name = ro->label; sensors->dev_attr.attr.name = attrs->label;
sensors->dev_attr.attr.mode = S_IRUGO; sensors->dev_attr.attr.mode = S_IRUGO;
sensors->dev_attr.show = ro->show; sensors->dev_attr.show = attrs->show;
sensors->index = ro->index; sensors->index = attrs->index;
sysfs_attr_init(&sensors->dev_attr.attr); if (attrs->set) {
res = device_create_file(dev, &sensors->dev_attr); sensors->dev_attr.attr.mode |= S_IWUSR;
if (res) { sensors->dev_attr.store = attrs->set;
sensors->dev_attr.attr.name = NULL;
goto error;
} }
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); sysfs_attr_init(&sensors->dev_attr.attr);
res = device_create_file(dev, &sensors->dev_attr); res = device_create_file(dev, &sensors->dev_attr);
...@@ -682,7 +657,7 @@ static int register_rw_attrs(struct acpi_power_meter_resource *resource, ...@@ -682,7 +657,7 @@ static int register_rw_attrs(struct acpi_power_meter_resource *resource,
} }
sensors++; sensors++;
resource->num_sensors++; resource->num_sensors++;
rw++; attrs++;
} }
error: error:
...@@ -714,10 +689,10 @@ static int setup_attrs(struct acpi_power_meter_resource *resource) ...@@ -714,10 +689,10 @@ static int setup_attrs(struct acpi_power_meter_resource *resource)
return res; return res;
if (resource->caps.flags & POWER_METER_CAN_MEASURE) { 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) if (res)
goto error; goto error;
res = register_rw_attrs(resource, meter_rw_attrs); res = register_attrs(resource, meter_rw_attrs);
if (res) if (res)
goto error; goto error;
} }
...@@ -730,27 +705,27 @@ static int setup_attrs(struct acpi_power_meter_resource *resource) ...@@ -730,27 +705,27 @@ static int setup_attrs(struct acpi_power_meter_resource *resource)
} }
if (resource->caps.configurable_cap) { if (resource->caps.configurable_cap) {
res = register_rw_attrs(resource, rw_cap_attrs); res = register_attrs(resource, rw_cap_attrs);
if (res) if (res)
goto error; goto error;
} else { } else {
res = register_ro_attrs(resource, ro_cap_attrs); res = register_attrs(resource, ro_cap_attrs);
if (res) if (res)
goto error; goto error;
} }
res = register_ro_attrs(resource, misc_cap_attrs); res = register_attrs(resource, misc_cap_attrs);
if (res) if (res)
goto error; goto error;
} }
skip_unsafe_cap: skip_unsafe_cap:
if (resource->caps.flags & POWER_METER_CAN_TRIP) { if (resource->caps.flags & POWER_METER_CAN_TRIP) {
res = register_rw_attrs(resource, trip_attrs); res = register_attrs(resource, trip_attrs);
if (res) if (res)
goto error; goto error;
} }
res = register_ro_attrs(resource, misc_attrs); res = register_attrs(resource, misc_attrs);
if (res) if (res)
goto error; goto error;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册