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 |
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
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; } }
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(+)