mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-14 12:21:15 -04:00
gpiolib: wrap gpio_chip::set()
We have three places where we dereference the gpio_chip::set() callback. In order to make it easier to incorporate the upcoming new variant of this callback (one returning an integer value), wrap it in a helper so that the dereferencing only happens once. Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Acked-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com> Link: https://lore.kernel.org/r/20250220-gpio-set-retval-v2-3-bc4cfd38dae3@linaro.org Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
This commit is contained in:
@@ -2825,6 +2825,17 @@ int gpiod_direction_input_nonotify(struct gpio_desc *desc)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int gpiochip_set(struct gpio_chip *gc, unsigned int offset, int value)
|
||||
{
|
||||
lockdep_assert_held(&gc->gpiodev->srcu);
|
||||
|
||||
if (WARN_ON(unlikely(!gc->set)))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
gc->set(gc, offset, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int gpiod_direction_output_raw_commit(struct gpio_desc *desc, int value)
|
||||
{
|
||||
int val = !!value, ret = 0;
|
||||
@@ -2867,7 +2878,9 @@ static int gpiod_direction_output_raw_commit(struct gpio_desc *desc, int value)
|
||||
* If we can't actively set the direction, we are some
|
||||
* output-only chip, so just drive the output as desired.
|
||||
*/
|
||||
guard.gc->set(guard.gc, gpio_chip_hwgpio(desc), val);
|
||||
ret = gpiochip_set(guard.gc, gpio_chip_hwgpio(desc), val);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (!ret)
|
||||
@@ -3557,9 +3570,7 @@ static int gpiod_set_raw_value_commit(struct gpio_desc *desc, bool value)
|
||||
return -ENODEV;
|
||||
|
||||
trace_gpio_value(desc_to_gpio(desc), 0, value);
|
||||
guard.gc->set(guard.gc, gpio_chip_hwgpio(desc), value);
|
||||
|
||||
return 0;
|
||||
return gpiochip_set(guard.gc, gpio_chip_hwgpio(desc), value);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -3584,7 +3595,7 @@ static void gpio_chip_set_multiple(struct gpio_chip *gc,
|
||||
|
||||
/* set outputs if the corresponding mask bit is set */
|
||||
for_each_set_bit(i, mask, gc->ngpio)
|
||||
gc->set(gc, i, test_bit(i, bits));
|
||||
gpiochip_set(gc, i, test_bit(i, bits));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user