dm: gpio: Rename get_dir_flags() method to get_flags()

It is more useful to be able to read all the flags, not just the direction
ones. In fact this is what the STM32 driver does. Update the method name
to reflect this.

Tweak the docs a little and use 'flagsp' as the return argument, as is
common in driver model, to indicate it returns a value.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Patrick Delaunay <patrick.delaunay@foss.st.com>

Reviewed-by: Pratyush Yadav <p.yadav@ti.com>
This commit is contained in:
Simon Glass 2021-02-04 21:21:56 -07:00 committed by Tom Rini
parent 13979fc446
commit 9648789e26
5 changed files with 33 additions and 32 deletions

View file

@ -683,39 +683,39 @@ int dm_gpio_set_dir(struct gpio_desc *desc)
return _dm_gpio_set_flags(desc, desc->flags);
}
int dm_gpio_get_dir_flags(struct gpio_desc *desc, ulong *flags)
int dm_gpio_get_dir_flags(struct gpio_desc *desc, ulong *flagsp)
{
struct udevice *dev = desc->dev;
int ret, value;
struct dm_gpio_ops *ops = gpio_get_ops(dev);
ulong dir_flags;
ulong flags;
ret = check_reserved(desc, "get_dir_flags");
ret = check_reserved(desc, "get_flags");
if (ret)
return ret;
/* GPIOD_ are directly provided by driver except GPIOD_ACTIVE_LOW */
if (ops->get_dir_flags) {
ret = ops->get_dir_flags(dev, desc->offset, &dir_flags);
if (ops->get_flags) {
ret = ops->get_flags(dev, desc->offset, &flags);
if (ret)
return ret;
/* GPIOD_ACTIVE_LOW is saved in desc->flags */
value = dir_flags & GPIOD_IS_OUT_ACTIVE ? 1 : 0;
value = flags & GPIOD_IS_OUT_ACTIVE ? 1 : 0;
if (desc->flags & GPIOD_ACTIVE_LOW)
value = !value;
dir_flags &= ~(GPIOD_ACTIVE_LOW | GPIOD_IS_OUT_ACTIVE);
dir_flags |= (desc->flags & GPIOD_ACTIVE_LOW);
flags &= ~(GPIOD_ACTIVE_LOW | GPIOD_IS_OUT_ACTIVE);
flags |= (desc->flags & GPIOD_ACTIVE_LOW);
if (value)
dir_flags |= GPIOD_IS_OUT_ACTIVE;
flags |= GPIOD_IS_OUT_ACTIVE;
} else {
dir_flags = desc->flags;
flags = desc->flags;
/* only GPIOD_IS_OUT_ACTIVE is provided by uclass */
dir_flags &= ~GPIOD_IS_OUT_ACTIVE;
flags &= ~GPIOD_IS_OUT_ACTIVE;
if ((desc->flags & GPIOD_IS_OUT) && _gpio_get_value(desc))
dir_flags |= GPIOD_IS_OUT_ACTIVE;
flags |= GPIOD_IS_OUT_ACTIVE;
}
*flags = dir_flags;
*flagsp = flags;
return 0;
}
@ -1310,8 +1310,8 @@ static int gpio_post_bind(struct udevice *dev)
ops->xlate += gd->reloc_off;
if (ops->set_flags)
ops->set_flags += gd->reloc_off;
if (ops->get_dir_flags)
ops->get_dir_flags += gd->reloc_off;
if (ops->get_flags)
ops->get_flags += gd->reloc_off;
reloc_done++;
}

View file

@ -199,11 +199,11 @@ static int sb_gpio_set_flags(struct udevice *dev, unsigned int offset,
return 0;
}
static int sb_gpio_get_dir_flags(struct udevice *dev, unsigned int offset,
ulong *flags)
static int sb_gpio_get_flags(struct udevice *dev, unsigned int offset,
ulong *flagsp)
{
debug("%s: offset:%u\n", __func__, offset);
*flags = *get_gpio_dir_flags(dev, offset);
*flagsp = *get_gpio_dir_flags(dev, offset);
return 0;
}
@ -273,7 +273,7 @@ static const struct dm_gpio_ops gpio_sandbox_ops = {
.get_function = sb_gpio_get_function,
.xlate = sb_gpio_xlate,
.set_flags = sb_gpio_set_flags,
.get_dir_flags = sb_gpio_get_dir_flags,
.get_flags = sb_gpio_get_flags,
#if CONFIG_IS_ENABLED(ACPIGEN)
.get_acpi = sb_gpio_get_acpi,
#endif

View file

@ -223,8 +223,8 @@ static int stm32_gpio_set_flags(struct udevice *dev, unsigned int offset,
return 0;
}
static int stm32_gpio_get_dir_flags(struct udevice *dev, unsigned int offset,
ulong *flags)
static int stm32_gpio_get_flags(struct udevice *dev, unsigned int offset,
ulong *flagsp)
{
struct stm32_gpio_priv *priv = dev_get_priv(dev);
struct stm32_gpio_regs *regs = priv->regs;
@ -259,7 +259,7 @@ static int stm32_gpio_get_dir_flags(struct udevice *dev, unsigned int offset,
default:
break;
}
*flags = dir_flags;
*flagsp = dir_flags;
return 0;
}
@ -271,7 +271,7 @@ static const struct dm_gpio_ops gpio_stm32_ops = {
.set_value = stm32_gpio_set_value,
.get_function = stm32_gpio_get_function,
.set_flags = stm32_gpio_set_flags,
.get_dir_flags = stm32_gpio_get_dir_flags,
.get_flags = stm32_gpio_get_flags,
};
static int gpio_stm32_probe(struct udevice *dev)

View file

@ -199,8 +199,8 @@ static int stmfx_gpio_set_flags(struct udevice *dev, unsigned int offset,
return ret;
}
static int stmfx_gpio_get_dir_flags(struct udevice *dev, unsigned int offset,
ulong *flags)
static int stmfx_gpio_get_flags(struct udevice *dev, unsigned int offset,
ulong *flagsp)
{
ulong dir_flags = 0;
int ret;
@ -233,7 +233,7 @@ static int stmfx_gpio_get_dir_flags(struct udevice *dev, unsigned int offset,
dir_flags |= GPIOD_PULL_DOWN;
}
}
*flags = dir_flags;
*flagsp = dir_flags;
return 0;
}
@ -267,7 +267,7 @@ static const struct dm_gpio_ops stmfx_gpio_ops = {
.direction_input = stmfx_gpio_direction_input,
.direction_output = stmfx_gpio_direction_output,
.set_flags = stmfx_gpio_set_flags,
.get_dir_flags = stmfx_gpio_get_dir_flags,
.get_flags = stmfx_gpio_get_flags,
};
U_BOOT_DRIVER(stmfx_gpio) = {

View file

@ -333,19 +333,20 @@ struct dm_gpio_ops {
int (*set_flags)(struct udevice *dev, unsigned int offset, ulong flags);
/**
* get_dir_flags() - Get GPIO dir flags
* get_flags() - Get GPIO flags
*
* This function return the GPIO direction flags used.
* This function return the GPIO flags used. It should read this from
* the hardware directly.
*
* This method is optional.
*
* @dev: GPIO device
* @offset: GPIO offset within that device
* @flags: place to put the used direction flags by GPIO
* @flagsp: place to put the current flags value
* @return 0 if OK, -ve on error
*/
int (*get_dir_flags)(struct udevice *dev, unsigned int offset,
ulong *flags);
int (*get_flags)(struct udevice *dev, unsigned int offset,
ulong *flagsp);
#if CONFIG_IS_ENABLED(ACPIGEN)
/**