From: Johan Hovold <jhovold@gmail.com>
To: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: Daniel Mack <daniel@caiaq.de>,
linux-input@vger.kernel.org, Johan Hovold <jhovold@gmail.com>
Subject: [PATCH 1/2] input: rotary-encoder: refactor and clean up
Date: Tue, 5 Apr 2011 20:15:12 +0200 [thread overview]
Message-ID: <1302027313-27130-2-git-send-email-jhovold@gmail.com> (raw)
In-Reply-To: <1302027313-27130-1-git-send-email-jhovold@gmail.com>
Refactor state retrieval and event reporting in interrupt handler.
Remove a few empty lines.
Signed-off-by: Johan Hovold <jhovold@gmail.com>
---
drivers/input/misc/rotary_encoder.c | 83 ++++++++++++++++++++--------------
1 files changed, 49 insertions(+), 34 deletions(-)
diff --git a/drivers/input/misc/rotary_encoder.c b/drivers/input/misc/rotary_encoder.c
index 7e64d01..253e502 100644
--- a/drivers/input/misc/rotary_encoder.c
+++ b/drivers/input/misc/rotary_encoder.c
@@ -40,58 +40,74 @@ struct rotary_encoder {
unsigned char dir; /* 0 - clockwise, 1 - CCW */
};
-static irqreturn_t rotary_encoder_irq(int irq, void *dev_id)
+static int rotary_encoder_get_state(struct rotary_encoder_platform_data *pdata)
{
- struct rotary_encoder *encoder = dev_id;
- struct rotary_encoder_platform_data *pdata = encoder->pdata;
int a = !!gpio_get_value(pdata->gpio_a);
int b = !!gpio_get_value(pdata->gpio_b);
- int state;
a ^= pdata->inverted_a;
b ^= pdata->inverted_b;
- state = (a << 1) | b;
- switch (state) {
+ return ((a << 1) | b);
+}
- case 0x0:
- if (!encoder->armed)
- break;
+static void rotary_encoder_report_event(struct rotary_encoder *encoder)
+{
+ struct rotary_encoder_platform_data *pdata = encoder->pdata;
+ unsigned pos;
+ int value;
- if (pdata->relative_axis) {
- input_report_rel(encoder->input, pdata->axis,
- encoder->dir ? -1 : 1);
- } else {
- unsigned int pos = encoder->pos;
-
- if (encoder->dir) {
- /* turning counter-clockwise */
- if (pdata->rollover)
- pos += pdata->steps;
- if (pos)
- pos--;
- } else {
- /* turning clockwise */
- if (pdata->rollover || pos < pdata->steps)
- pos++;
- }
+ if (pdata->relative_axis) {
+ if (encoder->dir)
+ value = -1;
+ else
+ value = 1;
+
+ input_report_rel(encoder->input, pdata->axis, value);
+ } else {
+ pos = encoder->pos;
+
+ if (encoder->dir) {
+ /* turning counter-clockwise */
if (pdata->rollover)
- pos %= pdata->steps;
- encoder->pos = pos;
- input_report_abs(encoder->input, pdata->axis,
- encoder->pos);
+ pos += pdata->steps;
+ if (pos)
+ pos--;
+ } else {
+ /* turning clockwise */
+ if (pdata->rollover || pos < pdata->steps)
+ pos++;
}
- input_sync(encoder->input);
+ if (pdata->rollover)
+ pos %= pdata->steps;
+
+ encoder->pos = pos;
+ input_report_abs(encoder->input, pdata->axis, encoder->pos);
+ }
+
+ input_sync(encoder->input);
+}
+
+static irqreturn_t rotary_encoder_irq(int irq, void *dev_id)
+{
+ struct rotary_encoder *encoder = dev_id;
+ int state;
+
+ state = rotary_encoder_get_state(encoder->pdata);
+
+ switch (state) {
+ case 0x0:
+ if (!encoder->armed)
+ break;
+ rotary_encoder_report_event(encoder);
encoder->armed = false;
break;
-
case 0x1:
case 0x2:
if (encoder->armed)
encoder->dir = state - 1;
break;
-
case 0x3:
encoder->armed = true;
break;
@@ -254,4 +270,3 @@ MODULE_ALIAS("platform:" DRV_NAME);
MODULE_DESCRIPTION("GPIO rotary encoder driver");
MODULE_AUTHOR("Daniel Mack <daniel@caiaq.de>");
MODULE_LICENSE("GPL v2");
-
--
1.7.4.1
next prev parent reply other threads:[~2011-04-05 18:15 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-05 18:15 [PATCH 0/2] input: rotary-encoder: add support for half-period encoders Johan Hovold
2011-04-05 18:15 ` Johan Hovold [this message]
2011-04-06 23:30 ` [PATCH 1/2] input: rotary-encoder: refactor and clean up H Hartley Sweeten
2011-04-05 18:15 ` [PATCH 2/2] input: rotary-encoder: add support for half-period encoders Johan Hovold
2011-04-05 19:39 ` [PATCH 2/2 v2] " Johan Hovold
2011-04-05 19:46 ` [PATCH 2/2 v3] " Johan Hovold
2011-04-08 7:39 ` [PATCH 0/2] " Daniel Mack
2011-04-11 10:44 ` Johan Hovold
2011-05-10 19:05 ` Johan Hovold
2011-05-22 21:29 ` Daniel Mack
2011-05-22 22:42 ` Daniel Mack
2011-05-23 12:07 ` Johan Hovold
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=1302027313-27130-2-git-send-email-jhovold@gmail.com \
--to=jhovold@gmail.com \
--cc=daniel@caiaq.de \
--cc=dmitry.torokhov@gmail.com \
--cc=linux-input@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).