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 <sjg@chromium.org>
This commit is contained in:
parent
ce22c5bbee
commit
32ec159844
@ -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 = dev;
|
||||
*devp = NULL;
|
||||
ret = dm_gpio_lookup_name(name, &desc);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (devp)
|
||||
*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;
|
||||
}
|
||||
|
@ -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
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user