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

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

Hi Heiko,
On Wed, 30 Oct 2019 at 04:29, Heiko Schocher hs@denx.de wrote:
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(+)
Thanks for making this so clear.
I have been wondering whether this should be enabled by a CONFIG but in fact it doesn't add much and the lookup function is only called by those who are not using the device-tree phandle mechanism.
But I think it needs two changes: - Move code into a separate function called from dm_gpio_lookup_name() - Add a sandbox test for both cases
Regards, Simon

Hello Simon,
Am 10.12.2019 um 13:39 schrieb Simon Glass:
Hi Heiko,
On Wed, 30 Oct 2019 at 04:29, Heiko Schocher hs@denx.de wrote:
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(+)
Thanks for making this so clear.
I have been wondering whether this should be enabled by a CONFIG but in fact it doesn't add much and the lookup function is only called by those who are not using the device-tree phandle mechanism. > But I think it needs two changes:
- Move code into a separate function called from dm_gpio_lookup_name()
done.
- Add a sandbox test for both cases
Do you mean to add tests in "test/dm/gpio.c" ?
Thanks!
bye, Heiko

Hi Heiko,
On Tue, 14 Jan 2020 at 02:29, Heiko Schocher hs@denx.de wrote:
Hello Simon,
Am 10.12.2019 um 13:39 schrieb Simon Glass:
Hi Heiko,
On Wed, 30 Oct 2019 at 04:29, Heiko Schocher hs@denx.de wrote:
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(+)
Thanks for making this so clear.
I have been wondering whether this should be enabled by a CONFIG but in fact it doesn't add much and the lookup function is only called by those who are not using the device-tree phandle mechanism. > But I think it needs two changes:
- Move code into a separate function called from dm_gpio_lookup_name()
done.
- Add a sandbox test for both cases
Do you mean to add tests in "test/dm/gpio.c" ?
Yes that's right.
Regards, SImon
participants (2)
-
Heiko Schocher
-
Simon Glass