summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>2026-04-07 16:27:58 +0300
committerBartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>2026-04-09 16:59:30 +0300
commitca13ab654064fee86d6e7c9e87d0af7789561509 (patch)
tree945475c062ab3a030c3f9db9af6a21fce1752765
parent5bcd451286176202f4ba84b89fd98c7ea74f33a2 (diff)
downloadlinux-ca13ab654064fee86d6e7c9e87d0af7789561509.tar.xz
gpio: swnode: defer probe on references to unregistered software nodes
fwnode_property_get_reference_args() now returns -ENOTCONN when called on a software node referencing another software node which has not yet been registered as a firmware node. It makes sense to defer probe in this situation as the node will most likely be registered later on and we'll be able to resolve the reference eventually. Change the behavior of swnode_find_gpio() to return -EPROBE_DEFER if the software node reference resolution returns -ENOTCONN. Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Link: https://patch.msgid.link/20260407-swnode-unreg-retcode-v4-2-1b2f0725eb9c@oss.qualcomm.com Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
-rw-r--r--drivers/gpio/gpiolib-swnode.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/gpio/gpiolib-swnode.c b/drivers/gpio/gpiolib-swnode.c
index 0d7f3f09a0b4..4374067f621e 100644
--- a/drivers/gpio/gpiolib-swnode.c
+++ b/drivers/gpio/gpiolib-swnode.c
@@ -93,6 +93,14 @@ struct gpio_desc *swnode_find_gpio(struct fwnode_handle *fwnode,
ret = swnode_gpio_get_reference(fwnode, propname, idx, &args);
if (ret == 0)
break;
+ if (ret == -ENOTCONN)
+ /*
+ * -ENOTCONN for a software node reference lookup means
+ * that a remote struct software_node exists but has
+ * not yet been registered as a firmware node. Defer
+ * until this happens.
+ */
+ return ERR_PTR(-EPROBE_DEFER);
}
if (ret) {
pr_debug("%s: can't parse '%s' property of node '%pfwP[%d]'\n",