Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+8
+8
drivers/gpio/gpiolib-swnode.c
··· 93 93 ret = swnode_gpio_get_reference(fwnode, propname, idx, &args); 94 94 if (ret == 0) 95 95 break; 96 + if (ret == -ENOTCONN) 97 + /* 98 + * -ENOTCONN for a software node reference lookup means 99 + * that a remote struct software_node exists but has 100 + * not yet been registered as a firmware node. Defer 101 + * until this happens. 102 + */ 103 + return ERR_PTR(-EPROBE_DEFER); 96 104 } 97 105 if (ret) { 98 106 pr_debug("%s: can't parse '%s' property of node '%pfwP[%d]'\n",