[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