From: David Lechner <david@lechnology.com>
To: linux-iio@vger.kernel.org
Cc: David Lechner <david@lechnology.com>,
William Breathitt Gray <vilhelm.gray@gmail.com>,
Robert Nelson <robertcnelson@gmail.com>,
linux-kernel@vger.kernel.org
Subject: [PATCH 2/8] counter/ti-eqep: add support for direction
Date: Sat, 16 Oct 2021 20:33:37 -0500 [thread overview]
Message-ID: <20211017013343.3385923-3-david@lechnology.com> (raw)
In-Reply-To: <20211017013343.3385923-1-david@lechnology.com>
This adds support for direction to the TI eQEP counter driver. It adds
both a direction attribute to sysfs and a direction change event to
the chrdev. The direction change event type is new public API.
Signed-off-by: David Lechner <david@lechnology.com>
---
drivers/counter/ti-eqep.c | 33 +++++++++++++++++++++++++++++++++
include/uapi/linux/counter.h | 2 ++
2 files changed, 35 insertions(+)
diff --git a/drivers/counter/ti-eqep.c b/drivers/counter/ti-eqep.c
index b7c79435e127..9881e5115da6 100644
--- a/drivers/counter/ti-eqep.c
+++ b/drivers/counter/ti-eqep.c
@@ -106,6 +106,15 @@
#define QCLR_PCE BIT(1)
#define QCLR_INT BIT(0)
+#define QEPSTS_UPEVNT BIT(7)
+#define QEPSTS_FDF BIT(6)
+#define QEPSTS_QDF BIT(5)
+#define QEPSTS_QDLF BIT(4)
+#define QEPSTS_COEF BIT(3)
+#define QEPSTS_CDEF BIT(2)
+#define QEPSTS_FIMF BIT(1)
+#define QEPSTS_PCEF BIT(0)
+
/* EQEP Inputs */
enum {
TI_EQEP_SIGNAL_QEPA, /* QEPA/XCLK */
@@ -286,6 +295,9 @@ static int ti_eqep_events_configure(struct counter_device *counter)
case COUNTER_EVENT_UNDERFLOW:
qeint |= QEINT_PCU;
break;
+ case COUNTER_EVENT_DIRECTION_CHANGE:
+ qeint |= QEINT_QDC;
+ break;
}
}
@@ -298,6 +310,7 @@ static int ti_eqep_watch_validate(struct counter_device *counter,
switch (watch->event) {
case COUNTER_EVENT_OVERFLOW:
case COUNTER_EVENT_UNDERFLOW:
+ case COUNTER_EVENT_DIRECTION_CHANGE:
return 0;
default:
return -EINVAL;
@@ -371,11 +384,27 @@ static int ti_eqep_position_enable_write(struct counter_device *counter,
return 0;
}
+static int ti_eqep_direction_read(struct counter_device *counter,
+ struct counter_count *count,
+ enum counter_count_direction *direction)
+{
+ struct ti_eqep_cnt *priv = counter->priv;
+ u32 qepsts;
+
+ regmap_read(priv->regmap16, QEPSTS, &qepsts);
+
+ *direction = (qepsts & QEPSTS_QDF) ? COUNTER_COUNT_DIRECTION_FORWARD
+ : COUNTER_COUNT_DIRECTION_BACKWARD;
+
+ return 0;
+}
+
static struct counter_comp ti_eqep_position_ext[] = {
COUNTER_COMP_CEILING(ti_eqep_position_ceiling_read,
ti_eqep_position_ceiling_write),
COUNTER_COMP_ENABLE(ti_eqep_position_enable_read,
ti_eqep_position_enable_write),
+ COUNTER_COMP_DIRECTION(ti_eqep_direction_read),
};
static struct counter_signal ti_eqep_signals[] = {
@@ -442,6 +471,10 @@ static irqreturn_t ti_eqep_irq_handler(int irq, void *dev_id)
if (qflg & QFLG_PCU)
counter_push_event(counter, COUNTER_EVENT_UNDERFLOW, 0);
+ if (qflg & QFLG_QDC)
+ counter_push_event(counter, COUNTER_EVENT_DIRECTION_CHANGE, 0);
+
+
regmap_set_bits(priv->regmap16, QCLR, ~0);
return IRQ_HANDLED;
diff --git a/include/uapi/linux/counter.h b/include/uapi/linux/counter.h
index d0aa95aeff7b..36dd3b474d09 100644
--- a/include/uapi/linux/counter.h
+++ b/include/uapi/linux/counter.h
@@ -61,6 +61,8 @@ enum counter_event_type {
COUNTER_EVENT_THRESHOLD,
/* Index signal detected */
COUNTER_EVENT_INDEX,
+ /* Direction change detected */
+ COUNTER_EVENT_DIRECTION_CHANGE,
};
/**
--
2.25.1
next prev parent reply other threads:[~2021-10-17 1:56 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-17 1:33 [PATCH 0/8] counter: ti-eqep: implement features for speed measurement David Lechner
2021-10-17 1:33 ` [PATCH 1/8] counter/ti-eqep: implement over/underflow events David Lechner
2021-10-17 11:10 ` Jonathan Cameron
2021-10-25 7:13 ` William Breathitt Gray
2021-10-27 15:23 ` David Lechner
2021-10-28 6:41 ` William Breathitt Gray
2021-10-17 1:33 ` David Lechner [this message]
2021-10-17 11:11 ` [PATCH 2/8] counter/ti-eqep: add support for direction Jonathan Cameron
2021-10-25 7:29 ` William Breathitt Gray
2021-10-17 1:33 ` [PATCH 3/8] counter/ti-eqep: add support for unit timer David Lechner
2021-10-17 11:20 ` Jonathan Cameron
2021-10-25 8:48 ` William Breathitt Gray
2021-10-27 15:28 ` David Lechner
2021-10-28 7:48 ` William Breathitt Gray
2021-10-28 13:42 ` David Lechner
2021-10-30 8:35 ` William Breathitt Gray
2021-10-17 1:33 ` [PATCH 4/8] docs: counter: add unit timer sysfs attributes David Lechner
2021-10-17 11:23 ` Jonathan Cameron
2021-10-27 6:46 ` William Breathitt Gray
2021-10-27 15:30 ` David Lechner
2021-10-28 7:59 ` William Breathitt Gray
2021-10-30 16:40 ` David Lechner
2021-11-01 4:08 ` William Breathitt Gray
2021-11-01 5:27 ` William Breathitt Gray
2021-10-17 1:33 ` [PATCH 5/8] counter/ti-eqep: add support for latched position David Lechner
2021-10-27 7:44 ` William Breathitt Gray
2021-10-27 15:40 ` David Lechner
2021-10-28 8:12 ` William Breathitt Gray
2021-10-17 1:33 ` [PATCH 6/8] docs: counter: add latch_mode and latched_count sysfs attributes David Lechner
2021-10-17 11:26 ` Jonathan Cameron
2021-10-27 7:54 ` William Breathitt Gray
2021-10-27 17:00 ` David Lechner
2021-10-30 1:32 ` William Breathitt Gray
2021-10-30 14:39 ` Jonathan Cameron
2021-11-01 5:11 ` William Breathitt Gray
2021-10-17 1:33 ` [PATCH 7/8] counter/ti-eqep: add support for edge capture unit David Lechner
2021-10-17 11:29 ` Jonathan Cameron
2021-10-27 8:23 ` William Breathitt Gray
2021-10-27 17:28 ` David Lechner
2021-10-17 1:33 ` [PATCH 8/8] docs: counter: add edge_capture_unit_* attributes David Lechner
2021-10-27 8:26 ` William Breathitt Gray
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=20211017013343.3385923-3-david@lechnology.com \
--to=david@lechnology.com \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=robertcnelson@gmail.com \
--cc=vilhelm.gray@gmail.com \
/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.