Commit 14628b69 authored by Bartosz Golaszewski's avatar Bartosz Golaszewski
Browse files

gpio: latch: use lock guards



Use lock guards from linux/cleanup.h. This will make the subsequent
commit that switches to using value returning GPIO line setters much
simpler as we'll be able to return values without caring about releasing
the locks.

Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Acked-by: default avatarUwe Kleine-König <u.kleine-koenig@baylibre.com>
Link: https://lore.kernel.org/r/20250220-gpio-set-retval-v2-12-bc4cfd38dae3@linaro.org


Signed-off-by: default avatarBartosz Golaszewski <bartosz.golaszewski@linaro.org>
parent 97c9b59f
Loading
Loading
Loading
Loading
+3 −7
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@
 * in the corresponding device tree properties.
 */

#include <linux/cleanup.h>
#include <linux/err.h>
#include <linux/gpio/consumer.h>
#include <linux/gpio/driver.h>
@@ -94,24 +95,19 @@ static void gpio_latch_set_unlocked(struct gpio_latch_priv *priv,
static void gpio_latch_set(struct gpio_chip *gc, unsigned int offset, int val)
{
	struct gpio_latch_priv *priv = gpiochip_get_data(gc);
	unsigned long flags;

	spin_lock_irqsave(&priv->spinlock, flags);
	guard(spinlock_irqsave)(&priv->spinlock);

	gpio_latch_set_unlocked(priv, gpiod_set_value, offset, val);

	spin_unlock_irqrestore(&priv->spinlock, flags);
}

static void gpio_latch_set_can_sleep(struct gpio_chip *gc, unsigned int offset, int val)
{
	struct gpio_latch_priv *priv = gpiochip_get_data(gc);

	mutex_lock(&priv->mutex);
	guard(mutex)(&priv->mutex);

	gpio_latch_set_unlocked(priv, gpiod_set_value_cansleep, offset, val);

	mutex_unlock(&priv->mutex);
}

static bool gpio_latch_can_sleep(struct gpio_latch_priv *priv, unsigned int n_latches)