Commit 8416e1c9 authored by Bartosz Golaszewski's avatar Bartosz Golaszewski Committed by Bartosz Golaszewski
Browse files

gpio: htc-egpio: use new 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.

Signed-off-by: default avatarBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Link: https://lore.kernel.org/r/20250407-gpiochip-set-rv-gpio-part1-v1-10-78399683ca38@linaro.org


Signed-off-by: default avatarBartosz Golaszewski <brgl@bgdev.pl>
parent 1791226b
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -170,7 +170,7 @@ static int egpio_direction_input(struct gpio_chip *chip, unsigned offset)
 * Output pins
 */

static void egpio_set(struct gpio_chip *chip, unsigned offset, int value)
static int egpio_set(struct gpio_chip *chip, unsigned int offset, int value)
{
	unsigned long     flag;
	struct egpio_chip *egpio;
@@ -198,6 +198,8 @@ static void egpio_set(struct gpio_chip *chip, unsigned offset, int value)
		egpio->cached_values &= ~(1 << offset);
	egpio_writew((egpio->cached_values >> shift) & ei->reg_mask, ei, reg);
	spin_unlock_irqrestore(&ei->lock, flag);

	return 0;
}

static int egpio_direction_output(struct gpio_chip *chip,
@@ -206,13 +208,11 @@ static int egpio_direction_output(struct gpio_chip *chip,
	struct egpio_chip *egpio;

	egpio = gpiochip_get_data(chip);
	if (test_bit(offset, &egpio->is_out)) {
		egpio_set(chip, offset, value);
		return 0;
	} else {
	if (test_bit(offset, &egpio->is_out))
		return egpio_set(chip, offset, value);

	return -EINVAL;
}
}

static int egpio_get_direction(struct gpio_chip *chip, unsigned offset)
{
@@ -324,7 +324,7 @@ static int __init egpio_probe(struct platform_device *pdev)
		chip->parent          = &pdev->dev;
		chip->owner           = THIS_MODULE;
		chip->get             = egpio_get;
		chip->set             = egpio_set;
		chip->set_rv          = egpio_set;
		chip->direction_input = egpio_direction_input;
		chip->direction_output = egpio_direction_output;
		chip->get_direction   = egpio_get_direction;