From 0fcc8c97ea073aac4ad1e1d8770f1ea2204e6487 Mon Sep 17 00:00:00 2001 From: Michael Riesch Date: Fri, 14 Jan 2022 09:47:56 +0100 Subject: pinctrl: rockchip: use alias rather than full of name We've so far relied on GPIO controllers being named "gpioX", while the binding mandates gpio controllers being just called "gpio". This already broke rk3288 support and rk3568.dtsi upstream also differs from the version in barebox' arch/arm/dts in that regard. Instead, do like Linux does and use the alias to match the controllers to the GPIO banks with a fallback to probe order. Fixes: 3f2f5980d517 ("dts: update to v5.16-rc1") Signed-off-by: Michael Riesch [afa: drop strncmp in favor of id comparison, reword commit message] Signed-off-by: Ahmad Fatoum Link: https://lore.barebox.org/20220114084757.311697-1-a.fatoum@pengutronix.de Signed-off-by: Sascha Hauer --- drivers/pinctrl/pinctrl-rockchip.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c index 5cf77c58b2..ea748b6004 100644 --- a/drivers/pinctrl/pinctrl-rockchip.c +++ b/drivers/pinctrl/pinctrl-rockchip.c @@ -877,18 +877,24 @@ static struct rockchip_pin_ctrl *rockchip_pinctrl_get_soc_data( struct rockchip_pin_bank *bank; char *name; int grf_offs, pmu_offs, drv_grf_offs, drv_pmu_offs, i, j; + int gpio = 0; match = of_match_node(rockchip_pinctrl_dt_match, node); ctrl = (struct rockchip_pin_ctrl *)match->data; for_each_child_of_node(node, np) { + int id; + if (!of_find_property(np, "gpio-controller", NULL)) continue; + id = of_alias_get_id(np, "gpio"); + if (id < 0) + id = gpio++; + bank = ctrl->pin_banks; for (i = 0; i < ctrl->nr_banks; ++i, ++bank) { - name = bank->name; - if (!strncmp(name, np->name, strlen(name))) { + if (bank->bank_num == id) { bank->of_node = np; if (!rockchip_get_bank_data(bank, dev)) bank->valid = true; -- cgit v1.2.3