diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/gpio/Kconfig | 16 | ||||
| -rw-r--r-- | drivers/gpio/gpio-uclass.c | 11 |
2 files changed, 26 insertions, 1 deletions
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 7559b8dc7e2..38151ef1bee 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) |
