[U-Boot] [PATCH 2/3] dm: gpio: Add methods for open drain setting
Simon Glass
sjg at chromium.org
Sun May 1 20:54:03 CEST 2016
Hi Mario,
On 26 April 2016 at 08:08, Mario Six <mario.six at gdsys.cc> wrote:
> Signed-off-by: Mario Six <mario.six at gdsys.cc>
Please always add a commit message.
> ---
> drivers/gpio/gpio-uclass.c | 30 ++++++++++++++++++++++++++++++
> include/asm-generic/gpio.h | 29 +++++++++++++++++++++++++++++
> 2 files changed, 59 insertions(+)
>
> diff --git a/drivers/gpio/gpio-uclass.c b/drivers/gpio/gpio-uclass.c
> index b58d4e6..16b9648 100644
> --- a/drivers/gpio/gpio-uclass.c
> +++ b/drivers/gpio/gpio-uclass.c
> @@ -352,6 +352,36 @@ int dm_gpio_set_value(const struct gpio_desc *desc, int value)
> return 0;
> }
>
> +int dm_gpio_get_open_drain(struct gpio_desc *desc)
> +{
> + struct dm_gpio_ops *ops = gpio_get_ops(desc->dev);
> + int ret;
> +
> + ret = check_reserved(desc, "get_open_drain");
> + if (ret)
> + return ret;
> +
> + if (ops->set_open_drain)
> + return ops->get_open_drain(desc->dev, desc->offset);
> + else
> + return 0;
-ENOSYS seems better here
> +}
> +
> +int dm_gpio_set_open_drain(struct gpio_desc *desc, int value)
> +{
> + struct dm_gpio_ops *ops = gpio_get_ops(desc->dev);
> + int ret;
> +
> + ret = check_reserved(desc, "set_open_drain");
> + if (ret)
> + return ret;
> +
> + if (ops->set_open_drain)
> + ops->set_open_drain(desc->dev, desc->offset, value);
Check return value
> +
> + return 0;
-ENOSYS here I think, or are you trying to suppress it?
> +}
> +
> int dm_gpio_set_dir_flags(struct gpio_desc *desc, ulong flags)
> {
> struct udevice *dev = desc->dev;
> diff --git a/include/asm-generic/gpio.h b/include/asm-generic/gpio.h
> index 68b5f0b..ba65080 100644
> --- a/include/asm-generic/gpio.h
> +++ b/include/asm-generic/gpio.h
> @@ -241,6 +241,8 @@ struct dm_gpio_ops {
> int value);
> int (*get_value)(struct udevice *dev, unsigned offset);
> int (*set_value)(struct udevice *dev, unsigned offset, int value);
> + int (*get_open_drain)(struct udevice *dev, unsigned offset);
> + int (*set_open_drain)(struct udevice *dev, unsigned offset, int value);
> /**
> * get_function() Get the GPIO function
> *
> @@ -541,6 +543,33 @@ int dm_gpio_get_value(const struct gpio_desc *desc);
> int dm_gpio_set_value(const struct gpio_desc *desc, int value);
>
> /**
> + * dm_gpio_get_open_drain() - Check if open-drain-mode of a GPIO is active
> + *
> + * This checks if open-drain-mode for a GPIO is enabled or not. This method is
> + * optional; if the driver does not support it, nothing happens when the method
> + * is called.
Can you include a brief description of what open drain is?
> + *
> + * @desc: GPIO description containing device, offset and flags,
> + * previously returned by gpio_request_by_name()
> + * @return Value of open drain mode for GPIO (0 for inactive, 1 for active) or
> + * -ve on error
> + */
> +int dm_gpio_get_open_drain(struct gpio_desc *desc);
> +
> +/**
> + * dm_gpio_set_open_drain() - Switch open-drain-mode of a GPIO on or off
> + *
> + * This enables or disables open-drain-mode for a GPIO. This method is
> + * optional; if the driver does not support it, nothing happens when the method
> + * is called.
> + *
> + * @desc: GPIO description containing device, offset and flags,
> + * previously returned by gpio_request_by_name()
> + * @return 0 if OK, -ve on error
> + */
> +int dm_gpio_set_open_drain(struct gpio_desc *desc, int value);
> +
> +/**
> * dm_gpio_set_dir() - Set the direction for a GPIO
> *
> * This sets up the direction according tot the provided flags. It will do
> --
> 2.7.0.GIT
>
Regards,
Simon
More information about the U-Boot
mailing list