On Thu, Jan 16, 2025 at 6:02 PM Valentin Caron <valentin.caron@xxxxxxxxxxx> wrote: > Cross case in pinctrl framework make impossible to an hogged pin and > another, not hogged, used within the same device-tree node. For example > with this simplified device-tree : > > &pinctrl { > pinctrl_pin_1: pinctrl-pin-1 { > pins = "dummy-pinctrl-pin"; > }; > }; > > &rtc { > pinctrl-names = "default" > pinctrl-0 = <&pinctrl_pin_1 &rtc_pin_1> > > rtc_pin_1: rtc-pin-1 { > pins = "dummy-rtc-pin"; > }; > }; > > "pinctrl_pin_1" configuration is never set. This produces this path in > the code: > > really_probe() > pinctrl_bind_pins() > | devm_pinctrl_get() > | pinctrl_get() > | create_pinctrl() > | pinctrl_dt_to_map() > | // Hog pin create an abort for all pins of the node > | ret = dt_to_map_one_config() > | | /* Do not defer probing of hogs (circular loop) */ > | | if (np_pctldev == p->dev->of_node) > | | return -ENODEV; > | if (ret) > | goto err > | > call_driver_probe() > stm32_rtc_probe() > pinctrl_enable() > pinctrl_claim_hogs() > create_pinctrl() > for_each_maps(maps_node, i, map) > // Not hog pin is skipped > if (pctldev && strcmp(dev_name(pctldev->dev), > map->ctrl_dev_name)) > continue; > > At the first call of create_pinctrl() the hogged pin produces an abort to > avoid a defer of hogged pins. All other pin configurations are trashed. > > At the second call, create_pinctrl is now called with pctldev parameter to > get hogs, but in this context only hogs are set. And other pins are > skipped. > > To handle this, do not produce an abort in the first call of > create_pinctrl(). Classic pin configuration will be set in > pinctrl_bind_pins() context. And the hogged pin configuration will be set > in pinctrl_claim_hogs() context. > > Signed-off-by: Valentin Caron <valentin.caron@xxxxxxxxxxx> It looks correct to me, so patch is applied for v6.15! Yours, Linus Walleij