]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
gpio: raspberrypi-exp: use new GPIO line value setter callbacks
authorStefan Wahren <wahrenst@gmx.net>
Sat, 14 Jun 2025 11:12:16 +0000 (13:12 +0200)
committerBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Mon, 16 Jun 2025 07:52:21 +0000 (09:52 +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.

Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Link: https://lore.kernel.org/r/20250614111216.93677-1-wahrenst@gmx.net
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
drivers/gpio/gpio-raspberrypi-exp.c

index 9d1b95e429f19cf3c0549bca9d947df59fa0d809..b4b607515a0440563744842d43fe9afd80c7c100 100644 (file)
@@ -175,7 +175,7 @@ static int rpi_exp_gpio_get(struct gpio_chip *gc, unsigned int off)
        return !!get.state;
 }
 
-static void rpi_exp_gpio_set(struct gpio_chip *gc, unsigned int off, int val)
+static int rpi_exp_gpio_set(struct gpio_chip *gc, unsigned int off, int val)
 {
        struct rpi_exp_gpio *gpio;
        struct gpio_get_set_state set;
@@ -188,10 +188,14 @@ static void rpi_exp_gpio_set(struct gpio_chip *gc, unsigned int off, int val)
 
        ret = rpi_firmware_property(gpio->fw, RPI_FIRMWARE_SET_GPIO_STATE,
                                         &set, sizeof(set));
-       if (ret || set.gpio != 0)
+       if (ret || set.gpio != 0) {
                dev_err(gc->parent,
                        "Failed to set GPIO %u state (%d %x)\n", off, ret,
                        set.gpio);
+               return ret ? ret : -EIO;
+       }
+
+       return 0;
 }
 
 static int rpi_exp_gpio_probe(struct platform_device *pdev)
@@ -228,7 +232,7 @@ static int rpi_exp_gpio_probe(struct platform_device *pdev)
        rpi_gpio->gc.direction_output = rpi_exp_gpio_dir_out;
        rpi_gpio->gc.get_direction = rpi_exp_gpio_get_direction;
        rpi_gpio->gc.get = rpi_exp_gpio_get;
-       rpi_gpio->gc.set = rpi_exp_gpio_set;
+       rpi_gpio->gc.set_rv = rpi_exp_gpio_set;
        rpi_gpio->gc.can_sleep = true;
 
        return devm_gpiochip_add_data(dev, &rpi_gpio->gc, rpi_gpio);