From: Simon Glass Date: Tue, 23 Jun 2015 21:38:40 +0000 (-0600) Subject: dm: gpio: Add dm_gpio_lookup_name() to look up a GPIO name X-Git-Tag: v2015.10-rc1~165 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=32ec159844d7b76f199b07412dd054ad842bdd58;p=u-boot dm: gpio: Add dm_gpio_lookup_name() to look up a GPIO name Provide a driver-model function to look up a GPIO name. Make the standard function use it. Signed-off-by: Simon Glass --- diff --git a/drivers/gpio/gpio-uclass.c b/drivers/gpio/gpio-uclass.c index bf982b9d19..c6fd5802f5 100644 --- a/drivers/gpio/gpio-uclass.c +++ b/drivers/gpio/gpio-uclass.c @@ -48,8 +48,7 @@ static int gpio_to_device(unsigned int gpio, struct gpio_desc *desc) return ret ? ret : -ENOENT; } -int gpio_lookup_name(const char *name, struct udevice **devp, - unsigned int *offsetp, unsigned int *gpiop) +int dm_gpio_lookup_name(const char *name, struct gpio_desc *desc) { struct gpio_dev_priv *uc_priv = NULL; struct udevice *dev; @@ -57,8 +56,6 @@ int gpio_lookup_name(const char *name, struct udevice **devp, int numeric; int ret; - if (devp) - *devp = NULL; numeric = isdigit(*name) ? simple_strtoul(name, NULL, 10) : -1; for (ret = uclass_first_device(UCLASS_GPIO, &dev); dev; @@ -84,12 +81,33 @@ int gpio_lookup_name(const char *name, struct udevice **devp, if (!dev) return ret ? ret : -EINVAL; + desc->dev = dev; + desc->offset = offset; + + return 0; +} + +int gpio_lookup_name(const char *name, struct udevice **devp, + unsigned int *offsetp, unsigned int *gpiop) +{ + struct gpio_desc desc; + int ret; + + if (devp) + *devp = NULL; + ret = dm_gpio_lookup_name(name, &desc); + if (ret) + return ret; + if (devp) - *devp = dev; + *devp = desc.dev; if (offsetp) - *offsetp = offset; - if (gpiop) - *gpiop = uc_priv->gpio_base + offset; + *offsetp = desc.offset; + if (gpiop) { + struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(desc.dev); + + *gpiop = uc_priv->gpio_base + desc.offset; + } return 0; } diff --git a/include/asm-generic/gpio.h b/include/asm-generic/gpio.h index de91e57efc..b1cf95c687 100644 --- a/include/asm-generic/gpio.h +++ b/include/asm-generic/gpio.h @@ -321,6 +321,19 @@ struct gpio_dev_priv { */ const char *gpio_get_bank_info(struct udevice *dev, int *offset_count); +/** + * dm_gpio_lookup_name() - Look up a named GPIO and return its description + * + * The name of a GPIO is typically its bank name followed by a number from 0. + * For example A0 is the first GPIO in bank A. Each bank is a separate driver + * model device. + * + * @name: Name to look up + * @desc: Returns description, on success + * @return 0 if OK, -ve on error + */ +int dm_gpio_lookup_name(const char *name, struct gpio_desc *desc); + /** * gpio_lookup_name - Look up a GPIO name and return its details *