]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
pinctrl-sunxi: don't call pinctrl_gpio_direction()
authorHans Verkuil <hverkuil-cisco@xs4all.nl>
Mon, 6 Dec 2021 13:16:48 +0000 (14:16 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Thu, 16 Dec 2021 02:44:08 +0000 (03:44 +0100)
Set the direction directly without calling pinctrl_gpio_direction().
This avoids the mutex_lock() calls in that function, which would
invalid the can_sleep = false.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Link: https://lore.kernel.org/r/20211206131648.1521868-4-hverkuil-cisco@xs4all.nl
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/sunxi/pinctrl-sunxi.c

index 862c84efb718f947e52ba930bfc3e1e300e9984f..80d6750c74a60e3cde2e7a6918e145fac42fe37f 100644 (file)
@@ -835,7 +835,9 @@ static const struct pinmux_ops sunxi_pmx_ops = {
 static int sunxi_pinctrl_gpio_direction_input(struct gpio_chip *chip,
                                        unsigned offset)
 {
-       return pinctrl_gpio_direction_input(chip->base + offset);
+       struct sunxi_pinctrl *pctl = gpiochip_get_data(chip);
+
+       return sunxi_pmx_gpio_set_direction(pctl->pctl_dev, NULL, offset, true);
 }
 
 static int sunxi_pinctrl_gpio_get(struct gpio_chip *chip, unsigned offset)
@@ -885,8 +887,10 @@ static void sunxi_pinctrl_gpio_set(struct gpio_chip *chip,
 static int sunxi_pinctrl_gpio_direction_output(struct gpio_chip *chip,
                                        unsigned offset, int value)
 {
+       struct sunxi_pinctrl *pctl = gpiochip_get_data(chip);
+
        sunxi_pinctrl_gpio_set(chip, offset, value);
-       return pinctrl_gpio_direction_output(chip->base + offset);
+       return sunxi_pmx_gpio_set_direction(pctl->pctl_dev, NULL, offset, false);
 }
 
 static int sunxi_pinctrl_gpio_of_xlate(struct gpio_chip *gc,