]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
gpio: mpsse: use new GPIO line value setter callbacks
authorBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Tue, 10 Jun 2025 12:33:16 +0000 (14:33 +0200)
committerBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Tue, 17 Jun 2025 09:09:30 +0000 (11:09 +0200)
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/20250610-gpiochip-set-rv-gpio-v1-6-3a9a3c1472ff@linaro.org
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
drivers/gpio/gpio-mpsse.c

index 3ea32c5e33d1a445dec02996744429f17ec61af7..b17de08e9e03c5ce05ca5c1bbbb8a0f83fc2ba03 100644 (file)
@@ -160,8 +160,8 @@ static int gpio_mpsse_get_bank(struct mpsse_priv *priv, u8 bank)
        return buf;
 }
 
-static void gpio_mpsse_set_multiple(struct gpio_chip *chip, unsigned long *mask,
-                                   unsigned long *bits)
+static int gpio_mpsse_set_multiple(struct gpio_chip *chip, unsigned long *mask,
+                                  unsigned long *bits)
 {
        unsigned long i, bank, bank_mask, bank_bits;
        int ret;
@@ -180,11 +180,11 @@ static void gpio_mpsse_set_multiple(struct gpio_chip *chip, unsigned long *mask,
 
                        ret = gpio_mpsse_set_bank(priv, bank);
                        if (ret)
-                               dev_err(&priv->intf->dev,
-                                       "Couldn't set values for bank %ld!",
-                                       bank);
+                               return ret;
                }
        }
+
+       return 0;
 }
 
 static int gpio_mpsse_get_multiple(struct gpio_chip *chip, unsigned long *mask,
@@ -227,7 +227,7 @@ static int gpio_mpsse_gpio_get(struct gpio_chip *chip, unsigned int offset)
                return 0;
 }
 
-static void gpio_mpsse_gpio_set(struct gpio_chip *chip, unsigned int offset,
+static int gpio_mpsse_gpio_set(struct gpio_chip *chip, unsigned int offset,
                               int value)
 {
        unsigned long mask = 0, bits = 0;
@@ -236,7 +236,7 @@ static void gpio_mpsse_gpio_set(struct gpio_chip *chip, unsigned int offset,
        if (value)
                __set_bit(offset, &bits);
 
-       gpio_mpsse_set_multiple(chip, &mask, &bits);
+       return gpio_mpsse_set_multiple(chip, &mask, &bits);
 }
 
 static int gpio_mpsse_direction_output(struct gpio_chip *chip,
@@ -249,9 +249,7 @@ static int gpio_mpsse_direction_output(struct gpio_chip *chip,
        scoped_guard(mutex, &priv->io_mutex)
                priv->gpio_dir[bank] |= BIT(bank_offset);
 
-       gpio_mpsse_gpio_set(chip, offset, value);
-
-       return 0;
+       return gpio_mpsse_gpio_set(chip, offset, value);
 }
 
 static int gpio_mpsse_direction_input(struct gpio_chip *chip,
@@ -450,9 +448,9 @@ static int gpio_mpsse_probe(struct usb_interface *interface,
        priv->gpio.direction_input = gpio_mpsse_direction_input;
        priv->gpio.direction_output = gpio_mpsse_direction_output;
        priv->gpio.get = gpio_mpsse_gpio_get;
-       priv->gpio.set = gpio_mpsse_gpio_set;
+       priv->gpio.set_rv = gpio_mpsse_gpio_set;
        priv->gpio.get_multiple = gpio_mpsse_get_multiple;
-       priv->gpio.set_multiple = gpio_mpsse_set_multiple;
+       priv->gpio.set_multiple_rv = gpio_mpsse_set_multiple;
        priv->gpio.base = -1;
        priv->gpio.ngpio = 16;
        priv->gpio.offset = priv->intf_id * priv->gpio.ngpio;