Message ID | 20220923145141.3463754-3-foss+kernel@0leil.net (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | fix gpio-sysfs/libgpiod for rockchip | expand |
Am Freitag, 23. September 2022, 16:51:41 CEST schrieb Quentin Schulz: > From: Quentin Schulz <quentin.schulz@theobroma-systems.com> > > Before the split of gpio and pinctrl sections in their own driver, > rockchip_set_mux was called in pinmux_ops.gpio_set_direction for > configuring a pin in its GPIO function. > > This is essential for cases where pinctrl is "bypassed" by gpio > consumers otherwise the GPIO function is not configured for the pin and > it does not work. Such was the case for the sysfs/libgpiod userspace > GPIO handling. > > Let's call pinctrl_gpio_direction_input/output when setting the > direction of a GPIO so that the pinctrl core requests from the rockchip > pinctrl driver to put the pin in its GPIO function. > > Fixes: 9ce9a02039de ("pinctrl/rockchip: drop the gpio related codes") > Fixes: 936ee2675eee ("gpio/rockchip: add driver for rockchip gpio") > Cc: stable@vger.kernel.org > Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com> cool, thanks a lot for reimplementing this Reviewed-by: Heiko Stuebner <heiko@sntech.de>
diff --git a/drivers/gpio/gpio-rockchip.c b/drivers/gpio/gpio-rockchip.c index bb50335239ac8..b83913e1ee49e 100644 --- a/drivers/gpio/gpio-rockchip.c +++ b/drivers/gpio/gpio-rockchip.c @@ -156,6 +156,12 @@ static int rockchip_gpio_set_direction(struct gpio_chip *chip, unsigned long flags; u32 data = input ? 0 : 1; + + if (input) + pinctrl_gpio_direction_input(bank->pin_base + offset); + else + pinctrl_gpio_direction_output(bank->pin_base + offset); + raw_spin_lock_irqsave(&bank->slock, flags); rockchip_gpio_writel_bit(bank, offset, data, bank->gpio_regs->port_ddr); raw_spin_unlock_irqrestore(&bank->slock, flags);