]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
pinctrl: probe pinctrl drivers during post-bind
authorRobert Marko <robert.marko@sartura.hr>
Fri, 6 May 2022 18:01:39 +0000 (20:01 +0200)
committerStefan Roese <sr@denx.de>
Tue, 17 May 2022 04:44:06 +0000 (06:44 +0200)
Currently, pinctrl drivers only get probed if pinconf is actually being
used, however on SoC-s like Armada 3720 pinctrl driver is a also the GPIO
driver.

So, if the pinctrl driver doesn't get probed GPIO-s won't get registered
and thus they cannot be used.

This is a problem on the Methode eDPU as it just uses SB pins as GPIO-s
and without them being registered networking won't work as it only has
one SFP slot and the TX disable GPIO is on the SB controller.

So, probe the pinctrl drivers using DM_FLAG_PROBE_AFTER_BIND like LED
uclass does.

Signed-off-by: Robert Marko <robert.marko@sartura.hr>
Reviewed-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Stefan Roese <sr@denx.de>
drivers/pinctrl/pinctrl-uclass.c

index 4462ed20e2d36941f83031b5add8fb0299270277..38ce2b5e0ad9cdb6917f1e5dc17da00d2e91a181 100644 (file)
@@ -402,6 +402,13 @@ static int __maybe_unused pinctrl_post_bind(struct udevice *dev)
 {
        const struct pinctrl_ops *ops = pinctrl_get_ops(dev);
 
+       /*
+        * Make sure that the pinctrl driver gets probed after binding
+        * as some pinctrl drivers also register the GPIO driver during
+        * probe, and if they are not probed GPIO-s are not registered.
+        */
+       dev_or_flags(dev, DM_FLAG_PROBE_AFTER_BIND);
+
        if (!ops) {
                dev_dbg(dev, "ops is not set.  Do not bind.\n");
                return -EINVAL;