gpio: add function _dm_gpio_set_dir_flags

Introduce the function _dm_gpio_set_dir_flags to set dir flags
without check if the GPIO is reserved.

Separate the reserved check for "set_dir" and "set_dir_flags".

This patch is a preliminary step to add new ops.

Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Patrick Delaunay 2020-01-13 11:35:03 +01:00 committed by Tom Rini
parent 8a9140cd38
commit 788ea83412
1 changed files with 25 additions and 13 deletions

View File

@ -510,15 +510,11 @@ int dm_gpio_set_value(const struct gpio_desc *desc, int value)
return 0;
}
int dm_gpio_set_dir_flags(struct gpio_desc *desc, ulong flags)
static int _dm_gpio_set_dir_flags(struct gpio_desc *desc, ulong flags)
{
struct udevice *dev = desc->dev;
struct dm_gpio_ops *ops = gpio_get_ops(dev);
int ret;
ret = check_reserved(desc, "set_dir");
if (ret)
return ret;
int ret = 0;
if (flags & GPIOD_IS_OUT) {
int value = flags & GPIOD_IS_OUT_ACTIVE ? 1 : 0;
@ -529,20 +525,36 @@ int dm_gpio_set_dir_flags(struct gpio_desc *desc, ulong flags)
} else if (flags & GPIOD_IS_IN) {
ret = ops->direction_input(dev, desc->offset);
}
return ret;
}
int dm_gpio_set_dir_flags(struct gpio_desc *desc, ulong flags)
{
int ret;
ret = check_reserved(desc, "set_dir_flags");
if (ret)
return ret;
/*
* Update desc->flags here, so that GPIO_ACTIVE_LOW is honoured in
* futures
*/
desc->flags = flags;
return 0;
ret = _dm_gpio_set_dir_flags(desc, flags);
/* update the descriptor flags */
if (ret)
desc->flags = flags;
return ret;
}
int dm_gpio_set_dir(struct gpio_desc *desc)
{
return dm_gpio_set_dir_flags(desc, desc->flags);
int ret;
ret = check_reserved(desc, "set_dir");
if (ret)
return ret;
return _dm_gpio_set_dir_flags(desc, desc->flags);
}
/**