From: Neil Armstrong <narmstrong@baylibre.com>
To: u-boot@lists.denx.de
Subject: [PATCH] gpio: emulate open drain & open source in dm_gpio_set_value()
Date: Wed, 29 Apr 2020 10:06:34 +0200 [thread overview]
Message-ID: <20200429080634.355-1-narmstrong@baylibre.com> (raw)
Handle the GPIOD_OPEN_DRAIN & GPIOD_OPEN_SOURCE flags to emulate open drain
and open source by setting the GPIO line as input depending on the
requested value.
The behaviour is taken from the Linux gpiolib.
It notably permits enabling a GPIO regulator used as Open Drain on the
Amlogic G12A/g12B/SM1 platforms for HDMI output feature.
Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
---
drivers/gpio/gpio-uclass.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/drivers/gpio/gpio-uclass.c b/drivers/gpio/gpio-uclass.c
index 757ab7106e..6b82d02a4d 100644
--- a/drivers/gpio/gpio-uclass.c
+++ b/drivers/gpio/gpio-uclass.c
@@ -524,8 +524,21 @@ int dm_gpio_set_value(const struct gpio_desc *desc, int value)
if (ret)
return ret;
+ /*
+ * Emulate open drain by not actively driving the line high or
+ * Emulate open source by not actively driving the line low
+ */
+ if ((desc->flags & GPIOD_OPEN_DRAIN && value) ||
+ (desc->flags & GPIOD_OPEN_SOURCE && !value))
+ return gpio_get_ops(desc->dev)->direction_input(desc->dev,
+ desc->offset);
+ else if ((desc->flags & (GPIOD_OPEN_DRAIN | GPIOD_OPEN_SOURCE))
+ goto set_output_value;
+
if (desc->flags & GPIOD_ACTIVE_LOW)
value = !value;
+
+set_output_value:
gpio_get_ops(desc->dev)->set_value(desc->dev, desc->offset, value);
return 0;
}
--
2.22.0
next reply other threads:[~2020-04-29 8:06 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-29 8:06 Neil Armstrong [this message]
2020-04-29 18:04 ` [PATCH] gpio: emulate open drain & open source in dm_gpio_set_value() Simon Glass
2020-04-30 12:27 ` Neil Armstrong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200429080634.355-1-narmstrong@baylibre.com \
--to=narmstrong@baylibre.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox