acpi_power_meter: remove duplicate code between register_{ro,rw}_attrs
authorKyle McMartin <kyle@mcmartin.ca>
Mon, 2 Apr 2012 18:19:02 +0000 (14:19 -0400)
committerGuenter Roeck <guenter.roeck@ericsson.com>
Mon, 21 May 2012 02:41:48 +0000 (19:41 -0700)
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>
drivers/hwmon/acpi_power_meter.c

index 11922c8..954e21f 100644 (file)
@@ -630,49 +630,24 @@ end:
 }
 
 /* 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;
 
-               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;
+               if (attrs->set) {
+                       sensors->dev_attr.attr.mode |= S_IWUSR;
+                       sensors->dev_attr.store = attrs->set;
                }
-               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);
@@ -682,7 +657,7 @@ static int register_rw_attrs(struct acpi_power_meter_resource *resource,
                }
                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;