]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
gpio: gpio-by-pinctrl: Apply initial value in direction output wrapper
authorAlex Tran <alex.tran@oss.qualcomm.com>
Fri, 24 Jul 2026 16:42:28 +0000 (09:42 -0700)
committerBartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Mon, 27 Jul 2026 11:14:30 +0000 (13:14 +0200)
After successfully configuring gpio pin as output, set the
requested initial output value via the existing gpio set
wrapper, so that the pin is not left at its previous level.

Fixes: 7671f4949a6c ("gpio: gpio-by-pinctrl: add pinctrl based generic GPIO driver")
Signed-off-by: Alex Tran <alex.tran@oss.qualcomm.com>
Reviewed-by: Linus Walleij <linusw@kernel.org>
Link: https://patch.msgid.link/20260724-gpio-pinctrl-output-set-val-v2-1-cad55d025636@oss.qualcomm.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
drivers/gpio/gpio-by-pinctrl.c

index 7d7c48ce5163af9bb9e5e20d75fc71862a7fac2e..fb8440acb31d9007a8fb6e8ad6ef274f10509893 100644 (file)
@@ -27,12 +27,6 @@ static int pin_control_gpio_get_direction(struct gpio_chip *gc, unsigned int off
        return GPIO_LINE_DIRECTION_IN;
 }
 
-static int pin_control_gpio_direction_output(struct gpio_chip *chip,
-                                            unsigned int offset, int val)
-{
-       return pinctrl_gpio_direction_output(chip, offset);
-}
-
 static int pin_control_gpio_get(struct gpio_chip *chip, unsigned int offset)
 {
        unsigned long config;
@@ -55,6 +49,18 @@ static int pin_control_gpio_set(struct gpio_chip *chip, unsigned int offset,
        return pinctrl_gpio_set_config(chip, offset, config);
 }
 
+static int pin_control_gpio_direction_output(struct gpio_chip *chip,
+                                            unsigned int offset, int val)
+{
+       int ret;
+
+       ret = pinctrl_gpio_direction_output(chip, offset);
+       if (ret)
+               return ret;
+
+       return pin_control_gpio_set(chip, offset, val);
+}
+
 static int pin_control_gpio_probe(struct platform_device *pdev)
 {
        struct device *dev = &pdev->dev;