diff options
author | JJ Ding <jj_ding@emc.com.tw> | 2011-09-09 13:30:31 -0400 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2011-09-09 13:34:58 -0400 |
commit | 28f49616113f3a1fbef789319bfd2122d0c3663f (patch) | |
tree | 5f0dba8f912dfcd19c0457bc4b2c8c3a823f9757 /Documentation/input/elantech.txt | |
parent | 3c8bbb951ab23dc1192473ccad76cde89c172d27 (diff) |
Input: elantech - add v3 hardware support
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 <jj_ding@emc.com.tw>
Acked-by: Daniel Kurtz <djkurtz@chromium.org>
Acked-by: Éric Piel <eric.piel@tremplin-utc.net>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Diffstat (limited to 'Documentation/input/elantech.txt')
-rw-r--r-- | Documentation/input/elantech.txt | 117 |
1 files changed, 105 insertions, 12 deletions
diff --git a/Documentation/input/elantech.txt b/Documentation/input/elantech.txt index bce9941ffa94..cee08eecda43 100644 --- a/Documentation/input/elantech.txt +++ b/Documentation/input/elantech.txt | |||
@@ -16,15 +16,22 @@ Contents | |||
16 | 16 | ||
17 | 1. Introduction | 17 | 1. Introduction |
18 | 2. Extra knobs | 18 | 2. Extra knobs |
19 | 3. Hardware version 1 | 19 | 3. Differentiating hardware versions |
20 | 3.1 Registers | 20 | 4. Hardware version 1 |
21 | 3.2 Native relative mode 4 byte packet format | ||
22 | 3.3 Native absolute mode 4 byte packet format | ||
23 | 4. Hardware version 2 | ||
24 | 4.1 Registers | 21 | 4.1 Registers |
25 | 4.2 Native absolute mode 6 byte packet format | 22 | 4.2 Native relative mode 4 byte packet format |
26 | 4.2.1 One finger touch | 23 | 4.3 Native absolute mode 4 byte packet format |
27 | 4.2.2 Two finger touch | 24 | 5. Hardware version 2 |
25 | 5.1 Registers | ||
26 | 5.2 Native absolute mode 6 byte packet format | ||
27 | 5.2.1 Parity checking and packet re-synchronization | ||
28 | 5.2.2 One/Three finger touch | ||
29 | 5.2.3 Two finger touch | ||
30 | 6. Hardware version 3 | ||
31 | 6.1 Registers | ||
32 | 6.2 Native absolute mode 6 byte packet format | ||
33 | 6.2.1 One/Three finger touch | ||
34 | 6.2.2 Two finger touch | ||
28 | 35 | ||
29 | 36 | ||
30 | 37 | ||
@@ -375,7 +382,7 @@ For all the other ones, there are just a few constant bits: | |||
375 | 382 | ||
376 | In case an error is detected, all the packets are shifted by one (and packet[0] is discarded). | 383 | In case an error is detected, all the packets are shifted by one (and packet[0] is discarded). |
377 | 384 | ||
378 | 5.2.1 One/Three finger touch | 385 | 5.2.2 One/Three finger touch |
379 | ~~~~~~~~~~~~~~~~ | 386 | ~~~~~~~~~~~~~~~~ |
380 | 387 | ||
381 | byte 0: | 388 | byte 0: |
@@ -384,7 +391,7 @@ byte 0: | |||
384 | n1 n0 w3 w2 . . R L | 391 | n1 n0 w3 w2 . . R L |
385 | 392 | ||
386 | L, R = 1 when Left, Right mouse button pressed | 393 | L, R = 1 when Left, Right mouse button pressed |
387 | n1..n0 = numbers of fingers on touchpad | 394 | n1..n0 = number of fingers on touchpad |
388 | 395 | ||
389 | byte 1: | 396 | byte 1: |
390 | 397 | ||
@@ -432,7 +439,7 @@ byte 5: | |||
432 | y11..y0 = absolute y value (vertical) | 439 | y11..y0 = absolute y value (vertical) |
433 | 440 | ||
434 | 441 | ||
435 | 4.2.2 Two finger touch | 442 | 5.2.3 Two finger touch |
436 | ~~~~~~~~~~~~~~~~ | 443 | ~~~~~~~~~~~~~~~~ |
437 | 444 | ||
438 | Note that the two pairs of coordinates are not exactly the coordinates of the | 445 | Note that the two pairs of coordinates are not exactly the coordinates of the |
@@ -446,7 +453,7 @@ byte 0: | |||
446 | n1 n0 ay8 ax8 . . R L | 453 | n1 n0 ay8 ax8 . . R L |
447 | 454 | ||
448 | L, R = 1 when Left, Right mouse button pressed | 455 | L, R = 1 when Left, Right mouse button pressed |
449 | n1..n0 = numbers of fingers on touchpad | 456 | n1..n0 = number of fingers on touchpad |
450 | 457 | ||
451 | byte 1: | 458 | byte 1: |
452 | 459 | ||
@@ -480,3 +487,89 @@ byte 5: | |||
480 | by7 by8 by5 by4 by3 by2 by1 by0 | 487 | by7 by8 by5 by4 by3 by2 by1 by0 |
481 | 488 | ||
482 | by8..by0 = upper-right finger absolute y value | 489 | by8..by0 = upper-right finger absolute y value |
490 | |||
491 | ///////////////////////////////////////////////////////////////////////////// | ||
492 | |||
493 | 6. Hardware version 3 | ||
494 | ================== | ||
495 | |||
496 | 6.1 Registers | ||
497 | ~~~~~~~~~ | ||
498 | * reg_10 | ||
499 | |||
500 | bit 7 6 5 4 3 2 1 0 | ||
501 | 0 0 0 0 0 0 0 A | ||
502 | |||
503 | A: 1 = enable absolute tracking | ||
504 | |||
505 | 6.2 Native absolute mode 6 byte packet format | ||
506 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
507 | 1 and 3 finger touch shares the same 6-byte packet format, except that | ||
508 | 3 finger touch only reports the position of the center of all three fingers. | ||
509 | |||
510 | Firmware would send 12 bytes of data for 2 finger touch. | ||
511 | |||
512 | Note on debounce: | ||
513 | In case the box has unstable power supply or other electricity issues, or | ||
514 | when number of finger changes, F/W would send "debounce packet" to inform | ||
515 | driver that the hardware is in debounce status. | ||
516 | The debouce packet has the following signature: | ||
517 | byte 0: 0xc4 | ||
518 | byte 1: 0xff | ||
519 | byte 2: 0xff | ||
520 | byte 3: 0x02 | ||
521 | byte 4: 0xff | ||
522 | byte 5: 0xff | ||
523 | When we encounter this kind of packet, we just ignore it. | ||
524 | |||
525 | 6.2.1 One/Three finger touch | ||
526 | ~~~~~~~~~~~~~~~~~~~~~~ | ||
527 | |||
528 | byte 0: | ||
529 | |||
530 | bit 7 6 5 4 3 2 1 0 | ||
531 | n1 n0 w3 w2 0 1 R L | ||
532 | |||
533 | L, R = 1 when Left, Right mouse button pressed | ||
534 | n1..n0 = number of fingers on touchpad | ||
535 | |||
536 | byte 1: | ||
537 | |||
538 | bit 7 6 5 4 3 2 1 0 | ||
539 | p7 p6 p5 p4 x11 x10 x9 x8 | ||
540 | |||
541 | byte 2: | ||
542 | |||
543 | bit 7 6 5 4 3 2 1 0 | ||
544 | x7 x6 x5 x4 x3 x2 x1 x0 | ||
545 | |||
546 | x11..x0 = absolute x value (horizontal) | ||
547 | |||
548 | byte 3: | ||
549 | |||
550 | bit 7 6 5 4 3 2 1 0 | ||
551 | 0 0 w1 w0 0 0 1 0 | ||
552 | |||
553 | w3..w0 = width of the finger touch | ||
554 | |||
555 | byte 4: | ||
556 | |||
557 | bit 7 6 5 4 3 2 1 0 | ||
558 | p3 p1 p2 p0 y11 y10 y9 y8 | ||
559 | |||
560 | p7..p0 = pressure | ||
561 | |||
562 | byte 5: | ||
563 | |||
564 | bit 7 6 5 4 3 2 1 0 | ||
565 | y7 y6 y5 y4 y3 y2 y1 y0 | ||
566 | |||
567 | y11..y0 = absolute y value (vertical) | ||
568 | |||
569 | 6.2.2 Two finger touch | ||
570 | ~~~~~~~~~~~~~~~~ | ||
571 | |||
572 | The packet format is exactly the same for two finger touch, except the hardware | ||
573 | sends two 6 byte packets. The first packet contains data for the first finger, | ||
574 | the second packet has data for the second finger. So for two finger touch a | ||
575 | total of 12 bytes are sent. | ||