Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) .. include:: <isonum.txt>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) =================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) Sentelic Touchpad
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) =================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) :Copyright: |copy| 2002-2011 Sentelic Corporation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) :Last update: Dec-07-2011
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) Finger Sensing Pad Intellimouse Mode (scrolling wheel, 4th and 5th buttons)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) ============================================================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) A) MSID 4: Scrolling wheel mode plus Forward page(4th button) and Backward
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16)    page (5th button)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) 1. Set sample rate to 200;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 2. Set sample rate to 200;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 3. Set sample rate to 80;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 4. Issuing the "Get device ID" command (0xF2) and waits for the response;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 5. FSP will respond 0x04.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26)     Packet 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27)     Bit 7 6 5 4 3 2 1 0       7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28)     BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29)       1   |Y|X|y|x|1|M|R|L|  2  |X|X|X|X|X|X|X|X|  3 |Y|Y|Y|Y|Y|Y|Y|Y|  4 | | |B|F|W|W|W|W|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 	  |---------------|     |---------------|    |---------------|    |---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32)     Byte 1: Bit7 => Y overflow
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 	    Bit6 => X overflow
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 	    Bit5 => Y sign bit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 	    Bit4 => X sign bit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 	    Bit3 => 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 	    Bit2 => Middle Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 	    Bit1 => Right Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 	    Bit0 => Left Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40)     Byte 2: X Movement(9-bit 2's complement integers)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41)     Byte 3: Y Movement(9-bit 2's complement integers)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42)     Byte 4: Bit3~Bit0 => the scrolling wheel's movement since the last data report.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 			valid values, -8 ~ +7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 	    Bit4 => 1 = 4th mouse button is pressed, Forward one page.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 		    0 = 4th mouse button is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 	    Bit5 => 1 = 5th mouse button is pressed, Backward one page.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 		    0 = 5th mouse button is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) B) MSID 6: Horizontal and Vertical scrolling
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) - Set bit 1 in register 0x40 to 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) FSP replaces scrolling wheel's movement as 4 bits to show horizontal and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) vertical scrolling.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58)     Packet 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59)     Bit 7 6 5 4 3 2 1 0       7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60)     BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61)       1   |Y|X|y|x|1|M|R|L|  2  |X|X|X|X|X|X|X|X|  3 |Y|Y|Y|Y|Y|Y|Y|Y|  4 | | |B|F|r|l|u|d|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	  |---------------|     |---------------|    |---------------|    |---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64)     Byte 1: Bit7 => Y overflow
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	    Bit6 => X overflow
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	    Bit5 => Y sign bit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	    Bit4 => X sign bit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	    Bit3 => 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	    Bit2 => Middle Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	    Bit1 => Right Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 	    Bit0 => Left Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72)     Byte 2: X Movement(9-bit 2's complement integers)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73)     Byte 3: Y Movement(9-bit 2's complement integers)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74)     Byte 4: Bit0 => the Vertical scrolling movement downward.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	    Bit1 => the Vertical scrolling movement upward.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	    Bit2 => the Horizontal scrolling movement leftward.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 	    Bit3 => the Horizontal scrolling movement rightward.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	    Bit4 => 1 = 4th mouse button is pressed, Forward one page.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 		    0 = 4th mouse button is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	    Bit5 => 1 = 5th mouse button is pressed, Backward one page.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 		    0 = 5th mouse button is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) C) MSID 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) FSP uses 2 packets (8 Bytes) to represent Absolute Position.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) so we have PACKET NUMBER to identify packets.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88)   If PACKET NUMBER is 0, the packet is Packet 1.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89)   If PACKET NUMBER is 1, the packet is Packet 2.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90)   Please count this number in program.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) MSID6 special packet will be enable at the same time when enable MSID 7.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) Absolute position for STL3886-G0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) ================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 1. Set bit 2 or 3 in register 0x40 to 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 2. Set bit 6 in register 0x40 to 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102)     Packet 1 (ABSOLUTE POSITION)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103)     Bit 7 6 5 4 3 2 1 0       7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)     BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105)       1   |0|1|V|1|1|M|R|L|  2  |X|X|X|X|X|X|X|X|  3 |Y|Y|Y|Y|Y|Y|Y|Y|  4 |r|l|d|u|X|X|Y|Y|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	  |---------------|     |---------------|    |---------------|    |---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108)     Byte 1: Bit7~Bit6 => 00, Normal data packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 		    => 01, Absolute coordination packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 		    => 10, Notify packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 	    Bit5 => valid bit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 	    Bit4 => 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	    Bit3 => 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 	    Bit2 => Middle Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 	    Bit1 => Right Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	    Bit0 => Left Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117)     Byte 2: X coordinate (xpos[9:2])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118)     Byte 3: Y coordinate (ypos[9:2])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119)     Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	    Bit3~Bit2 => X coordinate (ypos[1:0])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 	    Bit4 => scroll up
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 	    Bit5 => scroll down
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	    Bit6 => scroll left
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 	    Bit7 => scroll right
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126)     Notify Packet for G0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127)     Bit 7 6 5 4 3 2 1 0       7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128)     BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129)       1   |1|0|0|1|1|M|R|L|  2  |C|C|C|C|C|C|C|C|  3 |M|M|M|M|M|M|M|M|  4 |0|0|0|0|0|0|0|0|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 	  |---------------|     |---------------|    |---------------|    |---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132)     Byte 1: Bit7~Bit6 => 00, Normal data packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 		    => 01, Absolute coordination packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 		    => 10, Notify packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 	    Bit5 => 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 	    Bit4 => 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 	    Bit3 => 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 	    Bit2 => Middle Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 	    Bit1 => Right Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 	    Bit0 => Left Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141)     Byte 2: Message Type => 0x5A (Enable/Disable status packet)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 	    Mode Type => 0xA5 (Normal/Icon mode status)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143)     Byte 3: Message Type => 0x00 (Disabled)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 			=> 0x01 (Enabled)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 	    Mode Type    => 0x00 (Normal)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 			=> 0x01 (Icon)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147)     Byte 4: Bit7~Bit0 => Don't Care
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) Absolute position for STL3888-Ax
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) ================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154)     Packet 1 (ABSOLUTE POSITION)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155)     Bit 7 6 5 4 3 2 1 0       7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156)     BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157)       1   |0|1|V|A|1|L|0|1|  2  |X|X|X|X|X|X|X|X|  3 |Y|Y|Y|Y|Y|Y|Y|Y|  4 |x|x|y|y|X|X|Y|Y|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 	  |---------------|     |---------------|    |---------------|    |---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160)     Byte 1: Bit7~Bit6 => 00, Normal data packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 		    => 01, Absolute coordination packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 		    => 10, Notify packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 		    => 11, Normal data packet with on-pad click
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 	    Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 		    When both fingers are up, the last two reports have zero valid
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 		    bit.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 	    Bit4 => arc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 	    Bit3 => 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 	    Bit2 => Left Button, 1 is pressed, 0 is released.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 	    Bit1 => 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 	    Bit0 => 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172)     Byte 2: X coordinate (xpos[9:2])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173)     Byte 3: Y coordinate (ypos[9:2])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174)     Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 	    Bit3~Bit2 => X coordinate (ypos[1:0])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 	    Bit5~Bit4 => y1_g
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 	    Bit7~Bit6 => x1_g
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179)     Packet 2 (ABSOLUTE POSITION)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180)     Bit 7 6 5 4 3 2 1 0       7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181)     BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182)       1   |0|1|V|A|1|R|1|0|  2  |X|X|X|X|X|X|X|X|  3 |Y|Y|Y|Y|Y|Y|Y|Y|  4 |x|x|y|y|X|X|Y|Y|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 	  |---------------|     |---------------|    |---------------|    |---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185)     Byte 1: Bit7~Bit6 => 00, Normal data packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 		    => 01, Absolute coordinates packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 		    => 10, Notify packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 		    => 11, Normal data packet with on-pad click
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 	    Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) 		    When both fingers are up, the last two reports have zero valid
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 		    bit.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 	    Bit4 => arc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 	    Bit3 => 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 	    Bit2 => Right Button, 1 is pressed, 0 is released.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 	    Bit1 => 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 	    Bit0 => 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197)     Byte 2: X coordinate (xpos[9:2])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198)     Byte 3: Y coordinate (ypos[9:2])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199)     Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 	    Bit3~Bit2 => X coordinate (ypos[1:0])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 	    Bit5~Bit4 => y2_g
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 	    Bit7~Bit6 => x2_g
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204)     Notify Packet for STL3888-Ax
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205)     Bit 7 6 5 4 3 2 1 0       7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206)     BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207)       1   |1|0|1|P|1|M|R|L|  2  |C|C|C|C|C|C|C|C|  3 |0|0|F|F|0|0|0|i|  4 |r|l|d|u|0|0|0|0|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 	  |---------------|     |---------------|    |---------------|    |---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210)     Byte 1: Bit7~Bit6 => 00, Normal data packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 		    => 01, Absolute coordinates packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) 		    => 10, Notify packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 		    => 11, Normal data packet with on-pad click
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 	    Bit5 => 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 	    Bit4 => when in absolute coordinates mode (valid when EN_PKT_GO is 1):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 		    0: left button is generated by the on-pad command
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 		    1: left button is generated by the external button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 	    Bit3 => 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) 	    Bit2 => Middle Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 	    Bit1 => Right Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 	    Bit0 => Left Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222)     Byte 2: Message Type => 0xB7 (Multi Finger, Multi Coordinate mode)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223)     Byte 3: Bit7~Bit6 => Don't care
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 	    Bit5~Bit4 => Number of fingers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 	    Bit3~Bit1 => Reserved
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 	    Bit0 => 1: enter gesture mode; 0: leaving gesture mode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227)     Byte 4: Bit7 => scroll right button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) 	    Bit6 => scroll left button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 	    Bit5 => scroll down button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 	    Bit4 => scroll up button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 		* Note that if gesture and additional button (Bit4~Bit7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) 		happen at the same time, the button information will not
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) 		be sent.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) 	    Bit3~Bit0 => Reserved
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) Sample sequence of Multi-finger, Multi-coordinate mode:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) 	notify packet (valid bit == 1), abs pkt 1, abs pkt 2, abs pkt 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) 	abs pkt 2, ..., notify packet (valid bit == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) Absolute position for STL3888-B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) ================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246)     Packet 1(ABSOLUTE POSITION)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247)     Bit 7 6 5 4 3 2 1 0       7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248)     BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249)       1   |0|1|V|F|1|0|R|L|  2  |X|X|X|X|X|X|X|X|  3 |Y|Y|Y|Y|Y|Y|Y|Y|  4 |r|l|u|d|X|X|Y|Y|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) 	  |---------------|     |---------------|    |---------------|    |---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252)     Byte 1: Bit7~Bit6 => 00, Normal data packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 		    => 01, Absolute coordinates packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) 		    => 10, Notify packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) 		    => 11, Normal data packet with on-pad click
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) 	    Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) 		    When both fingers are up, the last two reports have zero valid
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) 		    bit.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) 	    Bit4 => finger up/down information. 1: finger down, 0: finger up.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) 	    Bit3 => 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) 	    Bit2 => finger index, 0 is the first finger, 1 is the second finger.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) 	    Bit1 => Right Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) 	    Bit0 => Left Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264)     Byte 2: X coordinate (xpos[9:2])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265)     Byte 3: Y coordinate (ypos[9:2])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266)     Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 	    Bit3~Bit2 => X coordinate (ypos[1:0])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) 	    Bit4 => scroll down button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) 	    Bit5 => scroll up button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) 	    Bit6 => scroll left button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 	    Bit7 => scroll right button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273)     Packet 2 (ABSOLUTE POSITION)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274)     Bit 7 6 5 4 3 2 1 0       7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275)     BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276)       1   |0|1|V|F|1|1|R|L|  2  |X|X|X|X|X|X|X|X|  3 |Y|Y|Y|Y|Y|Y|Y|Y|  4 |r|l|u|d|X|X|Y|Y|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) 	  |---------------|     |---------------|    |---------------|    |---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279)     Byte 1: Bit7~Bit6 => 00, Normal data packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) 		    => 01, Absolute coordination packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) 		    => 10, Notify packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) 		    => 11, Normal data packet with on-pad click
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) 	    Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) 		    When both fingers are up, the last two reports have zero valid
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) 		    bit.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) 	    Bit4 => finger up/down information. 1: finger down, 0: finger up.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 	    Bit3 => 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) 	    Bit2 => finger index, 0 is the first finger, 1 is the second finger.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) 	    Bit1 => Right Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) 	    Bit0 => Left Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291)     Byte 2: X coordinate (xpos[9:2])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292)     Byte 3: Y coordinate (ypos[9:2])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293)     Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) 	    Bit3~Bit2 => X coordinate (ypos[1:0])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) 	    Bit4 => scroll down button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) 	    Bit5 => scroll up button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) 	    Bit6 => scroll left button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) 	    Bit7 => scroll right button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) Notify Packet for STL3888-B0::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302)     Bit 7 6 5 4 3 2 1 0       7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303)     BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304)       1   |1|0|1|P|1|M|R|L|  2  |C|C|C|C|C|C|C|C|  3 |0|0|F|F|0|0|0|i|  4 |r|l|u|d|0|0|0|0|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) 	  |---------------|     |---------------|    |---------------|    |---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307)     Byte 1: Bit7~Bit6 => 00, Normal data packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) 		    => 01, Absolute coordination packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) 		    => 10, Notify packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) 		    => 11, Normal data packet with on-pad click
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) 	    Bit5 => 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) 	    Bit4 => when in absolute coordinates mode (valid when EN_PKT_GO is 1):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) 		    0: left button is generated by the on-pad command
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) 		    1: left button is generated by the external button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) 	    Bit3 => 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) 	    Bit2 => Middle Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) 	    Bit1 => Right Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) 	    Bit0 => Left Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319)     Byte 2: Message Type => 0xB7 (Multi Finger, Multi Coordinate mode)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320)     Byte 3: Bit7~Bit6 => Don't care
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) 	    Bit5~Bit4 => Number of fingers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) 	    Bit3~Bit1 => Reserved
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) 	    Bit0 => 1: enter gesture mode; 0: leaving gesture mode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324)     Byte 4: Bit7 => scroll right button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) 	    Bit6 => scroll left button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) 	    Bit5 => scroll up button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) 	    Bit4 => scroll down button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) 		* Note that if gesture and additional button(Bit4~Bit7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) 		happen at the same time, the button information will not
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) 		be sent.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) 	    Bit3~Bit0 => Reserved
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) Sample sequence of Multi-finger, Multi-coordinate mode:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) 	notify packet (valid bit == 1), abs pkt 1, abs pkt 2, abs pkt 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) 	abs pkt 2, ..., notify packet (valid bit == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) Absolute position for STL3888-Cx and STL3888-Dx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) ===============================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343)     Single Finger, Absolute Coordinate Mode (SFAC)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344)     Bit 7 6 5 4 3 2 1 0       7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345)     BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346)       1   |0|1|0|P|1|M|R|L|  2  |X|X|X|X|X|X|X|X|  3 |Y|Y|Y|Y|Y|Y|Y|Y|  4 |r|l|B|F|X|X|Y|Y|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) 	  |---------------|     |---------------|    |---------------|    |---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349)     Byte 1: Bit7~Bit6 => 00, Normal data packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) 		    => 01, Absolute coordinates packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) 		    => 10, Notify packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) 	    Bit5 => Coordinate mode(always 0 in SFAC mode):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) 		    0: single-finger absolute coordinates (SFAC) mode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) 		    1: multi-finger, multiple coordinates (MFMC) mode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) 	    Bit4 => 0: The LEFT button is generated by on-pad command (OPC)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) 		    1: The LEFT button is generated by external button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) 		    Default is 1 even if the LEFT button is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) 	    Bit3 => Always 1, as specified by PS/2 protocol.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) 	    Bit2 => Middle Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) 	    Bit1 => Right Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) 	    Bit0 => Left Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362)     Byte 2: X coordinate (xpos[9:2])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363)     Byte 3: Y coordinate (ypos[9:2])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364)     Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) 	    Bit3~Bit2 => X coordinate (ypos[1:0])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) 	    Bit4 => 4th mouse button(forward one page)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) 	    Bit5 => 5th mouse button(backward one page)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) 	    Bit6 => scroll left button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) 	    Bit7 => scroll right button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371)     Multi Finger, Multiple Coordinates Mode (MFMC):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372)     Bit 7 6 5 4 3 2 1 0       7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373)     BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374)       1   |0|1|1|P|1|F|R|L|  2  |X|X|X|X|X|X|X|X|  3 |Y|Y|Y|Y|Y|Y|Y|Y|  4 |r|l|B|F|X|X|Y|Y|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) 	  |---------------|     |---------------|    |---------------|    |---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377)     Byte 1: Bit7~Bit6 => 00, Normal data packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) 		    => 01, Absolute coordination packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) 		    => 10, Notify packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) 	    Bit5 => Coordinate mode (always 1 in MFMC mode):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) 		    0: single-finger absolute coordinates (SFAC) mode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) 		    1: multi-finger, multiple coordinates (MFMC) mode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) 	    Bit4 => 0: The LEFT button is generated by on-pad command (OPC)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) 		    1: The LEFT button is generated by external button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) 		    Default is 1 even if the LEFT button is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) 	    Bit3 => Always 1, as specified by PS/2 protocol.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) 	    Bit2 => Finger index, 0 is the first finger, 1 is the second finger.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) 		    If bit 1 and 0 are all 1 and bit 4 is 0, the middle external
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) 		    button is pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) 	    Bit1 => Right Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) 	    Bit0 => Left Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392)     Byte 2: X coordinate (xpos[9:2])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393)     Byte 3: Y coordinate (ypos[9:2])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394)     Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) 	    Bit3~Bit2 => X coordinate (ypos[1:0])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) 	    Bit4 => 4th mouse button(forward one page)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) 	    Bit5 => 5th mouse button(backward one page)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) 	    Bit6 => scroll left button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) 	    Bit7 => scroll right button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) When one of the two fingers is up, the device will output four consecutive
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) MFMC#0 report packets with zero X and Y to represent 1st finger is up or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) four consecutive MFMC#1 report packets with zero X and Y to represent that
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) the 2nd finger is up.  On the other hand, if both fingers are up, the device
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) will output four consecutive single-finger, absolute coordinate(SFAC) packets
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) with zero X and Y.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) Notify Packet for STL3888-Cx/Dx::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410)     Bit 7 6 5 4 3 2 1 0       7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411)     BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412)       1   |1|0|0|P|1|M|R|L|  2  |C|C|C|C|C|C|C|C|  3 |0|0|F|F|0|0|0|i|  4 |r|l|u|d|0|0|0|0|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) 	  |---------------|     |---------------|    |---------------|    |---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415)     Byte 1: Bit7~Bit6 => 00, Normal data packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) 		    => 01, Absolute coordinates packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) 		    => 10, Notify packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) 	    Bit5 => Always 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) 	    Bit4 => 0: The LEFT button is generated by on-pad command(OPC)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) 		    1: The LEFT button is generated by external button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) 		    Default is 1 even if the LEFT button is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) 	    Bit3 => 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) 	    Bit2 => Middle Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) 	    Bit1 => Right Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) 	    Bit0 => Left Button, 1 is pressed, 0 is not pressed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426)     Byte 2: Message type:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) 	    0xba => gesture information
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) 	    0xc0 => one finger hold-rotating gesture
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429)     Byte 3: The first parameter for the received message:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) 	    0xba => gesture ID (refer to the 'Gesture ID' section)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) 	    0xc0 => region ID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432)     Byte 4: The second parameter for the received message:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) 	    0xba => N/A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) 	    0xc0 => finger up/down information
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) Sample sequence of Multi-finger, Multi-coordinates mode:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) 	notify packet (valid bit == 1), MFMC packet 1 (byte 1, bit 2 == 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) 	MFMC packet 2 (byte 1, bit 2 == 1), MFMC packet 1, MFMC packet 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) 	..., notify packet (valid bit == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) 	That is, when the device is in MFMC mode, the host will receive
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) 	interleaved absolute coordinate packets for each finger.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) FSP Enable/Disable packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) =========================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450)     Bit 7 6 5 4 3 2 1 0       7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451)     BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452)       1   |Y|X|0|0|1|M|R|L|  2  |0|1|0|1|1|0|1|E|  3 | | | | | | | | |  4 | | | | | | | | |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) 	  |---------------|     |---------------|    |---------------|    |---------------|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455)     FSP will send out enable/disable packet when FSP receive PS/2 enable/disable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456)     command. Host will receive the packet which Middle, Right, Left button will
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457)     be set. The packet only use byte 0 and byte 1 as a pattern of original packet.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458)     Ignore the other bytes of the packet.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460)     Byte 1: Bit7 => 0, Y overflow
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) 	    Bit6 => 0, X overflow
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) 	    Bit5 => 0, Y sign bit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) 	    Bit4 => 0, X sign bit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) 	    Bit3 => 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) 	    Bit2 => 1, Middle Button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) 	    Bit1 => 1, Right Button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) 	    Bit0 => 1, Left Button
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468)     Byte 2: Bit7~1 => (0101101b)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) 	    Bit0 => 1 = Enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) 		    0 = Disable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471)     Byte 3: Don't care
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472)     Byte 4: Don't care (MOUSE ID 3, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473)     Byte 5~8: Don't care (Absolute packet)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) PS/2 Command Set
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) ================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) FSP supports basic PS/2 commanding set and modes, refer to following URL for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) details about PS/2 commands:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) http://www.computer-engineering.org/ps2mouse/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) Programming Sequence for Determining Packet Parsing Flow
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) ========================================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) 1. Identify FSP by reading device ID(0x00) and version(0x01) register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) 2. For FSP version < STL3888 Cx, determine number of buttons by reading
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489)    the 'test mode status' (0x20) register::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) 	buttons = reg[0x20] & 0x30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) 	if buttons == 0x30 or buttons == 0x20:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) 		# two/four buttons
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) 		Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) 		section A for packet parsing detail(ignore byte 4, bit ~ 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) 	elif buttons == 0x10:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) 		# 6 buttons
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) 		Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) 		section B for packet parsing detail
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) 	elif buttons == 0x00:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) 		# 6 buttons
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) 		Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) 		section A for packet parsing detail
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) 3. For FSP version >= STL3888 Cx:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) 	Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) 	section A for packet parsing detail (ignore byte 4, bit ~ 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) Programming Sequence for Register Reading/Writing
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) =================================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) Register inversion requirement:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) Following values needed to be inverted(the '~' operator in C) before being
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) sent to FSP::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) 	0xe8, 0xe9, 0xee, 0xf2, 0xf3 and 0xff.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) Register swapping requirement:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) Following values needed to have their higher 4 bits and lower 4 bits being
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) swapped before being sent to FSP::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) 	10, 20, 40, 60, 80, 100 and 200.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) Register reading sequence:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) 	1. send 0xf3 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) 	2. send 0x66 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) 	3. send 0x88 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) 	4. send 0xf3 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) 	5. if the register address being to read is not required to be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) 	inverted(refer to the 'Register inversion requirement' section),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) 	goto step 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) 	  a. send 0x68 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) 	  b. send the inverted register address to FSP and goto step 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) 	6. if the register address being to read is not required to be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) 	swapped(refer to the 'Register swapping requirement' section),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) 	goto step 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) 	  a. send 0xcc PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) 	  b. send the swapped register address to FSP and goto step 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) 	7. send 0x66 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) 	  a. send the original register address to FSP and goto step 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) 	8. send 0xe9(status request) PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) 	9. the 4th byte of the response read from FSP should be the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) 	requested register value(?? indicates don't care byte)::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) 		host: 0xe9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) 		3888: 0xfa (??) (??) (val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) 	* Note that since the Cx release, the hardware will return 1's
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) 	  complement of the register value at the 3rd byte of status request
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) 	  result::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) 		host: 0xe9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) 		3888: 0xfa (??) (~val) (val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) Register writing sequence:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) 	1. send 0xf3 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) 	2. if the register address being to write is not required to be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) 	inverted(refer to the 'Register inversion requirement' section),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) 	goto step 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) 	  a. send 0x74 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) 	  b. send the inverted register address to FSP and goto step 5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) 	3. if the register address being to write is not required to be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) 	swapped(refer to the 'Register swapping requirement' section),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) 	goto step 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) 	  a. send 0x77 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) 	  b. send the swapped register address to FSP and goto step 5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) 	4. send 0x55 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) 	  a. send the register address to FSP and goto step 5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) 	5. send 0xf3 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) 	6. if the register value being to write is not required to be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) 	inverted(refer to the 'Register inversion requirement' section),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) 	goto step 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) 	  a. send 0x47 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) 	  b. send the inverted register value to FSP and goto step 9;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) 	7. if the register value being to write is not required to be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) 	swapped(refer to the 'Register swapping requirement' section),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) 	goto step 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) 	  a. send 0x44 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) 	  b. send the swapped register value to FSP and goto step 9;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) 	8. send 0x33 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) 	  a. send the register value to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) 	9. the register writing sequence is completed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) 	* Since the Cx release, the hardware will return 1's
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) 	  complement of the register value at the 3rd byte of status request
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) 	  result. Host can optionally send another 0xe9 (status request) PS/2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) 	  command to FSP at the end of register writing to verify that the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) 	  register writing operation is successful (?? indicates don't care
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) 	  byte)::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) 		host: 0xe9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) 		3888: 0xfa (??) (~val) (val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) Programming Sequence for Page Register Reading/Writing
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) ======================================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) In order to overcome the limitation of maximum number of registers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) supported, the hardware separates register into different groups called
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) 'pages.' Each page is able to include up to 255 registers.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) The default page after power up is 0x82; therefore, if one has to get
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) access to register 0x8301, one has to use following sequence to switch
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) to page 0x83, then start reading/writing from/to offset 0x01 by using
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) the register read/write sequence described in previous section.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) Page register reading sequence:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) 	1. send 0xf3 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) 	2. send 0x66 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) 	3. send 0x88 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) 	4. send 0xf3 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) 	5. send 0x83 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) 	6. send 0x88 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) 	7. send 0xe9(status request) PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) 	8. the response read from FSP should be the requested page value.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) Page register writing sequence:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) 	1. send 0xf3 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) 	2. send 0x38 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) 	3. send 0x88 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) 	4. send 0xf3 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) 	5. if the page address being written is not required to be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) 	inverted(refer to the 'Register inversion requirement' section),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) 	goto step 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) 	  a. send 0x47 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) 	  b. send the inverted page address to FSP and goto step 9;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) 	6. if the page address being written is not required to be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) 	swapped(refer to the 'Register swapping requirement' section),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) 	goto step 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) 	  a. send 0x44 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) 	  b. send the swapped page address to FSP and goto step 9;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) 	7. send 0x33 PS/2 command to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) 	8. send the page address to FSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) 	9. the page register writing sequence is completed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) Gesture ID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) ==========
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) Unlike other devices which sends multiple fingers' coordinates to host,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) FSP processes multiple fingers' coordinates internally and convert them
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) into a 8 bits integer, namely 'Gesture ID.'  Following is a list of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) supported gesture IDs:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) 	======= ==================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) 	ID	Description
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) 	======= ==================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704) 	0x86	2 finger straight up
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) 	0x82	2 finger straight down
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) 	0x80	2 finger straight right
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) 	0x84	2 finger straight left
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708) 	0x8f	2 finger zoom in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) 	0x8b	2 finger zoom out
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) 	0xc0	2 finger curve, counter clockwise
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711) 	0xc4	2 finger curve, clockwise
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712) 	0x2e	3 finger straight up
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) 	0x2a	3 finger straight down
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714) 	0x28	3 finger straight right
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715) 	0x2c	3 finger straight left
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) 	0x38	palm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717) 	======= ==================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) Register Listing
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720) ================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722) Registers are represented in 16 bits values. The higher 8 bits represent
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) the page address and the lower 8 bits represent the relative offset within
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) that particular page.  Refer to the 'Programming Sequence for Page Register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725) Reading/Writing' section for instructions on how to change current page
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726) address::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728)  offset	width		default	r/w	name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729)  0x8200	bit7~bit0	0x01	RO	device ID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731)  0x8201	bit7~bit0		RW	version ID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732) 					0xc1: STL3888 Ax
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733) 					0xd0 ~ 0xd2: STL3888 Bx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734) 					0xe0 ~ 0xe1: STL3888 Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) 					0xe2 ~ 0xe3: STL3888 Dx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737)  0x8202	bit7~bit0	0x01	RO	vendor ID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739)  0x8203	bit7~bit0	0x01	RO	product ID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741)  0x8204	bit3~bit0	0x01	RW	revision ID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743)  0x820b					test mode status 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744) 	bit3		1	RO	0: rotate 180 degree
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745) 					1: no rotation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746) 					*only supported by H/W prior to Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748)  0x820f					register file page control
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749) 	bit2		0	RW	1: rotate 180 degree
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750) 					0: no rotation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751) 					*supported since Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753) 	bit0		0	RW	1 to enable page 1 register files
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754) 					*only supported by H/W prior to Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756)  0x8210				RW	system control 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757) 	bit0		1	RW	Reserved, must be 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758) 	bit1		0	RW	Reserved, must be 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759) 	bit4		0	RW	Reserved, must be 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) 	bit5		1	RW	register clock gating enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761) 					0: read only, 1: read/write enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762) 	(Note that following registers does not require clock gating being
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763) 	enabled prior to write: 05 06 07 08 09 0c 0f 10 11 12 16 17 18 23 2e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764) 	40 41 42 43.  In addition to that, this bit must be 1 when gesture
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765) 	mode is enabled)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767)  0x8220					test mode status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768) 	bit5~bit4		RO	number of buttons
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769) 					11 => 2, lbtn/rbtn
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770) 					10 => 4, lbtn/rbtn/scru/scrd
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771) 					01 => 6, lbtn/rbtn/scru/scrd/scrl/scrr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772) 					00 => 6, lbtn/rbtn/scru/scrd/fbtn/bbtn
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773) 					*only supported by H/W prior to Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 774) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 775)  0x8231				RW	on-pad command detection
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 776) 	bit7		0	RW	on-pad command left button down tag
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 777) 					enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 778) 					0: disable, 1: enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 779) 					*only supported by H/W prior to Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 780) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 781)  0x8234				RW	on-pad command control 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 782) 	bit4~bit0	0x05	RW	XLO in 0s/4/1, so 03h = 0010.1b = 2.5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 783) 	(Note that position unit is in 0.5 scanline)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 784) 					*only supported by H/W prior to Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 785) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 786) 	bit7		0	RW	on-pad tap zone enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 787) 					0: disable, 1: enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 788) 					*only supported by H/W prior to Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 789) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 790)  0x8235				RW	on-pad command control 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 791) 	bit4~bit0	0x1d	RW	XHI in 0s/4/1, so 19h = 1100.1b = 12.5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 792) 	(Note that position unit is in 0.5 scanline)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 793) 					*only supported by H/W prior to Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 794) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 795)  0x8236				RW	on-pad command control 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 796) 	bit4~bit0	0x04	RW	YLO in 0s/4/1, so 03h = 0010.1b = 2.5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 797) 	(Note that position unit is in 0.5 scanline)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 798) 					*only supported by H/W prior to Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 799) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 800)  0x8237				RW	on-pad command control 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 801) 	bit4~bit0	0x13	RW	YHI in 0s/4/1, so 11h = 1000.1b = 8.5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 802) 	(Note that position unit is in 0.5 scanline)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 803) 					*only supported by H/W prior to Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 804) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 805)  0x8240				RW	system control 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 806) 	bit1		0	RW	FSP Intellimouse mode enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 807) 					0: disable, 1: enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 808) 					*only supported by H/W prior to Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 809) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 810) 	bit2		0	RW	movement + abs. coordinate mode enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 811) 					0: disable, 1: enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 812) 	(Note that this function has the functionality of bit 1 even when
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 813) 	bit 1 is not set. However, the format is different from that of bit 1.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 814) 	In addition, when bit 1 and bit 2 are set at the same time, bit 2 will
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 815) 	override bit 1.)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 816) 					*only supported by H/W prior to Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 817) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 818) 	bit3		0	RW	abs. coordinate only mode enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 819) 					0: disable, 1: enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 820) 	(Note that this function has the functionality of bit 1 even when
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 821) 	bit 1 is not set. However, the format is different from that of bit 1.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 822) 	In addition, when bit 1, bit 2 and bit 3 are set at the same time,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 823) 	bit 3 will override bit 1 and 2.)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 824) 					*only supported by H/W prior to Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 825) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 826) 	bit5		0	RW	auto switch enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 827) 					0: disable, 1: enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 828) 					*only supported by H/W prior to Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 829) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 830) 	bit6		0	RW	G0 abs. + notify packet format enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 831) 					0: disable, 1: enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 832) 	(Note that the absolute/relative coordinate output still depends on
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 833) 	bit 2 and 3.  That is, if any of those bit is 1, host will receive
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 834) 	absolute coordinates; otherwise, host only receives packets with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 835) 	relative coordinate.)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 836) 					*only supported by H/W prior to Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 837) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 838) 	bit7		0	RW	EN_PS2_F2: PS/2 gesture mode 2nd
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 839) 					finger packet enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 840) 					0: disable, 1: enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 841) 					*only supported by H/W prior to Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 842) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 843)  0x8243				RW	on-pad control
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 844) 	bit0		0	RW	on-pad control enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 845) 					0: disable, 1: enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 846) 	(Note that if this bit is cleared, bit 3/5 will be ineffective)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 847) 					*only supported by H/W prior to Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 848) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 849) 	bit3		0	RW	on-pad fix vertical scrolling enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 850) 					0: disable, 1: enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 851) 					*only supported by H/W prior to Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 852) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 853) 	bit5		0	RW	on-pad fix horizontal scrolling enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 854) 					0: disable, 1: enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 855) 					*only supported by H/W prior to Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 856) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 857)  0x8290				RW	software control register 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 858) 	bit0		0	RW	absolute coordination mode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 859) 					0: disable, 1: enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 860) 					*supported since Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 861) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 862) 	bit1		0	RW	gesture ID output
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 863) 					0: disable, 1: enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 864) 					*supported since Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 865) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 866) 	bit2		0	RW	two fingers' coordinates output
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 867) 					0: disable, 1: enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 868) 					*supported since Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 869) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 870) 	bit3		0	RW	finger up one packet output
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 871) 					0: disable, 1: enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 872) 					*supported since Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 873) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 874) 	bit4		0	RW	absolute coordination continuous mode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 875) 					0: disable, 1: enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 876) 					*supported since Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 877) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 878) 	bit6~bit5	00	RW	gesture group selection
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 879) 					00: basic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 880) 					01: suite
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 881) 					10: suite pro
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 882) 					11: advanced
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 883) 					*supported since Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 884) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 885) 	bit7		0	RW	Bx packet output compatible mode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 886) 					0: disable, 1: enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 887) 					*supported since Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 888) 					*supported since Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 889) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 890) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 891)  0x833d				RW	on-pad command control 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 892) 	bit7		1	RW	on-pad command detection enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 893) 					0: disable, 1: enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 894) 					*supported since Cx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 895) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 896)  0x833e				RW	on-pad command detection
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 897) 	bit7		0	RW	on-pad command left button down tag
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 898) 					enable. Works only in H/W based PS/2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 899) 					data packet mode.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 900) 					0: disable, 1: enable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 901) 					*supported since Cx