diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-10-27 02:44:20 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-10-27 02:44:20 -0400 |
commit | 396e6e49c58bb23d1814d3c240c736c9f01523c5 (patch) | |
tree | a6ec8dac896c3ea3ac7b1bb0dce8728766afcf91 /Documentation | |
parent | 18974369cfe23acf16d0fb79e0d1fba7a9a95ec0 (diff) | |
parent | 6ad390a25a9d1d8606b9b826878f0a30639dc2b3 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: (68 commits)
Input: adp5589-keys - add support for the ADP5585 derivatives
Input: imx_keypad - add pm suspend and resume support
Input: force feedback - potential integer wrap in input_ff_create()
Input: tsc2007 - make sure that X plate resistance is specified
Input: serio_raw - fix memory leak when closing char device
Input: serio_raw - kick clients when disconnecting port
Input: serio_raw - explicitly mark disconnected ports as dead
Input: serio_raw - fix coding style issues
Input: serio_raw - use dev_*() for messages
Input: serio_raw - use bool for boolean data
Input: serio_raw - perform proper locking when adding clients to list
Input: serio_raw - rename serio_raw_list to serio_raw_client
Input: serio_raw - use kref instead of rolling out its own refcounting
Input: psmouse - switch to using dev_*() for messages
Input: wacom - correct max Y value on medium bamboos
Input: wacom - add ABS_DISTANCE to Bamboo Pen reports
Input: wacom - remove unneeded touch pressure initialization
Input: lm8323 - wrap suspend and resume in CONFIG_PM_SLEEP
Input: ad7879-i2c - wrap suspend and resume in CONFIG_PM_SLEEP
Input: synaptics_i2c - wrap suspend and resume in CONFIG_PM_SLEEP
...
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/ABI/testing/sysfs-driver-wacom | 72 | ||||
-rw-r--r-- | Documentation/ABI/testing/sysfs-wacom | 10 | ||||
-rw-r--r-- | Documentation/input/elantech.txt | 295 | ||||
-rw-r--r-- | Documentation/input/multi-touch-protocol.txt | 14 |
4 files changed, 365 insertions, 26 deletions
diff --git a/Documentation/ABI/testing/sysfs-driver-wacom b/Documentation/ABI/testing/sysfs-driver-wacom new file mode 100644 index 000000000000..82d4df136444 --- /dev/null +++ b/Documentation/ABI/testing/sysfs-driver-wacom | |||
@@ -0,0 +1,72 @@ | |||
1 | What: /sys/class/hidraw/hidraw*/device/speed | ||
2 | Date: April 2010 | ||
3 | Kernel Version: 2.6.35 | ||
4 | Contact: linux-bluetooth@vger.kernel.org | ||
5 | Description: | ||
6 | The /sys/class/hidraw/hidraw*/device/speed file controls | ||
7 | reporting speed of Wacom bluetooth tablet. Reading from | ||
8 | this file returns 1 if tablet reports in high speed mode | ||
9 | or 0 otherwise. Writing to this file one of these values | ||
10 | switches reporting speed. | ||
11 | |||
12 | What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/led | ||
13 | Date: August 2011 | ||
14 | Contact: linux-input@vger.kernel.org | ||
15 | Description: | ||
16 | Attribute group for control of the status LEDs and the OLEDs. | ||
17 | This attribute group is only available for Intuos 4 M, L, | ||
18 | and XL (with LEDs and OLEDs) and Cintiq 21UX2 (LEDs only). | ||
19 | Therefore its presence implicitly signifies the presence of | ||
20 | said LEDs and OLEDs on the tablet device. | ||
21 | |||
22 | What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/status0_luminance | ||
23 | Date: August 2011 | ||
24 | Contact: linux-input@vger.kernel.org | ||
25 | Description: | ||
26 | Writing to this file sets the status LED luminance (1..127) | ||
27 | when the stylus does not touch the tablet surface, and no | ||
28 | button is pressed on the stylus. This luminance level is | ||
29 | normally lower than the level when a button is pressed. | ||
30 | |||
31 | What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/status1_luminance | ||
32 | Date: August 2011 | ||
33 | Contact: linux-input@vger.kernel.org | ||
34 | Description: | ||
35 | Writing to this file sets the status LED luminance (1..127) | ||
36 | when the stylus touches the tablet surface, or any button is | ||
37 | pressed on the stylus. | ||
38 | |||
39 | What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/status_led0_select | ||
40 | Date: August 2011 | ||
41 | Contact: linux-input@vger.kernel.org | ||
42 | Description: | ||
43 | Writing to this file sets which one of the four (for Intuos 4) | ||
44 | or of the right four (for Cintiq 21UX2) status LEDs is active (0..3). | ||
45 | The other three LEDs on the same side are always inactive. | ||
46 | |||
47 | What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/status_led1_select | ||
48 | Date: September 2011 | ||
49 | Contact: linux-input@vger.kernel.org | ||
50 | Description: | ||
51 | Writing to this file sets which one of the left four (for Cintiq 21UX2) | ||
52 | status LEDs is active (0..3). The other three LEDs on the left are always | ||
53 | inactive. | ||
54 | |||
55 | What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/buttons_luminance | ||
56 | Date: August 2011 | ||
57 | Contact: linux-input@vger.kernel.org | ||
58 | Description: | ||
59 | Writing to this file sets the overall luminance level (0..15) | ||
60 | of all eight button OLED displays. | ||
61 | |||
62 | What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/button<n>_rawimg | ||
63 | Date: August 2011 | ||
64 | Contact: linux-input@vger.kernel.org | ||
65 | Description: | ||
66 | When writing a 1024 byte raw image in Wacom Intuos 4 | ||
67 | interleaving format to the file, the image shows up on Button N | ||
68 | of the device. The image is a 64x32 pixel 4-bit gray image. The | ||
69 | 1024 byte binary is split up into 16x 64 byte chunks. Each 64 | ||
70 | byte chunk encodes the image data for two consecutive lines on | ||
71 | the display. The low nibble of each byte contains the first | ||
72 | line, and the high nibble contains the second line. | ||
diff --git a/Documentation/ABI/testing/sysfs-wacom b/Documentation/ABI/testing/sysfs-wacom deleted file mode 100644 index 1517976e25c4..000000000000 --- a/Documentation/ABI/testing/sysfs-wacom +++ /dev/null | |||
@@ -1,10 +0,0 @@ | |||
1 | What: /sys/class/hidraw/hidraw*/device/speed | ||
2 | Date: April 2010 | ||
3 | Kernel Version: 2.6.35 | ||
4 | Contact: linux-bluetooth@vger.kernel.org | ||
5 | Description: | ||
6 | The /sys/class/hidraw/hidraw*/device/speed file controls | ||
7 | reporting speed of wacom bluetooth tablet. Reading from | ||
8 | this file returns 1 if tablet reports in high speed mode | ||
9 | or 0 otherwise. Writing to this file one of these values | ||
10 | switches reporting speed. | ||
diff --git a/Documentation/input/elantech.txt b/Documentation/input/elantech.txt index db798af5ef98..5602eb71ad5d 100644 --- a/Documentation/input/elantech.txt +++ b/Documentation/input/elantech.txt | |||
@@ -16,15 +16,28 @@ 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 | ||
35 | 7. Hardware version 4 | ||
36 | 7.1 Registers | ||
37 | 7.2 Native absolute mode 6 byte packet format | ||
38 | 7.2.1 Status packet | ||
39 | 7.2.2 Head packet | ||
40 | 7.2.3 Motion packet | ||
28 | 41 | ||
29 | 42 | ||
30 | 43 | ||
@@ -375,7 +388,7 @@ For all the other ones, there are just a few constant bits: | |||
375 | 388 | ||
376 | In case an error is detected, all the packets are shifted by one (and packet[0] is discarded). | 389 | In case an error is detected, all the packets are shifted by one (and packet[0] is discarded). |
377 | 390 | ||
378 | 5.2.1 One/Three finger touch | 391 | 5.2.2 One/Three finger touch |
379 | ~~~~~~~~~~~~~~~~ | 392 | ~~~~~~~~~~~~~~~~ |
380 | 393 | ||
381 | byte 0: | 394 | byte 0: |
@@ -384,19 +397,19 @@ byte 0: | |||
384 | n1 n0 w3 w2 . . R L | 397 | n1 n0 w3 w2 . . R L |
385 | 398 | ||
386 | L, R = 1 when Left, Right mouse button pressed | 399 | L, R = 1 when Left, Right mouse button pressed |
387 | n1..n0 = numbers of fingers on touchpad | 400 | n1..n0 = number of fingers on touchpad |
388 | 401 | ||
389 | byte 1: | 402 | byte 1: |
390 | 403 | ||
391 | bit 7 6 5 4 3 2 1 0 | 404 | bit 7 6 5 4 3 2 1 0 |
392 | p7 p6 p5 p4 . x10 x9 x8 | 405 | p7 p6 p5 p4 x11 x10 x9 x8 |
393 | 406 | ||
394 | byte 2: | 407 | byte 2: |
395 | 408 | ||
396 | bit 7 6 5 4 3 2 1 0 | 409 | bit 7 6 5 4 3 2 1 0 |
397 | x7 x6 x5 x4 x3 x2 x1 x0 | 410 | x7 x6 x5 x4 x3 x2 x1 x0 |
398 | 411 | ||
399 | x10..x0 = absolute x value (horizontal) | 412 | x11..x0 = absolute x value (horizontal) |
400 | 413 | ||
401 | byte 3: | 414 | byte 3: |
402 | 415 | ||
@@ -420,7 +433,7 @@ byte 3: | |||
420 | byte 4: | 433 | byte 4: |
421 | 434 | ||
422 | bit 7 6 5 4 3 2 1 0 | 435 | bit 7 6 5 4 3 2 1 0 |
423 | p3 p1 p2 p0 . . y9 y8 | 436 | p3 p1 p2 p0 y11 y10 y9 y8 |
424 | 437 | ||
425 | p7..p0 = pressure (not EF113) | 438 | p7..p0 = pressure (not EF113) |
426 | 439 | ||
@@ -429,10 +442,10 @@ byte 5: | |||
429 | bit 7 6 5 4 3 2 1 0 | 442 | bit 7 6 5 4 3 2 1 0 |
430 | y7 y6 y5 y4 y3 y2 y1 y0 | 443 | y7 y6 y5 y4 y3 y2 y1 y0 |
431 | 444 | ||
432 | y9..y0 = absolute y value (vertical) | 445 | y11..y0 = absolute y value (vertical) |
433 | 446 | ||
434 | 447 | ||
435 | 4.2.2 Two finger touch | 448 | 5.2.3 Two finger touch |
436 | ~~~~~~~~~~~~~~~~ | 449 | ~~~~~~~~~~~~~~~~ |
437 | 450 | ||
438 | Note that the two pairs of coordinates are not exactly the coordinates of the | 451 | Note that the two pairs of coordinates are not exactly the coordinates of the |
@@ -446,7 +459,7 @@ byte 0: | |||
446 | n1 n0 ay8 ax8 . . R L | 459 | n1 n0 ay8 ax8 . . R L |
447 | 460 | ||
448 | L, R = 1 when Left, Right mouse button pressed | 461 | L, R = 1 when Left, Right mouse button pressed |
449 | n1..n0 = numbers of fingers on touchpad | 462 | n1..n0 = number of fingers on touchpad |
450 | 463 | ||
451 | byte 1: | 464 | byte 1: |
452 | 465 | ||
@@ -480,3 +493,253 @@ byte 5: | |||
480 | by7 by8 by5 by4 by3 by2 by1 by0 | 493 | by7 by8 by5 by4 by3 by2 by1 by0 |
481 | 494 | ||
482 | by8..by0 = upper-right finger absolute y value | 495 | by8..by0 = upper-right finger absolute y value |
496 | |||
497 | ///////////////////////////////////////////////////////////////////////////// | ||
498 | |||
499 | 6. Hardware version 3 | ||
500 | ================== | ||
501 | |||
502 | 6.1 Registers | ||
503 | ~~~~~~~~~ | ||
504 | * reg_10 | ||
505 | |||
506 | bit 7 6 5 4 3 2 1 0 | ||
507 | 0 0 0 0 0 0 0 A | ||
508 | |||
509 | A: 1 = enable absolute tracking | ||
510 | |||
511 | 6.2 Native absolute mode 6 byte packet format | ||
512 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
513 | 1 and 3 finger touch shares the same 6-byte packet format, except that | ||
514 | 3 finger touch only reports the position of the center of all three fingers. | ||
515 | |||
516 | Firmware would send 12 bytes of data for 2 finger touch. | ||
517 | |||
518 | Note on debounce: | ||
519 | In case the box has unstable power supply or other electricity issues, or | ||
520 | when number of finger changes, F/W would send "debounce packet" to inform | ||
521 | driver that the hardware is in debounce status. | ||
522 | The debouce packet has the following signature: | ||
523 | byte 0: 0xc4 | ||
524 | byte 1: 0xff | ||
525 | byte 2: 0xff | ||
526 | byte 3: 0x02 | ||
527 | byte 4: 0xff | ||
528 | byte 5: 0xff | ||
529 | When we encounter this kind of packet, we just ignore it. | ||
530 | |||
531 | 6.2.1 One/Three finger touch | ||
532 | ~~~~~~~~~~~~~~~~~~~~~~ | ||
533 | |||
534 | byte 0: | ||
535 | |||
536 | bit 7 6 5 4 3 2 1 0 | ||
537 | n1 n0 w3 w2 0 1 R L | ||
538 | |||
539 | L, R = 1 when Left, Right mouse button pressed | ||
540 | n1..n0 = number of fingers on touchpad | ||
541 | |||
542 | byte 1: | ||
543 | |||
544 | bit 7 6 5 4 3 2 1 0 | ||
545 | p7 p6 p5 p4 x11 x10 x9 x8 | ||
546 | |||
547 | byte 2: | ||
548 | |||
549 | bit 7 6 5 4 3 2 1 0 | ||
550 | x7 x6 x5 x4 x3 x2 x1 x0 | ||
551 | |||
552 | x11..x0 = absolute x value (horizontal) | ||
553 | |||
554 | byte 3: | ||
555 | |||
556 | bit 7 6 5 4 3 2 1 0 | ||
557 | 0 0 w1 w0 0 0 1 0 | ||
558 | |||
559 | w3..w0 = width of the finger touch | ||
560 | |||
561 | byte 4: | ||
562 | |||
563 | bit 7 6 5 4 3 2 1 0 | ||
564 | p3 p1 p2 p0 y11 y10 y9 y8 | ||
565 | |||
566 | p7..p0 = pressure | ||
567 | |||
568 | byte 5: | ||
569 | |||
570 | bit 7 6 5 4 3 2 1 0 | ||
571 | y7 y6 y5 y4 y3 y2 y1 y0 | ||
572 | |||
573 | y11..y0 = absolute y value (vertical) | ||
574 | |||
575 | 6.2.2 Two finger touch | ||
576 | ~~~~~~~~~~~~~~~~ | ||
577 | |||
578 | The packet format is exactly the same for two finger touch, except the hardware | ||
579 | sends two 6 byte packets. The first packet contains data for the first finger, | ||
580 | the second packet has data for the second finger. So for two finger touch a | ||
581 | total of 12 bytes are sent. | ||
582 | |||
583 | ///////////////////////////////////////////////////////////////////////////// | ||
584 | |||
585 | 7. Hardware version 4 | ||
586 | ================== | ||
587 | |||
588 | 7.1 Registers | ||
589 | ~~~~~~~~~ | ||
590 | * reg_07 | ||
591 | |||
592 | bit 7 6 5 4 3 2 1 0 | ||
593 | 0 0 0 0 0 0 0 A | ||
594 | |||
595 | A: 1 = enable absolute tracking | ||
596 | |||
597 | 7.2 Native absolute mode 6 byte packet format | ||
598 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
599 | v4 hardware is a true multitouch touchpad, capable of tracking up to 5 fingers. | ||
600 | Unfortunately, due to PS/2's limited bandwidth, its packet format is rather | ||
601 | complex. | ||
602 | |||
603 | Whenever the numbers or identities of the fingers changes, the hardware sends a | ||
604 | status packet to indicate how many and which fingers is on touchpad, followed by | ||
605 | head packets or motion packets. A head packet contains data of finger id, finger | ||
606 | position (absolute x, y values), width, and pressure. A motion packet contains | ||
607 | two fingers' position delta. | ||
608 | |||
609 | For example, when status packet tells there are 2 fingers on touchpad, then we | ||
610 | can expect two following head packets. If the finger status doesn't change, | ||
611 | the following packets would be motion packets, only sending delta of finger | ||
612 | position, until we receive a status packet. | ||
613 | |||
614 | One exception is one finger touch. when a status packet tells us there is only | ||
615 | one finger, the hardware would just send head packets afterwards. | ||
616 | |||
617 | 7.2.1 Status packet | ||
618 | ~~~~~~~~~~~~~ | ||
619 | |||
620 | byte 0: | ||
621 | |||
622 | bit 7 6 5 4 3 2 1 0 | ||
623 | . . . . 0 1 R L | ||
624 | |||
625 | L, R = 1 when Left, Right mouse button pressed | ||
626 | |||
627 | byte 1: | ||
628 | |||
629 | bit 7 6 5 4 3 2 1 0 | ||
630 | . . . ft4 ft3 ft2 ft1 ft0 | ||
631 | |||
632 | ft4 ft3 ft2 ft1 ft0 ftn = 1 when finger n is on touchpad | ||
633 | |||
634 | byte 2: not used | ||
635 | |||
636 | byte 3: | ||
637 | |||
638 | bit 7 6 5 4 3 2 1 0 | ||
639 | . . . 1 0 0 0 0 | ||
640 | |||
641 | constant bits | ||
642 | |||
643 | byte 4: | ||
644 | |||
645 | bit 7 6 5 4 3 2 1 0 | ||
646 | p . . . . . . . | ||
647 | |||
648 | p = 1 for palm | ||
649 | |||
650 | byte 5: not used | ||
651 | |||
652 | 7.2.2 Head packet | ||
653 | ~~~~~~~~~~~ | ||
654 | |||
655 | byte 0: | ||
656 | |||
657 | bit 7 6 5 4 3 2 1 0 | ||
658 | w3 w2 w1 w0 0 1 R L | ||
659 | |||
660 | L, R = 1 when Left, Right mouse button pressed | ||
661 | w3..w0 = finger width (spans how many trace lines) | ||
662 | |||
663 | byte 1: | ||
664 | |||
665 | bit 7 6 5 4 3 2 1 0 | ||
666 | p7 p6 p5 p4 x11 x10 x9 x8 | ||
667 | |||
668 | byte 2: | ||
669 | |||
670 | bit 7 6 5 4 3 2 1 0 | ||
671 | x7 x6 x5 x4 x3 x2 x1 x0 | ||
672 | |||
673 | x11..x0 = absolute x value (horizontal) | ||
674 | |||
675 | byte 3: | ||
676 | |||
677 | bit 7 6 5 4 3 2 1 0 | ||
678 | id2 id1 id0 1 0 0 0 1 | ||
679 | |||
680 | id2..id0 = finger id | ||
681 | |||
682 | byte 4: | ||
683 | |||
684 | bit 7 6 5 4 3 2 1 0 | ||
685 | p3 p1 p2 p0 y11 y10 y9 y8 | ||
686 | |||
687 | p7..p0 = pressure | ||
688 | |||
689 | byte 5: | ||
690 | |||
691 | bit 7 6 5 4 3 2 1 0 | ||
692 | y7 y6 y5 y4 y3 y2 y1 y0 | ||
693 | |||
694 | y11..y0 = absolute y value (vertical) | ||
695 | |||
696 | 7.2.3 Motion packet | ||
697 | ~~~~~~~~~~~~~ | ||
698 | |||
699 | byte 0: | ||
700 | |||
701 | bit 7 6 5 4 3 2 1 0 | ||
702 | id2 id1 id0 w 0 1 R L | ||
703 | |||
704 | L, R = 1 when Left, Right mouse button pressed | ||
705 | id2..id0 = finger id | ||
706 | w = 1 when delta overflows (> 127 or < -128), in this case | ||
707 | firmware sends us (delta x / 5) and (delta y / 5) | ||
708 | |||
709 | byte 1: | ||
710 | |||
711 | bit 7 6 5 4 3 2 1 0 | ||
712 | x7 x6 x5 x4 x3 x2 x1 x0 | ||
713 | |||
714 | x7..x0 = delta x (two's complement) | ||
715 | |||
716 | byte 2: | ||
717 | |||
718 | bit 7 6 5 4 3 2 1 0 | ||
719 | y7 y6 y5 y4 y3 y2 y1 y0 | ||
720 | |||
721 | y7..y0 = delta y (two's complement) | ||
722 | |||
723 | byte 3: | ||
724 | |||
725 | bit 7 6 5 4 3 2 1 0 | ||
726 | id2 id1 id0 1 0 0 1 0 | ||
727 | |||
728 | id2..id0 = finger id | ||
729 | |||
730 | byte 4: | ||
731 | |||
732 | bit 7 6 5 4 3 2 1 0 | ||
733 | x7 x6 x5 x4 x3 x2 x1 x0 | ||
734 | |||
735 | x7..x0 = delta x (two's complement) | ||
736 | |||
737 | byte 5: | ||
738 | |||
739 | bit 7 6 5 4 3 2 1 0 | ||
740 | y7 y6 y5 y4 y3 y2 y1 y0 | ||
741 | |||
742 | y7..y0 = delta y (two's complement) | ||
743 | |||
744 | byte 0 ~ 2 for one finger | ||
745 | byte 3 ~ 5 for another | ||
diff --git a/Documentation/input/multi-touch-protocol.txt b/Documentation/input/multi-touch-protocol.txt index 71536e78406f..543101c5bf26 100644 --- a/Documentation/input/multi-touch-protocol.txt +++ b/Documentation/input/multi-touch-protocol.txt | |||
@@ -65,6 +65,20 @@ the full state of each initiated contact has to reside in the receiving | |||
65 | end. Upon receiving an MT event, one simply updates the appropriate | 65 | end. Upon receiving an MT event, one simply updates the appropriate |
66 | attribute of the current slot. | 66 | attribute of the current slot. |
67 | 67 | ||
68 | Some devices identify and/or track more contacts than they can report to the | ||
69 | driver. A driver for such a device should associate one type B slot with each | ||
70 | contact that is reported by the hardware. Whenever the identity of the | ||
71 | contact associated with a slot changes, the driver should invalidate that | ||
72 | slot by changing its ABS_MT_TRACKING_ID. If the hardware signals that it is | ||
73 | tracking more contacts than it is currently reporting, the driver should use | ||
74 | a BTN_TOOL_*TAP event to inform userspace of the total number of contacts | ||
75 | being tracked by the hardware at that moment. The driver should do this by | ||
76 | explicitly sending the corresponding BTN_TOOL_*TAP event and setting | ||
77 | use_count to false when calling input_mt_report_pointer_emulation(). | ||
78 | The driver should only advertise as many slots as the hardware can report. | ||
79 | Userspace can detect that a driver can report more total contacts than slots | ||
80 | by noting that the largest supported BTN_TOOL_*TAP event is larger than the | ||
81 | total number of type B slots reported in the absinfo for the ABS_MT_SLOT axis. | ||
68 | 82 | ||
69 | Protocol Example A | 83 | Protocol Example A |
70 | ------------------ | 84 | ------------------ |