Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f49d6a7e authored by Kyle McMartin's avatar Kyle McMartin Committed by Guenter Roeck
Browse files

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: default avatarKyle McMartin <kyle@redhat.com>
Signed-off-by: default avatarGuenter Roeck <guenter.roeck@ericsson.com>
parent 3c45f2c7
Loading
Loading
Loading
Loading
+17 −42
Original line number Diff line number Diff line
@@ -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;