[PATCH v2 0/2] rotary-encoder: Add new interruption handler

From: Ezequiel Garcia
Date: Fri Oct 04 2013 - 08:53:27 EST


Some rotary-encoder devices (such as those with detents) are capable
of producing a stable event on each step. This simple patch adds support
for this case, by implementing a new interruption handler.

The handler needs only detect the direction of the turn and generate
an event according to this detection.

We encode the previous and the current state, and then use the sum of them
to decide on the direction of the turn, according to the following simple
table:

Previous state + currrent state | Movement
==========================================
0b1101 | clockwise
0b0100 | ..
0b0010 | ..
0b1011 | ..
==========================================
0b1110 | counter-clockwise
0b0111 | ..
0b0001 | ..
0b1000 | ..

(The other sumed values are considered illegal)

This calculation is based on some previous work found at this blog:

http://bildr.org/2012/08/rotary-encoder-arduino/

The result is a seemingly very robust behavior, with a truly simple
implementation, that produces an event on each turn of the device.

Thanks!

Ezequiel Garcia (2):
Input: rotary-encoder: Add 'stepped' irq handler
input: rotary-encoder: Add 'on-each-step' to binding documentation

.../devicetree/bindings/input/rotary-encoder.txt | 1 +
drivers/input/misc/rotary_encoder.c | 41 ++++++++++++++++++++++
include/linux/rotary_encoder.h | 1 +
3 files changed, 43 insertions(+)

--
1.8.1.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/