Hi Etienne, thanks for your patch! On Thu, Apr 11, 2024 at 5:35 PM Etienne Buira <etienne.buira@xxxxxxx> wrote: > Do not call dev_err when gpio,syscon-dev is not set albeit unneeded. > gpio-syscon is used with rk3328 chip, but this iomem region is > documented in > Documentation/devicetree/bindings/gpio/rockchip,rk3328-grf-gpio.yaml and > does not look like to require gpio,syscon-dev setting. > > Signed-off-by: Etienne Buira <etienne.buira@xxxxxxx> > X-Prefers: kind explanations over rotten tomatoes If you look in drivers/gpio/gpio-syscon.c you see this: priv->syscon = syscon_regmap_lookup_by_phandle(np, "gpio,syscon-dev"); if (IS_ERR(priv->syscon) && np->parent) priv->syscon = syscon_node_to_regmap(np->parent); So the driver will attempt to grab the syscon from the parent if it can't be located from a gpio,syscon-dev node. But it's not optional, look in arch/arm64/boot/dts/rockchip/rk3328.dtsi: grf: syscon@ff100000 { compatible = "rockchip,rk3328-grf", "syscon", "simple-mfd"; reg = <0x0 0xff100000 0x0 0x1000>; (...) grf_gpio: gpio { compatible = "rockchip,rk3328-grf-gpio"; gpio-controller; #gpio-cells = <2>; }; So indeed the parent is a sycon, and syscon_node_to_regmap(np->parent) will be used to populate priv->syscon on RK3328. So what you could do insteaf of the kludge is something like: bool has_parent_syscon = false; priv->syscon = syscon_regmap_lookup_by_phandle(np, "gpio,syscon-dev"); if (IS_ERR(priv->syscon) && np->parent) { priv->syscon = syscon_regmap_lookup_by_phandle(np, "gpio,syscon-dev"); has_parent_syscon = true; } if (IS_ERR(priv->syscon)) return PTR_ERR(priv->syscon); Then when you get to the code you disable for the flag instead of: if (!(priv->data->flags & GPIO_SYSCON_FEAT_NODEV)) { (...) instead do: if (!has_parent_syscon) { (...) What do you think about this? Yours, Linus Walleij