Commit 8a5680bf authored by Bartosz Golaszewski's avatar Bartosz Golaszewski
Browse files

gpiolib: don't double-check the gc->get callback's existence



gpiochip_get() is called only in two places: in gpio_chip_get_value()
and in gpiochip_get_multiple() where the existence of the gc->get()
callback is already checked. It makes sense to unduplicate the check by
moving it one level up the stack.

Fixes: 86ef402d ("gpiolib: sanitize the return value of gpio_chip::get()")
Suggested-by: default avatarAndy Shevchenko <andriy.shevchenko@intel.com>
Closes: https://lore.kernel.org/all/Z7yekJ8uRh8dphKn@black.fi.intel.com/


Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20250226-retval-fixes-v2-3-c8dc57182441@linaro.org


Signed-off-by: default avatarBartosz Golaszewski <bartosz.golaszewski@linaro.org>
parent cc78604f
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -3195,9 +3195,7 @@ static int gpiochip_get(struct gpio_chip *gc, unsigned int offset)

	lockdep_assert_held(&gc->gpiodev->srcu);

	if (!gc->get)
		return -EIO;

	/* Make sure this is called after checking for gc->get(). */
	ret = gc->get(gc, offset);
	if (ret > 1)
		ret = -EBADE;
@@ -3207,7 +3205,7 @@ static int gpiochip_get(struct gpio_chip *gc, unsigned int offset)

static int gpio_chip_get_value(struct gpio_chip *gc, const struct gpio_desc *desc)
{
	return gpiochip_get(gc, gpio_chip_hwgpio(desc));
	return gc->get ? gpiochip_get(gc, gpio_chip_hwgpio(desc)) : -EIO;
}

/* I/O calls are only valid after configuration completed; the relevant