summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpio/Kconfig16
-rw-r--r--drivers/gpio/gpio-uclass.c11
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)