From: Kent Gibson <warthog618@gmail.com>
To: linux-gpio@vger.kernel.org, bgolaszewski@baylibre.com
Cc: Kent Gibson <warthog618@gmail.com>
Subject: [libgpiod][PATCH v4 03/20] bindings: cxx: add support for bias flags
Date: Sun, 1 Dec 2019 11:23:50 +0800 [thread overview]
Message-ID: <20191201032407.23589-4-warthog618@gmail.com> (raw)
In-Reply-To: <20191201032407.23589-1-warthog618@gmail.com>
Add support for bias flags in line requests and returning the line bias
setting via a bias accessor.
Based on initial work by Drew Fustini <drew@pdp7.com>.
Signed-off-by: Kent Gibson <warthog618@gmail.com>
---
bindings/cxx/gpiod.hpp | 26 ++++++++++++++++++++++++++
bindings/cxx/line.cpp | 19 +++++++++++++++++++
bindings/cxx/line_bulk.cpp | 6 ++++++
3 files changed, 51 insertions(+)
diff --git a/bindings/cxx/gpiod.hpp b/bindings/cxx/gpiod.hpp
index b5a9401..2b1a6ab 100644
--- a/bindings/cxx/gpiod.hpp
+++ b/bindings/cxx/gpiod.hpp
@@ -233,6 +233,12 @@ struct line_request
/**< The line is an open-source port. */
GPIOD_API static const ::std::bitset<32> FLAG_OPEN_DRAIN;
/**< The line is an open-drain port. */
+ GPIOD_API static const ::std::bitset<32> FLAG_BIAS_DISABLE;
+ /**< The line has neither pull-up nor pull-down resistor enabled */
+ GPIOD_API static const ::std::bitset<32> FLAG_BIAS_PULL_DOWN;
+ /**< The line has a configurable pull-down resistor enabled */
+ GPIOD_API static const ::std::bitset<32> FLAG_BIAS_PULL_UP;
+ /**< The line has a configurable pull-up resistor enabled */
::std::string consumer;
/**< Consumer name to pass to the request. */
@@ -320,6 +326,12 @@ public:
*/
GPIOD_API int active_state(void) const;
+ /**
+ * @brief Get current bias of this line.
+ * @return Current bias setting.
+ */
+ GPIOD_API int bias(void) const;
+
/**
* @brief Check if this line is used by the kernel or other user space
* process.
@@ -456,6 +468,20 @@ public:
/**< Line's active state is high. */
};
+ /**
+ * @brief Possible bias settings.
+ */
+ enum : int {
+ BIAS_AS_IS = 1,
+ /**< Line's bias state is unknown. */
+ BIAS_DISABLE,
+ /**< Line's internal bias is disabled. */
+ BIAS_PULL_UP,
+ /**< Line's internal pull-up bias is enabled. */
+ BIAS_PULL_DOWN,
+ /**< Line's internal pull-down bias is enabled. */
+ };
+
private:
line(::gpiod_line* line, const chip& owner);
diff --git a/bindings/cxx/line.cpp b/bindings/cxx/line.cpp
index df6eada..29ea5b2 100644
--- a/bindings/cxx/line.cpp
+++ b/bindings/cxx/line.cpp
@@ -6,10 +6,22 @@
*/
#include <gpiod.hpp>
+#include <map>
#include <system_error>
namespace gpiod {
+namespace {
+
+const ::std::map<int, int> bias_mapping = {
+ { GPIOD_LINE_BIAS_PULL_UP, line::BIAS_PULL_UP, },
+ { GPIOD_LINE_BIAS_PULL_DOWN, line::BIAS_PULL_DOWN, },
+ { GPIOD_LINE_BIAS_DISABLE, line::BIAS_DISABLE, },
+ { GPIOD_LINE_BIAS_AS_IS, line::BIAS_AS_IS, },
+};
+
+} /* namespace */
+
line::line(void)
: _m_line(nullptr),
_m_chip()
@@ -67,6 +79,13 @@ int line::active_state(void) const
return active == GPIOD_LINE_ACTIVE_STATE_HIGH ? ACTIVE_HIGH : ACTIVE_LOW;
}
+int line::bias(void) const
+{
+ this->throw_if_null();
+
+ return bias_mapping.at(::gpiod_line_bias(this->_m_line));
+}
+
bool line::is_used(void) const
{
this->throw_if_null();
diff --git a/bindings/cxx/line_bulk.cpp b/bindings/cxx/line_bulk.cpp
index c708c8b..5f1cac4 100644
--- a/bindings/cxx/line_bulk.cpp
+++ b/bindings/cxx/line_bulk.cpp
@@ -14,6 +14,9 @@ namespace gpiod {
const ::std::bitset<32> line_request::FLAG_ACTIVE_LOW(GPIOD_BIT(0));
const ::std::bitset<32> line_request::FLAG_OPEN_SOURCE(GPIOD_BIT(1));
const ::std::bitset<32> line_request::FLAG_OPEN_DRAIN(GPIOD_BIT(2));
+const ::std::bitset<32> line_request::FLAG_BIAS_DISABLE(GPIOD_BIT(3));
+const ::std::bitset<32> line_request::FLAG_BIAS_PULL_DOWN(GPIOD_BIT(4));
+const ::std::bitset<32> line_request::FLAG_BIAS_PULL_UP(GPIOD_BIT(5));
namespace {
@@ -38,6 +41,9 @@ const ::std::map<::std::bitset<32>, int, bitset_cmp> reqflag_mapping = {
{ line_request::FLAG_ACTIVE_LOW, GPIOD_LINE_REQUEST_FLAG_ACTIVE_LOW, },
{ line_request::FLAG_OPEN_DRAIN, GPIOD_LINE_REQUEST_FLAG_OPEN_DRAIN, },
{ line_request::FLAG_OPEN_SOURCE, GPIOD_LINE_REQUEST_FLAG_OPEN_SOURCE, },
+ { line_request::FLAG_BIAS_DISABLE, GPIOD_LINE_REQUEST_FLAG_BIAS_DISABLE, },
+ { line_request::FLAG_BIAS_PULL_DOWN, GPIOD_LINE_REQUEST_FLAG_BIAS_PULL_DOWN, },
+ { line_request::FLAG_BIAS_PULL_UP, GPIOD_LINE_REQUEST_FLAG_BIAS_PULL_UP, },
};
} /* namespace */
--
2.24.0
next prev parent reply other threads:[~2019-12-01 3:24 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-01 3:23 [libgpiod][PATCH v4 00/20] Add support for bias flags and SET_CONFIG Kent Gibson
2019-12-01 3:23 ` [libgpiod][PATCH v4 01/20] core: add support for bias flags Kent Gibson
2019-12-01 3:23 ` [libgpiod][PATCH v4 02/20] tests: add tests " Kent Gibson
2019-12-01 3:23 ` Kent Gibson [this message]
2019-12-01 3:23 ` [libgpiod][PATCH v4 04/20] bindings: cxx: " Kent Gibson
2019-12-01 3:23 ` [libgpiod][PATCH v4 05/20] bindings: python: add support " Kent Gibson
2019-12-01 3:23 ` [libgpiod][PATCH v4 06/20] bindings: python: tests: add tests " Kent Gibson
2019-12-01 3:23 ` [libgpiod][PATCH v4 07/20] core: add support for SET_CONFIG Kent Gibson
2019-12-01 3:23 ` [libgpiod][PATCH v4 08/20] tests: add tests " Kent Gibson
2019-12-01 3:23 ` [libgpiod][PATCH v4 09/20] bindings: cxx: add support " Kent Gibson
2019-12-01 3:23 ` [libgpiod][PATCH v4 10/20] bindings: cxx: tests: add tests for SET_CONFIG methods Kent Gibson
2019-12-01 3:23 ` [libgpiod][PATCH v4 11/20] bindings: python: move tuple to int array conversion into helper function Kent Gibson
2019-12-01 3:23 ` [libgpiod][PATCH v4 12/20] bindings: python: add support for SET_CONFIG Kent Gibson
2019-12-01 3:24 ` [libgpiod][PATCH v4 13/20] bindings: python: tests: add tests for SET_CONFIG methods Kent Gibson
2019-12-01 3:24 ` [libgpiod][PATCH v4 14/20] tools: add support for bias flags Kent Gibson
2019-12-01 3:24 ` [libgpiod][PATCH v4 15/20] tools: add tests " Kent Gibson
2019-12-01 3:24 ` [libgpiod][PATCH v4 16/20] tools: gpioset: add support for drive flags Kent Gibson
2019-12-01 3:24 ` [libgpiod][PATCH v4 17/20] tools: add tests " Kent Gibson
2019-12-01 3:24 ` [libgpiod][PATCH v4 18/20] core: document gpiod_line_set_value_bulk NULL values behaviour Kent Gibson
2019-12-01 3:24 ` [libgpiod][PATCH v4 19/20] bindings: cxx: fix indentation of wrapped field descriptions Kent Gibson
2019-12-01 3:24 ` [libgpiod][PATCH v4 20/20] bindings: python: make vals in gpiod_Line_set_value consistent with other functions Kent Gibson
2019-12-10 16:06 ` [libgpiod][PATCH v4 00/20] Add support for bias flags and SET_CONFIG Bartosz Golaszewski
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=20191201032407.23589-4-warthog618@gmail.com \
--to=warthog618@gmail.com \
--cc=bgolaszewski@baylibre.com \
--cc=linux-gpio@vger.kernel.org \
/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;
as well as URLs for NNTP newsgroup(s).