gpio: swnode: remove deprecated lookup mechanism

GPIO software node lookup should rely exclusively on matching the
addresses of the referenced firmware nodes. Commit e5d527be7e ("gpio:
swnode: don't use the swnode's name as the key for GPIO lookup") tried to
enforce this but had to be reverted: it broke existing users who abused
the software node mechanism by creating "dummy" software nodes named
after the device they want to get GPIOs from, without ever attaching them
to the actual GPIO devices. Those users relied on GPIOLIB matching the
label of the GPIO controller against the name of the software node rather
than on a real firmware node link.

All such users have now been coverted to using attached software nodes
via the fwnode address lookup path and the kernel documentation has been
updated to recommend it as the correct approach. This allows us to remove
the old behavior.

This will allow us to leverage the upcoming support for fw_devlink for
software nodes in GPIO core.

Reviewed-by: Linus Walleij <linusw@kernel.org>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Link: https://patch.msgid.link/20260702-gpio-swnode-drop-label-matching-v2-1-0838349eb644@oss.qualcomm.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
This commit is contained in:
Bartosz Golaszewski 2026-07-02 09:51:00 +02:00
parent 8fe6fa0f22
commit 611fd6cfe1

View File

@ -26,7 +26,6 @@
static struct gpio_device *swnode_get_gpio_device(struct fwnode_handle *fwnode)
{
const struct software_node *gdev_node;
struct gpio_device *gdev;
gdev_node = to_software_node(fwnode);
if (!gdev_node)
@ -41,27 +40,7 @@ static struct gpio_device *swnode_get_gpio_device(struct fwnode_handle *fwnode)
return ERR_PTR(-ENOENT);
fwnode_lookup:
gdev = gpio_device_find_by_fwnode(fwnode);
if (!gdev && gdev_node && gdev_node->name)
/*
* FIXME: We shouldn't need to compare the GPIO controller's
* label against the software node that is supposedly attached
* to it. However there are currently GPIO users that - knowing
* the expected label of the GPIO chip whose pins they want to
* control - set up dummy software nodes named after those GPIO
* controllers, which aren't actually attached to them. In this
* case gpio_device_find_by_fwnode() will fail as no device on
* the GPIO bus is actually associated with the fwnode we're
* looking for.
*
* As a fallback: continue checking the label if we have no
* match. However, the situation described above is an abuse
* of the software node API and should be phased out and the
* following line - eventually removed.
*/
gdev = gpio_device_find_by_label(gdev_node->name);
return gdev ?: ERR_PTR(-EPROBE_DEFER);
return gpio_device_find_by_fwnode(fwnode) ?: ERR_PTR(-EPROBE_DEFER);
}
static int swnode_gpio_get_reference(const struct fwnode_handle *fwnode,