Commit 66a6d0e5 authored by Bartosz Golaszewski's avatar Bartosz Golaszewski
Browse files

gpio: max732x: use new GPIO line value setter callbacks

struct gpio_chip now has callbacks for setting line values that return
an integer, allowing to indicate failures. Convert the driver to using
them.

Link: https://lore.kernel.org/r/20250506-gpiochip-set-rv-gpio-part3-v1-8-0fbdea5a9667@linaro.org


Signed-off-by: default avatarBartosz Golaszewski <bartosz.golaszewski@linaro.org>
parent 19389137
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -225,15 +225,18 @@ static void max732x_gpio_set_mask(struct gpio_chip *gc, unsigned off, int mask,
	mutex_unlock(&chip->lock);
}

static void max732x_gpio_set_value(struct gpio_chip *gc, unsigned off, int val)
static int max732x_gpio_set_value(struct gpio_chip *gc, unsigned int off,
				  int val)
{
	unsigned base = off & ~0x7;
	uint8_t mask = 1u << (off & 0x7);

	max732x_gpio_set_mask(gc, base, mask, val << (off & 0x7));

	return 0;
}

static void max732x_gpio_set_multiple(struct gpio_chip *gc,
static int max732x_gpio_set_multiple(struct gpio_chip *gc,
				     unsigned long *mask, unsigned long *bits)
{
	unsigned mask_lo = mask[0] & 0xff;
@@ -243,6 +246,8 @@ static void max732x_gpio_set_multiple(struct gpio_chip *gc,
		max732x_gpio_set_mask(gc, 0, mask_lo, bits[0] & 0xff);
	if (mask_hi)
		max732x_gpio_set_mask(gc, 8, mask_hi, (bits[0] >> 8) & 0xff);

	return 0;
}

static int max732x_gpio_direction_input(struct gpio_chip *gc, unsigned off)
@@ -580,8 +585,8 @@ static int max732x_setup_gpio(struct max732x_chip *chip,
		gc->direction_input = max732x_gpio_direction_input;
	if (chip->dir_output) {
		gc->direction_output = max732x_gpio_direction_output;
		gc->set = max732x_gpio_set_value;
		gc->set_multiple = max732x_gpio_set_multiple;
		gc->set_rv = max732x_gpio_set_value;
		gc->set_multiple_rv = max732x_gpio_set_multiple;
	}
	gc->get = max732x_gpio_get_value;
	gc->can_sleep = true;