From: Wadim Mueller <wafgo01@gmail.com>
To: wbg@kernel.org
Cc: krzk+dt@kernel.org, robh@kernel.org, conor+dt@kernel.org,
o.rempel@pengutronix.de, linux-iio@vger.kernel.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
Wadim Mueller <wafgo01@gmail.com>,
kernel@pengutronix.de
Subject: [PATCH v6 0/3] counter: add GPIO-based counter driver
Date: Sun, 28 Jun 2026 23:02:38 +0200 [thread overview]
Message-ID: <20260628210241.119825-1-wafgo01@gmail.com> (raw)
This series adds a counter subsystem driver that does quadrature
encoder position tracking with plain GPIO pins and edge interrupts.
Compared to interrupt-cnt.c (pulse-only) it provides full A/B/Index
decoding and exposes the counter sysfs ABI. Target hardware is
low- to medium-speed rotary encoders on SoCs without a free eQEP /
FTM / etc. Benchmark rig: github.com/wafgo/qenc-bench.
Following William's v5 review [1][2] the driver now exposes two
Counts on the same wires:
Count 1: Synapses on A and B (+ optional Index 1). Supports
QUADRATURE_X1_{A,B} / X2_{A,B} / X4, PULSE_DIRECTION,
INCREASE and DECREASE.
Count 2: Synapse on B (+ optional Index 2). INCREASE / DECREASE.
== Changes in v6 ==
Driver:
- Two-Count layout with per-Count state struct
(gpio_counter_count_priv) so future per-Count features can
be added without parallel arrays.
- ISR rewrite: STATE_CHANGED check used in all quadrature modes
(not only X4); the *_delta helpers are gone.
- INCREASE / DECREASE now count on both edges of their input
(A for Count 1, B for Count 2).
- PULSE_DIRECTION: direction is sampled in the B-ISR, the A-ISR
only steps the value.
- direction is initialised in function_write so the first read
after a mode switch returns a defined value.
- enable_write: added enable_lock mutex and reordered the
enable/disable sequence so the spinlock is dropped before
disable_irq() (which can sleep). irq_b is shared by Count 1
and Count 2, so it is refcounted; the per-Count irqs (A,
Index 1, Index 2) are toggled directly.
Binding:
- index-gpios takes 1..2 entries: Index for Count 1, optional
Index for Count 2.
- Description and Counts wording updated for the two-Count
layout.
- signal-b stays required. The single-line case is already
covered by interrupt-cnt. Oleksij suggested [3] extending
interrupt-cnt with a multi-line variant; I kept this as its
own driver because the Generic Counter ABI (Counts /
Synapses / Signals, ceiling, preset, action) does not fit
interrupt-cnt's pulse hot path well.
- Conor's v5 Acked-by [4] is dropped because of the binding
changes -- a fresh Ack would be appreciated.
[1] https://lore.kernel.org/all/20260617074929.333876-1-wbg@kernel.org/
[2] https://lore.kernel.org/all/20260623053800.120909-1-wbg@kernel.org/
[3] https://lore.kernel.org/all/ajoXoYc1CYKZyQ5l@pengutronix.de/
[4] https://lore.kernel.org/all/20260525-register-bogus-b198545b69a8@spud/
Wadim Mueller (3):
dt-bindings: counter: add gpio-counter binding
counter: add GPIO-based counter driver
MAINTAINERS: add entry for GPIO counter driver
.../bindings/counter/gpio-counter.yaml | 59 ++
MAINTAINERS | 7 +
drivers/counter/Kconfig | 17 +
drivers/counter/Makefile | 1 +
drivers/counter/gpio-counter.c | 983 ++++++++++++++++++
5 files changed, 1067 insertions(+)
create mode 100644 Documentation/devicetree/bindings/counter/gpio-counter.yaml
create mode 100644 drivers/counter/gpio-counter.c
base-commit: 3cd8b194bf3428dfa53120fee47e827a7c495815
--
2.52.0
next reply other threads:[~2026-06-28 21:02 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-28 21:02 Wadim Mueller [this message]
2026-06-28 21:02 ` [PATCH v6 1/3] dt-bindings: counter: add gpio-counter binding Wadim Mueller
2026-06-29 15:35 ` Conor Dooley
2026-06-28 21:02 ` [PATCH v6 2/3] counter: add GPIO-based counter driver Wadim Mueller
2026-06-28 21:13 ` sashiko-bot
2026-07-07 10:44 ` William Breathitt Gray
2026-06-28 21:02 ` [PATCH v6 3/3] MAINTAINERS: add entry for GPIO " Wadim Mueller
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=20260628210241.119825-1-wafgo01@gmail.com \
--to=wafgo01@gmail.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=kernel@pengutronix.de \
--cc=krzk+dt@kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=o.rempel@pengutronix.de \
--cc=robh@kernel.org \
--cc=wbg@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.