diff mbox series

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

Message ID 20191030102921.3640496-1-hs@denx.de
State Changes Requested
Delegated to: Simon Glass
Headers show
Series [U-Boot] gpio: search for gpio label if gpio is not found through bank name | expand

Commit Message

Heiko Schocher Oct. 30, 2019, 10:29 a.m. UTC
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(+)

Comments

Simon Glass Dec. 10, 2019, 12:39 p.m. UTC | #1
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
Heiko Schocher Jan. 14, 2020, 9:29 a.m. UTC | #2
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
Simon Glass Jan. 30, 2020, 2:18 a.m. UTC | #3
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
diff mbox series

Patch

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