
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@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; } }