aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Marko <robert.marko@sartura.hr>2022-05-06 20:01:39 +0200
committerStefan Roese <sr@denx.de>2022-05-17 06:44:06 +0200
commitf9ec791b5e24378b71590877499f8683d5f54dac (patch)
tree4162cf0f8322889c9f287f2415569032ab952af4
parentc7111e6ffd4b4f8fefd31044d2e042f910f54775 (diff)
downloadu-boot-f9ec791b5e24378b71590877499f8683d5f54dac.zip
u-boot-f9ec791b5e24378b71590877499f8683d5f54dac.tar.gz
u-boot-f9ec791b5e24378b71590877499f8683d5f54dac.tar.bz2
pinctrl: probe pinctrl drivers during post-bind
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>
-rw-r--r--drivers/pinctrl/pinctrl-uclass.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/pinctrl/pinctrl-uclass.c b/drivers/pinctrl/pinctrl-uclass.c
index 4462ed2..38ce2b5 100644
--- a/drivers/pinctrl/pinctrl-uclass.c
+++ b/drivers/pinctrl/pinctrl-uclass.c
@@ -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;