diff --git a/drivers/hwmon/acpi_power_meter.c b/drivers/hwmon/acpi_power_meter.c index 11922c835860..954e21f4dd18 100644 --- a/drivers/hwmon/acpi_power_meter.c +++ b/drivers/hwmon/acpi_power_meter.c @@ -630,19 +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; + + 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;