From: Rasmus Villemoes Date: Tue, 4 Nov 2025 17:44:57 +0000 (+0100) Subject: gpio: search gpio-line-names property in dm_gpio_lookup_name X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c92c3768b61aa84dd6adc214308d69814a8c0af0;p=thirdparty%2Fu-boot.git gpio: search gpio-line-names property in dm_gpio_lookup_name In scripts as well as interactively, it's much nicer to be able to refer to GPIOs via their names defined in the device tree property "gpio-line-names", instead of the rather opaque names derived from the bank name with a _xx suffix. E.g. gpio read factory_reset FACTORY_RESET if test $factory_reset = 1 ; then ... versus gpio read factory_reset gpio@481ac000_16 if test $factory_reset = 1 ; then ... This is also consistent with the move on the linux/userspace side towards using line names instead of legacy chip+offset or the even more legacy global gpio numbering in sysfs. As dev_read_stringlist_search() depends on both OF_CONTROL and OF_LIBFDT (which matters for the SPL case), we need some .config conditional. However, it only adds about ~50 bytes of code to U-Boot proper, and dm_gpio_lookup_name() most often ends up being GC'ed for SPL, thus adds no overhead there, so for now make it a hidden symbol which is merely a convenient shorthand for CONFIG_IS_ENABLED(OF_CONTROL) && CONFIG_IS_ENABLED(OF_LIBFDT). Signed-off-by: Rasmus Villemoes Reviewed-by: Heiko Schocher --- diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig index db077e472a8..a47c127d98c 100644 --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig @@ -97,6 +97,22 @@ config SPL_DM_GPIO_LOOKUP_LABEL different gpios on different hardware versions for the same functionality in board code. +config DM_GPIO_LOOKUP_LINE_NAME + def_bool y + depends on OF_CONTROL && OF_LIBFDT + help + This option enables specifying a GPIO by referring to its + name as defined by the "gpio-line-names" property in the + gpio controller's devicetree node. + +config SPL_DM_GPIO_LOOKUP_LINE_NAME + def_bool y + depends on SPL_OF_CONTROL && SPL_OF_LIBFDT + help + This option enables specifying a GPIO by referring to its + name as defined by the "gpio-line-names" property in the + gpio controller's devicetree node. + config ADI_GPIO bool "ADI GPIO driver" depends on DM_GPIO && ARCH_SC5XX diff --git a/drivers/gpio/gpio-uclass.c b/drivers/gpio/gpio-uclass.c index 3d9f8b32b8d..6f52fdf4ef4 100644 --- a/drivers/gpio/gpio-uclass.c +++ b/drivers/gpio/gpio-uclass.c @@ -164,7 +164,7 @@ int dm_gpio_lookup_name(const char *name, struct gpio_desc *desc) for (uclass_first_device(UCLASS_GPIO, &dev); dev; uclass_next_device(&dev)) { - int len; + int len, ret; uc_priv = dev_get_uclass_priv(dev); if (numeric != -1) { @@ -188,6 +188,15 @@ int dm_gpio_lookup_name(const char *name, struct gpio_desc *desc) */ if (!dm_gpio_lookup_label(name, uc_priv, &offset)) break; + + /* Also search the "gpio-line-names" property in DT for a match. */ + if (CONFIG_IS_ENABLED(DM_GPIO_LOOKUP_LINE_NAME)) { + ret = dev_read_stringlist_search(dev, "gpio-line-names", name); + if (ret >= 0) { + offset = ret; + break; + } + } } if (!dev)