Message ID | 20220923145141.3463754-2-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:40 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 re-implement the pinmux_ops.gpio_set_direction callback so that > the gpio subsystem can request from the pinctrl driver to put the pin in > its GPIO function. > > Fixes: 9ce9a02039de ("pinctrl/rockchip: drop the gpio related codes") > Cc: stable@vger.kernel.org > Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com> Reviewed-by: Heiko Stuebner <heiko@sntech.de>
diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c index 32e41395fc768..c84bd0e1ce5a6 100644 --- a/drivers/pinctrl/pinctrl-rockchip.c +++ b/drivers/pinctrl/pinctrl-rockchip.c @@ -2393,11 +2393,24 @@ static int rockchip_pmx_set(struct pinctrl_dev *pctldev, unsigned selector, return 0; } +static int rockchip_pmx_gpio_set_direction(struct pinctrl_dev *pctldev, + struct pinctrl_gpio_range *range, + unsigned offset, + bool input) +{ + struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev); + struct rockchip_pin_bank *bank; + + bank = pin_to_bank(info, offset); + return rockchip_set_mux(bank, offset - bank->pin_base, RK_FUNC_GPIO); +} + static const struct pinmux_ops rockchip_pmx_ops = { .get_functions_count = rockchip_pmx_get_funcs_count, .get_function_name = rockchip_pmx_get_func_name, .get_function_groups = rockchip_pmx_get_groups, .set_mux = rockchip_pmx_set, + .gpio_set_direction = rockchip_pmx_gpio_set_direction, }; /*