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

Commit f0b7866a authored by Johan Hovold's avatar Johan Hovold Committed by Linus Walleij
Browse files

gpio: sysfs: remove redundant export tests



The attribute operations will never be called for an unregistered device
so remove redundant checks for FLAG_EXPORT.

Note that kernfs will also guarantee that any active sysfs operation has
finished before the attribute is removed during deregistration.

Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
Reviewed-by: default avatarAlexandre Courbot <acourbot@nvidia.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 54d9acd7
Loading
Loading
Loading
Loading
+23 −51
Original line number Diff line number Diff line
@@ -46,14 +46,10 @@ static ssize_t direction_show(struct device *dev,

	mutex_lock(&sysfs_lock);

	if (!test_bit(FLAG_EXPORT, &desc->flags)) {
		status = -EIO;
	} else {
	gpiod_get_direction(desc);
	status = sprintf(buf, "%s\n",
			test_bit(FLAG_IS_OUT, &desc->flags)
				? "out" : "in");
	}

	mutex_unlock(&sysfs_lock);
	return status;
@@ -67,9 +63,7 @@ static ssize_t direction_store(struct device *dev,

	mutex_lock(&sysfs_lock);

	if (!test_bit(FLAG_EXPORT, &desc->flags))
		status = -EIO;
	else if (sysfs_streq(buf, "high"))
	if (sysfs_streq(buf, "high"))
		status = gpiod_direction_output_raw(desc, 1);
	else if (sysfs_streq(buf, "out") || sysfs_streq(buf, "low"))
		status = gpiod_direction_output_raw(desc, 0);
@@ -91,9 +85,6 @@ static ssize_t value_show(struct device *dev,

	mutex_lock(&sysfs_lock);

	if (!test_bit(FLAG_EXPORT, &desc->flags))
		status = -EIO;
	else
	status = sprintf(buf, "%d\n", gpiod_get_value_cansleep(desc));

	mutex_unlock(&sysfs_lock);
@@ -108,11 +99,9 @@ static ssize_t value_store(struct device *dev,

	mutex_lock(&sysfs_lock);

	if (!test_bit(FLAG_EXPORT, &desc->flags))
		status = -EIO;
	else if (!test_bit(FLAG_IS_OUT, &desc->flags))
	if (!test_bit(FLAG_IS_OUT, &desc->flags)) {
		status = -EPERM;
	else {
	} else {
		long		value;

		status = kstrtol(buf, 0, &value);
@@ -237,21 +226,16 @@ static ssize_t edge_show(struct device *dev,
		struct device_attribute *attr, char *buf)
{
	const struct gpio_desc	*desc = dev_get_drvdata(dev);
	ssize_t			status;
	unsigned long mask;
	ssize_t	status = 0;
	int i;

	mutex_lock(&sysfs_lock);

	if (!test_bit(FLAG_EXPORT, &desc->flags))
		status = -EIO;
	else {
		int i;

		status = 0;
		for (i = 0; i < ARRAY_SIZE(trigger_types); i++)
			if ((desc->flags & GPIO_TRIGGER_MASK)
					== trigger_types[i].flags) {
				status = sprintf(buf, "%s\n",
						 trigger_types[i].name);
	for (i = 0; i < ARRAY_SIZE(trigger_types); i++) {
		mask = desc->flags & GPIO_TRIGGER_MASK;
		if (mask == trigger_types[i].flags) {
			status = sprintf(buf, "%s\n", trigger_types[i].name);
			break;
		}
	}
@@ -275,13 +259,9 @@ static ssize_t edge_store(struct device *dev,
found:
	mutex_lock(&sysfs_lock);

	if (!test_bit(FLAG_EXPORT, &desc->flags))
		status = -EIO;
	else {
	status = gpio_setup_irq(desc, dev, trigger_types[i].flags);
	if (!status)
		status = size;
	}

	mutex_unlock(&sysfs_lock);

@@ -322,9 +302,6 @@ static ssize_t active_low_show(struct device *dev,

	mutex_lock(&sysfs_lock);

	if (!test_bit(FLAG_EXPORT, &desc->flags))
		status = -EIO;
	else
	status = sprintf(buf, "%d\n",
				!!test_bit(FLAG_ACTIVE_LOW, &desc->flags));

@@ -338,18 +315,13 @@ static ssize_t active_low_store(struct device *dev,
{
	struct gpio_desc	*desc = dev_get_drvdata(dev);
	ssize_t			status;
	long			value;

	mutex_lock(&sysfs_lock);

	if (!test_bit(FLAG_EXPORT, &desc->flags)) {
		status = -EIO;
	} else {
		long		value;

	status = kstrtol(buf, 0, &value);
	if (status == 0)
		status = sysfs_set_active_low(desc, dev, value != 0);
	}

	mutex_unlock(&sysfs_lock);