Skip to content

Commit

Permalink
Input: elantech - add v3 hardware support
Browse files Browse the repository at this point in the history
v3 hardware's packet format is almost identical to v2 (one/three finger touch),
except when sensing two finger touch, the hardware sends 12 bytes of data.

Signed-off-by: JJ Ding <[email protected]>
Acked-by: Daniel Kurtz <[email protected]>
Acked-by: Éric Piel <[email protected]>
Signed-off-by: Dmitry Torokhov <[email protected]>
  • Loading branch information
tktunix authored and dtor committed Sep 9, 2011
1 parent 3c8bbb9 commit 28f4961
Show file tree
Hide file tree
Showing 3 changed files with 306 additions and 31 deletions.
117 changes: 105 additions & 12 deletions Documentation/input/elantech.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,22 @@ Contents

1. Introduction
2. Extra knobs
3. Hardware version 1
3.1 Registers
3.2 Native relative mode 4 byte packet format
3.3 Native absolute mode 4 byte packet format
4. Hardware version 2
3. Differentiating hardware versions
4. Hardware version 1
4.1 Registers
4.2 Native absolute mode 6 byte packet format
4.2.1 One finger touch
4.2.2 Two finger touch
4.2 Native relative mode 4 byte packet format
4.3 Native absolute mode 4 byte packet format
5. Hardware version 2
5.1 Registers
5.2 Native absolute mode 6 byte packet format
5.2.1 Parity checking and packet re-synchronization
5.2.2 One/Three finger touch
5.2.3 Two finger touch
6. Hardware version 3
6.1 Registers
6.2 Native absolute mode 6 byte packet format
6.2.1 One/Three finger touch
6.2.2 Two finger touch



Expand Down Expand Up @@ -375,7 +382,7 @@ For all the other ones, there are just a few constant bits:

In case an error is detected, all the packets are shifted by one (and packet[0] is discarded).

5.2.1 One/Three finger touch
5.2.2 One/Three finger touch
~~~~~~~~~~~~~~~~

byte 0:
Expand All @@ -384,7 +391,7 @@ byte 0:
n1 n0 w3 w2 . . R L

L, R = 1 when Left, Right mouse button pressed
n1..n0 = numbers of fingers on touchpad
n1..n0 = number of fingers on touchpad

byte 1:

Expand Down Expand Up @@ -432,7 +439,7 @@ byte 5:
y11..y0 = absolute y value (vertical)


4.2.2 Two finger touch
5.2.3 Two finger touch
~~~~~~~~~~~~~~~~

Note that the two pairs of coordinates are not exactly the coordinates of the
Expand All @@ -446,7 +453,7 @@ byte 0:
n1 n0 ay8 ax8 . . R L

L, R = 1 when Left, Right mouse button pressed
n1..n0 = numbers of fingers on touchpad
n1..n0 = number of fingers on touchpad

byte 1:

Expand Down Expand Up @@ -480,3 +487,89 @@ byte 5:
by7 by8 by5 by4 by3 by2 by1 by0

by8..by0 = upper-right finger absolute y value

/////////////////////////////////////////////////////////////////////////////

6. Hardware version 3
==================

6.1 Registers
~~~~~~~~~
* reg_10

bit 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 A

A: 1 = enable absolute tracking

6.2 Native absolute mode 6 byte packet format
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 and 3 finger touch shares the same 6-byte packet format, except that
3 finger touch only reports the position of the center of all three fingers.

Firmware would send 12 bytes of data for 2 finger touch.

Note on debounce:
In case the box has unstable power supply or other electricity issues, or
when number of finger changes, F/W would send "debounce packet" to inform
driver that the hardware is in debounce status.
The debouce packet has the following signature:
byte 0: 0xc4
byte 1: 0xff
byte 2: 0xff
byte 3: 0x02
byte 4: 0xff
byte 5: 0xff
When we encounter this kind of packet, we just ignore it.

6.2.1 One/Three finger touch
~~~~~~~~~~~~~~~~~~~~~~

byte 0:

bit 7 6 5 4 3 2 1 0
n1 n0 w3 w2 0 1 R L

L, R = 1 when Left, Right mouse button pressed
n1..n0 = number of fingers on touchpad

byte 1:

bit 7 6 5 4 3 2 1 0
p7 p6 p5 p4 x11 x10 x9 x8

byte 2:

bit 7 6 5 4 3 2 1 0
x7 x6 x5 x4 x3 x2 x1 x0

x11..x0 = absolute x value (horizontal)

byte 3:

bit 7 6 5 4 3 2 1 0
0 0 w1 w0 0 0 1 0

w3..w0 = width of the finger touch

byte 4:

bit 7 6 5 4 3 2 1 0
p3 p1 p2 p0 y11 y10 y9 y8

p7..p0 = pressure

byte 5:

bit 7 6 5 4 3 2 1 0
y7 y6 y5 y4 y3 y2 y1 y0

y11..y0 = absolute y value (vertical)

6.2.2 Two finger touch
~~~~~~~~~~~~~~~~

The packet format is exactly the same for two finger touch, except the hardware
sends two 6 byte packets. The first packet contains data for the first finger,
the second packet has data for the second finger. So for two finger touch a
total of 12 bytes are sent.
Loading

0 comments on commit 28f4961

Please sign in to comment.