[U-Boot] [PATCH] gpio: search for gpio label if gpio is not found through bank name

Heiko Schocher hs at denx.de
Wed Oct 30 10:29:21 UTC 2019


dm_gpio_lookup_name() searches for a gpio through
the bank name. But we have also gpio labels, and it
makes sense to search for a gpio also in the labels
we have defined, if no gpio is found through the
bank name definition.

This is useful for example if you have a wp pin on
different gpios on different board versions.

If dm_gpio_lookup_name() searches also for the gpio labels,
you can give the gpio an unique label name and search
for this label, and do not need to differ between
board revisions.

Signed-off-by: Heiko Schocher <hs at denx.de>
---

Example on the aristainetos board:

=> gpio clear wp_spi_nor.gpio-hog
gpio: pin wp_spi_nor.gpio-hog (gpio 47) value is 0
=>

before this patch, you need to know where your
pin is:

=> gpio clear GPIO2_15
gpio: pin GPIO2_15 (gpio 47) value is 0
=>

travis build:
https://travis-ci.org/hsdenx/u-boot-test/builds/604290746

 drivers/gpio/gpio-uclass.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/drivers/gpio/gpio-uclass.c b/drivers/gpio/gpio-uclass.c
index 90fbed455b..755744bc00 100644
--- a/drivers/gpio/gpio-uclass.c
+++ b/drivers/gpio/gpio-uclass.c
@@ -79,6 +79,26 @@ int dm_gpio_lookup_name(const char *name, struct gpio_desc *desc)
 		if (!strncasecmp(name, uc_priv->bank_name, len)) {
 			if (!strict_strtoul(name + len, 10, &offset))
 				break;
+		} else {
+			/*
+			 * if we did not found a gpio through its bank
+			 * name, we search for a valid gpio label.
+			 */
+			bool found = 0;
+
+			len = strlen(name);
+			for (offset = 0; offset < uc_priv->gpio_count;
+			     offset++) {
+				if (!uc_priv->name[offset])
+					continue;
+				if (!strncmp(name, uc_priv->name[offset],
+					     len)) {
+					found = 1;
+					break;
+				}
+			}
+			if (found)
+				break;
 		}
 	}
 
-- 
2.21.0



More information about the U-Boot mailing list