|
@@ -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;
|
|
|
|