brintos

brintos / linux-shallow public Read only

0
0
Text · 31.7 KiB · d7ad603 Raw
902 lines · plain
1.. include:: <isonum.txt>2 3=================4Sentelic Touchpad5=================6 7 8:Copyright: |copy| 2002-2011 Sentelic Corporation.9 10:Last update: Dec-07-201111 12Finger Sensing Pad Intellimouse Mode (scrolling wheel, 4th and 5th buttons)13============================================================================14 15A) MSID 4: Scrolling wheel mode plus Forward page(4th button) and Backward16   page (5th button)17 181. Set sample rate to 200;192. Set sample rate to 200;203. Set sample rate to 80;214. Issuing the "Get device ID" command (0xF2) and waits for the response;225. FSP will respond 0x04.23 24::25 26    Packet 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 028    BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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|30	  |---------------|     |---------------|    |---------------|    |---------------|31 32    Byte 1: Bit7 => Y overflow33	    Bit6 => X overflow34	    Bit5 => Y sign bit35	    Bit4 => X sign bit36	    Bit3 => 137	    Bit2 => Middle Button, 1 is pressed, 0 is not pressed.38	    Bit1 => Right Button, 1 is pressed, 0 is not pressed.39	    Bit0 => Left Button, 1 is pressed, 0 is not pressed.40    Byte 2: X Movement(9-bit 2's complement integers)41    Byte 3: Y Movement(9-bit 2's complement integers)42    Byte 4: Bit3~Bit0 => the scrolling wheel's movement since the last data report.43			valid values, -8 ~ +744	    Bit4 => 1 = 4th mouse button is pressed, Forward one page.45		    0 = 4th mouse button is not pressed.46	    Bit5 => 1 = 5th mouse button is pressed, Backward one page.47		    0 = 5th mouse button is not pressed.48 49B) MSID 6: Horizontal and Vertical scrolling50 51- Set bit 1 in register 0x40 to 152 53FSP replaces scrolling wheel's movement as 4 bits to show horizontal and54vertical scrolling.55 56::57 58    Packet 159    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 060    BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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|62	  |---------------|     |---------------|    |---------------|    |---------------|63 64    Byte 1: Bit7 => Y overflow65	    Bit6 => X overflow66	    Bit5 => Y sign bit67	    Bit4 => X sign bit68	    Bit3 => 169	    Bit2 => Middle Button, 1 is pressed, 0 is not pressed.70	    Bit1 => Right Button, 1 is pressed, 0 is not pressed.71	    Bit0 => Left Button, 1 is pressed, 0 is not pressed.72    Byte 2: X Movement(9-bit 2's complement integers)73    Byte 3: Y Movement(9-bit 2's complement integers)74    Byte 4: Bit0 => the Vertical scrolling movement downward.75	    Bit1 => the Vertical scrolling movement upward.76	    Bit2 => the Horizontal scrolling movement leftward.77	    Bit3 => the Horizontal scrolling movement rightward.78	    Bit4 => 1 = 4th mouse button is pressed, Forward one page.79		    0 = 4th mouse button is not pressed.80	    Bit5 => 1 = 5th mouse button is pressed, Backward one page.81		    0 = 5th mouse button is not pressed.82 83C) MSID 784 85FSP uses 2 packets (8 Bytes) to represent Absolute Position.86so we have PACKET NUMBER to identify packets.87 88  If PACKET NUMBER is 0, the packet is Packet 1.89  If PACKET NUMBER is 1, the packet is Packet 2.90  Please count this number in program.91 92MSID6 special packet will be enable at the same time when enable MSID 7.93 94Absolute position for STL3886-G095================================96 971. Set bit 2 or 3 in register 0x40 to 1982. Set bit 6 in register 0x40 to 199 100::101 102    Packet 1 (ABSOLUTE POSITION)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 0104    BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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|106	  |---------------|     |---------------|    |---------------|    |---------------|107 108    Byte 1: Bit7~Bit6 => 00, Normal data packet109		    => 01, Absolute coordination packet110		    => 10, Notify packet111	    Bit5 => valid bit112	    Bit4 => 1113	    Bit3 => 1114	    Bit2 => Middle Button, 1 is pressed, 0 is not pressed.115	    Bit1 => Right Button, 1 is pressed, 0 is not pressed.116	    Bit0 => Left Button, 1 is pressed, 0 is not pressed.117    Byte 2: X coordinate (xpos[9:2])118    Byte 3: Y coordinate (ypos[9:2])119    Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])120	    Bit3~Bit2 => X coordinate (ypos[1:0])121	    Bit4 => scroll up122	    Bit5 => scroll down123	    Bit6 => scroll left124	    Bit7 => scroll right125 126    Notify Packet for G0127    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 0128    BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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|130	  |---------------|     |---------------|    |---------------|    |---------------|131 132    Byte 1: Bit7~Bit6 => 00, Normal data packet133		    => 01, Absolute coordination packet134		    => 10, Notify packet135	    Bit5 => 0136	    Bit4 => 1137	    Bit3 => 1138	    Bit2 => Middle Button, 1 is pressed, 0 is not pressed.139	    Bit1 => Right Button, 1 is pressed, 0 is not pressed.140	    Bit0 => Left Button, 1 is pressed, 0 is not pressed.141    Byte 2: Message Type => 0x5A (Enable/Disable status packet)142	    Mode Type => 0xA5 (Normal/Icon mode status)143    Byte 3: Message Type => 0x00 (Disabled)144			=> 0x01 (Enabled)145	    Mode Type    => 0x00 (Normal)146			=> 0x01 (Icon)147    Byte 4: Bit7~Bit0 => Don't Care148 149Absolute position for STL3888-Ax150================================151 152::153 154    Packet 1 (ABSOLUTE POSITION)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 0156    BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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|158	  |---------------|     |---------------|    |---------------|    |---------------|159 160    Byte 1: Bit7~Bit6 => 00, Normal data packet161		    => 01, Absolute coordination packet162		    => 10, Notify packet163		    => 11, Normal data packet with on-pad click164	    Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up.165		    When both fingers are up, the last two reports have zero valid166		    bit.167	    Bit4 => arc168	    Bit3 => 1169	    Bit2 => Left Button, 1 is pressed, 0 is released.170	    Bit1 => 0171	    Bit0 => 1172    Byte 2: X coordinate (xpos[9:2])173    Byte 3: Y coordinate (ypos[9:2])174    Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])175	    Bit3~Bit2 => X coordinate (ypos[1:0])176	    Bit5~Bit4 => y1_g177	    Bit7~Bit6 => x1_g178 179    Packet 2 (ABSOLUTE POSITION)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 0181    BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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|183	  |---------------|     |---------------|    |---------------|    |---------------|184 185    Byte 1: Bit7~Bit6 => 00, Normal data packet186		    => 01, Absolute coordinates packet187		    => 10, Notify packet188		    => 11, Normal data packet with on-pad click189	    Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up.190		    When both fingers are up, the last two reports have zero valid191		    bit.192	    Bit4 => arc193	    Bit3 => 1194	    Bit2 => Right Button, 1 is pressed, 0 is released.195	    Bit1 => 1196	    Bit0 => 0197    Byte 2: X coordinate (xpos[9:2])198    Byte 3: Y coordinate (ypos[9:2])199    Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])200	    Bit3~Bit2 => X coordinate (ypos[1:0])201	    Bit5~Bit4 => y2_g202	    Bit7~Bit6 => x2_g203 204    Notify Packet for STL3888-Ax205    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 0206    BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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|208	  |---------------|     |---------------|    |---------------|    |---------------|209 210    Byte 1: Bit7~Bit6 => 00, Normal data packet211		    => 01, Absolute coordinates packet212		    => 10, Notify packet213		    => 11, Normal data packet with on-pad click214	    Bit5 => 1215	    Bit4 => when in absolute coordinates mode (valid when EN_PKT_GO is 1):216		    0: left button is generated by the on-pad command217		    1: left button is generated by the external button218	    Bit3 => 1219	    Bit2 => Middle Button, 1 is pressed, 0 is not pressed.220	    Bit1 => Right Button, 1 is pressed, 0 is not pressed.221	    Bit0 => Left Button, 1 is pressed, 0 is not pressed.222    Byte 2: Message Type => 0xB7 (Multi Finger, Multi Coordinate mode)223    Byte 3: Bit7~Bit6 => Don't care224	    Bit5~Bit4 => Number of fingers225	    Bit3~Bit1 => Reserved226	    Bit0 => 1: enter gesture mode; 0: leaving gesture mode227    Byte 4: Bit7 => scroll right button228	    Bit6 => scroll left button229	    Bit5 => scroll down button230	    Bit4 => scroll up button231		* Note that if gesture and additional button (Bit4~Bit7)232		happen at the same time, the button information will not233		be sent.234	    Bit3~Bit0 => Reserved235 236Sample sequence of Multi-finger, Multi-coordinate mode:237 238	notify packet (valid bit == 1), abs pkt 1, abs pkt 2, abs pkt 1,239	abs pkt 2, ..., notify packet (valid bit == 0)240 241Absolute position for STL3888-B0242================================243 244::245 246    Packet 1(ABSOLUTE POSITION)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 0248    BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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|250	  |---------------|     |---------------|    |---------------|    |---------------|251 252    Byte 1: Bit7~Bit6 => 00, Normal data packet253		    => 01, Absolute coordinates packet254		    => 10, Notify packet255		    => 11, Normal data packet with on-pad click256	    Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up.257		    When both fingers are up, the last two reports have zero valid258		    bit.259	    Bit4 => finger up/down information. 1: finger down, 0: finger up.260	    Bit3 => 1261	    Bit2 => finger index, 0 is the first finger, 1 is the second finger.262	    Bit1 => Right Button, 1 is pressed, 0 is not pressed.263	    Bit0 => Left Button, 1 is pressed, 0 is not pressed.264    Byte 2: X coordinate (xpos[9:2])265    Byte 3: Y coordinate (ypos[9:2])266    Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])267	    Bit3~Bit2 => X coordinate (ypos[1:0])268	    Bit4 => scroll down button269	    Bit5 => scroll up button270	    Bit6 => scroll left button271	    Bit7 => scroll right button272 273    Packet 2 (ABSOLUTE POSITION)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 0275    BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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|277	  |---------------|     |---------------|    |---------------|    |---------------|278 279    Byte 1: Bit7~Bit6 => 00, Normal data packet280		    => 01, Absolute coordination packet281		    => 10, Notify packet282		    => 11, Normal data packet with on-pad click283	    Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up.284		    When both fingers are up, the last two reports have zero valid285		    bit.286	    Bit4 => finger up/down information. 1: finger down, 0: finger up.287	    Bit3 => 1288	    Bit2 => finger index, 0 is the first finger, 1 is the second finger.289	    Bit1 => Right Button, 1 is pressed, 0 is not pressed.290	    Bit0 => Left Button, 1 is pressed, 0 is not pressed.291    Byte 2: X coordinate (xpos[9:2])292    Byte 3: Y coordinate (ypos[9:2])293    Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])294	    Bit3~Bit2 => X coordinate (ypos[1:0])295	    Bit4 => scroll down button296	    Bit5 => scroll up button297	    Bit6 => scroll left button298	    Bit7 => scroll right button299 300Notify Packet for STL3888-B0::301 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 0303    BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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|305	  |---------------|     |---------------|    |---------------|    |---------------|306 307    Byte 1: Bit7~Bit6 => 00, Normal data packet308		    => 01, Absolute coordination packet309		    => 10, Notify packet310		    => 11, Normal data packet with on-pad click311	    Bit5 => 1312	    Bit4 => when in absolute coordinates mode (valid when EN_PKT_GO is 1):313		    0: left button is generated by the on-pad command314		    1: left button is generated by the external button315	    Bit3 => 1316	    Bit2 => Middle Button, 1 is pressed, 0 is not pressed.317	    Bit1 => Right Button, 1 is pressed, 0 is not pressed.318	    Bit0 => Left Button, 1 is pressed, 0 is not pressed.319    Byte 2: Message Type => 0xB7 (Multi Finger, Multi Coordinate mode)320    Byte 3: Bit7~Bit6 => Don't care321	    Bit5~Bit4 => Number of fingers322	    Bit3~Bit1 => Reserved323	    Bit0 => 1: enter gesture mode; 0: leaving gesture mode324    Byte 4: Bit7 => scroll right button325	    Bit6 => scroll left button326	    Bit5 => scroll up button327	    Bit4 => scroll down button328		* Note that if gesture and additional button(Bit4~Bit7)329		happen at the same time, the button information will not330		be sent.331	    Bit3~Bit0 => Reserved332 333Sample sequence of Multi-finger, Multi-coordinate mode:334 335	notify packet (valid bit == 1), abs pkt 1, abs pkt 2, abs pkt 1,336	abs pkt 2, ..., notify packet (valid bit == 0)337 338Absolute position for STL3888-Cx and STL3888-Dx339===============================================340 341::342 343    Single Finger, Absolute Coordinate Mode (SFAC)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 0345    BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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|347	  |---------------|     |---------------|    |---------------|    |---------------|348 349    Byte 1: Bit7~Bit6 => 00, Normal data packet350		    => 01, Absolute coordinates packet351		    => 10, Notify packet352	    Bit5 => Coordinate mode(always 0 in SFAC mode):353		    0: single-finger absolute coordinates (SFAC) mode354		    1: multi-finger, multiple coordinates (MFMC) mode355	    Bit4 => 0: The LEFT button is generated by on-pad command (OPC)356		    1: The LEFT button is generated by external button357		    Default is 1 even if the LEFT button is not pressed.358	    Bit3 => Always 1, as specified by PS/2 protocol.359	    Bit2 => Middle Button, 1 is pressed, 0 is not pressed.360	    Bit1 => Right Button, 1 is pressed, 0 is not pressed.361	    Bit0 => Left Button, 1 is pressed, 0 is not pressed.362    Byte 2: X coordinate (xpos[9:2])363    Byte 3: Y coordinate (ypos[9:2])364    Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])365	    Bit3~Bit2 => X coordinate (ypos[1:0])366	    Bit4 => 4th mouse button(forward one page)367	    Bit5 => 5th mouse button(backward one page)368	    Bit6 => scroll left button369	    Bit7 => scroll right button370 371    Multi Finger, Multiple Coordinates Mode (MFMC):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 0373    BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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|375	  |---------------|     |---------------|    |---------------|    |---------------|376 377    Byte 1: Bit7~Bit6 => 00, Normal data packet378		    => 01, Absolute coordination packet379		    => 10, Notify packet380	    Bit5 => Coordinate mode (always 1 in MFMC mode):381		    0: single-finger absolute coordinates (SFAC) mode382		    1: multi-finger, multiple coordinates (MFMC) mode383	    Bit4 => 0: The LEFT button is generated by on-pad command (OPC)384		    1: The LEFT button is generated by external button385		    Default is 1 even if the LEFT button is not pressed.386	    Bit3 => Always 1, as specified by PS/2 protocol.387	    Bit2 => Finger index, 0 is the first finger, 1 is the second finger.388		    If bit 1 and 0 are all 1 and bit 4 is 0, the middle external389		    button is pressed.390	    Bit1 => Right Button, 1 is pressed, 0 is not pressed.391	    Bit0 => Left Button, 1 is pressed, 0 is not pressed.392    Byte 2: X coordinate (xpos[9:2])393    Byte 3: Y coordinate (ypos[9:2])394    Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])395	    Bit3~Bit2 => X coordinate (ypos[1:0])396	    Bit4 => 4th mouse button(forward one page)397	    Bit5 => 5th mouse button(backward one page)398	    Bit6 => scroll left button399	    Bit7 => scroll right button400 401When one of the two fingers is up, the device will output four consecutive402MFMC#0 report packets with zero X and Y to represent 1st finger is up or403four consecutive MFMC#1 report packets with zero X and Y to represent that404the 2nd finger is up.  On the other hand, if both fingers are up, the device405will output four consecutive single-finger, absolute coordinate(SFAC) packets406with zero X and Y.407 408Notify Packet for STL3888-Cx/Dx::409 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 0411    BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|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|413	  |---------------|     |---------------|    |---------------|    |---------------|414 415    Byte 1: Bit7~Bit6 => 00, Normal data packet416		    => 01, Absolute coordinates packet417		    => 10, Notify packet418	    Bit5 => Always 0419	    Bit4 => 0: The LEFT button is generated by on-pad command(OPC)420		    1: The LEFT button is generated by external button421		    Default is 1 even if the LEFT button is not pressed.422	    Bit3 => 1423	    Bit2 => Middle Button, 1 is pressed, 0 is not pressed.424	    Bit1 => Right Button, 1 is pressed, 0 is not pressed.425	    Bit0 => Left Button, 1 is pressed, 0 is not pressed.426    Byte 2: Message type:427	    0xba => gesture information428	    0xc0 => one finger hold-rotating gesture429    Byte 3: The first parameter for the received message:430	    0xba => gesture ID (refer to the 'Gesture ID' section)431	    0xc0 => region ID432    Byte 4: The second parameter for the received message:433	    0xba => N/A434	    0xc0 => finger up/down information435 436Sample sequence of Multi-finger, Multi-coordinates mode:437 438	notify packet (valid bit == 1), MFMC packet 1 (byte 1, bit 2 == 0),439	MFMC packet 2 (byte 1, bit 2 == 1), MFMC packet 1, MFMC packet 2,440	..., notify packet (valid bit == 0)441 442	That is, when the device is in MFMC mode, the host will receive443	interleaved absolute coordinate packets for each finger.444 445FSP Enable/Disable packet446=========================447 448::449 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 0451    BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|452      1   |Y|X|0|0|1|M|R|L|  2  |0|1|0|1|1|0|1|E|  3 | | | | | | | | |  4 | | | | | | | | |453	  |---------------|     |---------------|    |---------------|    |---------------|454 455    FSP will send out enable/disable packet when FSP receive PS/2 enable/disable456    command. Host will receive the packet which Middle, Right, Left button will457    be set. The packet only use byte 0 and byte 1 as a pattern of original packet.458    Ignore the other bytes of the packet.459 460    Byte 1: Bit7 => 0, Y overflow461	    Bit6 => 0, X overflow462	    Bit5 => 0, Y sign bit463	    Bit4 => 0, X sign bit464	    Bit3 => 1465	    Bit2 => 1, Middle Button466	    Bit1 => 1, Right Button467	    Bit0 => 1, Left Button468    Byte 2: Bit7~1 => (0101101b)469	    Bit0 => 1 = Enable470		    0 = Disable471    Byte 3: Don't care472    Byte 4: Don't care (MOUSE ID 3, 4)473    Byte 5~8: Don't care (Absolute packet)474 475PS/2 Command Set476================477 478FSP supports basic PS/2 commanding set and modes, refer to following URL for479details about PS/2 commands:480 481http://www.computer-engineering.org/ps2mouse/482 483Programming Sequence for Determining Packet Parsing Flow484========================================================485 4861. Identify FSP by reading device ID(0x00) and version(0x01) register487 4882. For FSP version < STL3888 Cx, determine number of buttons by reading489   the 'test mode status' (0x20) register::490 491	buttons = reg[0x20] & 0x30492 493	if buttons == 0x30 or buttons == 0x20:494		# two/four buttons495		Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse'496		section A for packet parsing detail(ignore byte 4, bit ~ 7)497	elif buttons == 0x10:498		# 6 buttons499		Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse'500		section B for packet parsing detail501	elif buttons == 0x00:502		# 6 buttons503		Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse'504		section A for packet parsing detail505 5063. For FSP version >= STL3888 Cx:507	Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse'508	section A for packet parsing detail (ignore byte 4, bit ~ 7)509 510Programming Sequence for Register Reading/Writing511=================================================512 513Register inversion requirement:514 515Following values needed to be inverted(the '~' operator in C) before being516sent to FSP::517 518	0xe8, 0xe9, 0xee, 0xf2, 0xf3 and 0xff.519 520Register swapping requirement:521 522Following values needed to have their higher 4 bits and lower 4 bits being523swapped before being sent to FSP::524 525	10, 20, 40, 60, 80, 100 and 200.526 527Register reading sequence:528 529	1. send 0xf3 PS/2 command to FSP;530 531	2. send 0x66 PS/2 command to FSP;532 533	3. send 0x88 PS/2 command to FSP;534 535	4. send 0xf3 PS/2 command to FSP;536 537	5. if the register address being to read is not required to be538	inverted(refer to the 'Register inversion requirement' section),539	goto step 6540 541	  a. send 0x68 PS/2 command to FSP;542 543	  b. send the inverted register address to FSP and goto step 8;544 545	6. if the register address being to read is not required to be546	swapped(refer to the 'Register swapping requirement' section),547	goto step 7548 549	  a. send 0xcc PS/2 command to FSP;550 551	  b. send the swapped register address to FSP and goto step 8;552 553	7. send 0x66 PS/2 command to FSP;554 555	  a. send the original register address to FSP and goto step 8;556 557	8. send 0xe9(status request) PS/2 command to FSP;558 559	9. the 4th byte of the response read from FSP should be the560	requested register value(?? indicates don't care byte)::561 562		host: 0xe9563		3888: 0xfa (??) (??) (val)564 565	* Note that since the Cx release, the hardware will return 1's566	  complement of the register value at the 3rd byte of status request567	  result::568 569		host: 0xe9570		3888: 0xfa (??) (~val) (val)571 572Register writing sequence:573 574	1. send 0xf3 PS/2 command to FSP;575 576	2. if the register address being to write is not required to be577	inverted(refer to the 'Register inversion requirement' section),578	goto step 3579 580	  a. send 0x74 PS/2 command to FSP;581 582	  b. send the inverted register address to FSP and goto step 5;583 584	3. if the register address being to write is not required to be585	swapped(refer to the 'Register swapping requirement' section),586	goto step 4587 588	  a. send 0x77 PS/2 command to FSP;589 590	  b. send the swapped register address to FSP and goto step 5;591 592	4. send 0x55 PS/2 command to FSP;593 594	  a. send the register address to FSP and goto step 5;595 596	5. send 0xf3 PS/2 command to FSP;597 598	6. if the register value being to write is not required to be599	inverted(refer to the 'Register inversion requirement' section),600	goto step 7601 602	  a. send 0x47 PS/2 command to FSP;603 604	  b. send the inverted register value to FSP and goto step 9;605 606	7. if the register value being to write is not required to be607	swapped(refer to the 'Register swapping requirement' section),608	goto step 8609 610	  a. send 0x44 PS/2 command to FSP;611 612	  b. send the swapped register value to FSP and goto step 9;613 614	8. send 0x33 PS/2 command to FSP;615 616	  a. send the register value to FSP;617 618	9. the register writing sequence is completed.619 620	* Since the Cx release, the hardware will return 1's621	  complement of the register value at the 3rd byte of status request622	  result. Host can optionally send another 0xe9 (status request) PS/2623	  command to FSP at the end of register writing to verify that the624	  register writing operation is successful (?? indicates don't care625	  byte)::626 627		host: 0xe9628		3888: 0xfa (??) (~val) (val)629 630Programming Sequence for Page Register Reading/Writing631======================================================632 633In order to overcome the limitation of maximum number of registers634supported, the hardware separates register into different groups called635'pages.' Each page is able to include up to 255 registers.636 637The default page after power up is 0x82; therefore, if one has to get638access to register 0x8301, one has to use following sequence to switch639to page 0x83, then start reading/writing from/to offset 0x01 by using640the register read/write sequence described in previous section.641 642Page register reading sequence:643 644	1. send 0xf3 PS/2 command to FSP;645 646	2. send 0x66 PS/2 command to FSP;647 648	3. send 0x88 PS/2 command to FSP;649 650	4. send 0xf3 PS/2 command to FSP;651 652	5. send 0x83 PS/2 command to FSP;653 654	6. send 0x88 PS/2 command to FSP;655 656	7. send 0xe9(status request) PS/2 command to FSP;657 658	8. the response read from FSP should be the requested page value.659 660 661Page register writing sequence:662 663	1. send 0xf3 PS/2 command to FSP;664 665	2. send 0x38 PS/2 command to FSP;666 667	3. send 0x88 PS/2 command to FSP;668 669	4. send 0xf3 PS/2 command to FSP;670 671	5. if the page address being written is not required to be672	inverted(refer to the 'Register inversion requirement' section),673	goto step 6674 675	  a. send 0x47 PS/2 command to FSP;676 677	  b. send the inverted page address to FSP and goto step 9;678 679	6. if the page address being written is not required to be680	swapped(refer to the 'Register swapping requirement' section),681	goto step 7682 683	  a. send 0x44 PS/2 command to FSP;684 685	  b. send the swapped page address to FSP and goto step 9;686 687	7. send 0x33 PS/2 command to FSP;688 689	8. send the page address to FSP;690 691	9. the page register writing sequence is completed.692 693Gesture ID694==========695 696Unlike other devices which sends multiple fingers' coordinates to host,697FSP processes multiple fingers' coordinates internally and convert them698into a 8 bits integer, namely 'Gesture ID.'  Following is a list of699supported gesture IDs:700 701	======= ==================================702	ID	Description703	======= ==================================704	0x86	2 finger straight up705	0x82	2 finger straight down706	0x80	2 finger straight right707	0x84	2 finger straight left708	0x8f	2 finger zoom in709	0x8b	2 finger zoom out710	0xc0	2 finger curve, counter clockwise711	0xc4	2 finger curve, clockwise712	0x2e	3 finger straight up713	0x2a	3 finger straight down714	0x28	3 finger straight right715	0x2c	3 finger straight left716	0x38	palm717	======= ==================================718 719Register Listing720================721 722Registers are represented in 16 bits values. The higher 8 bits represent723the page address and the lower 8 bits represent the relative offset within724that particular page.  Refer to the 'Programming Sequence for Page Register725Reading/Writing' section for instructions on how to change current page726address::727 728 offset	width		default	r/w	name729 0x8200	bit7~bit0	0x01	RO	device ID730 731 0x8201	bit7~bit0		RW	version ID732					0xc1: STL3888 Ax733					0xd0 ~ 0xd2: STL3888 Bx734					0xe0 ~ 0xe1: STL3888 Cx735					0xe2 ~ 0xe3: STL3888 Dx736 737 0x8202	bit7~bit0	0x01	RO	vendor ID738 739 0x8203	bit7~bit0	0x01	RO	product ID740 741 0x8204	bit3~bit0	0x01	RW	revision ID742 743 0x820b					test mode status 1744	bit3		1	RO	0: rotate 180 degree745					1: no rotation746					*only supported by H/W prior to Cx747 748 0x820f					register file page control749	bit2		0	RW	1: rotate 180 degree750					0: no rotation751					*supported since Cx752 753	bit0		0	RW	1 to enable page 1 register files754					*only supported by H/W prior to Cx755 756 0x8210				RW	system control 1757	bit0		1	RW	Reserved, must be 1758	bit1		0	RW	Reserved, must be 0759	bit4		0	RW	Reserved, must be 0760	bit5		1	RW	register clock gating enable761					0: read only, 1: read/write enable762	(Note that following registers does not require clock gating being763	enabled prior to write: 05 06 07 08 09 0c 0f 10 11 12 16 17 18 23 2e764	40 41 42 43.  In addition to that, this bit must be 1 when gesture765	mode is enabled)766 767 0x8220					test mode status768	bit5~bit4		RO	number of buttons769					11 => 2, lbtn/rbtn770					10 => 4, lbtn/rbtn/scru/scrd771					01 => 6, lbtn/rbtn/scru/scrd/scrl/scrr772					00 => 6, lbtn/rbtn/scru/scrd/fbtn/bbtn773					*only supported by H/W prior to Cx774 775 0x8231				RW	on-pad command detection776	bit7		0	RW	on-pad command left button down tag777					enable778					0: disable, 1: enable779					*only supported by H/W prior to Cx780 781 0x8234				RW	on-pad command control 5782	bit4~bit0	0x05	RW	XLO in 0s/4/1, so 03h = 0010.1b = 2.5783	(Note that position unit is in 0.5 scanline)784					*only supported by H/W prior to Cx785 786	bit7		0	RW	on-pad tap zone enable787					0: disable, 1: enable788					*only supported by H/W prior to Cx789 790 0x8235				RW	on-pad command control 6791	bit4~bit0	0x1d	RW	XHI in 0s/4/1, so 19h = 1100.1b = 12.5792	(Note that position unit is in 0.5 scanline)793					*only supported by H/W prior to Cx794 795 0x8236				RW	on-pad command control 7796	bit4~bit0	0x04	RW	YLO in 0s/4/1, so 03h = 0010.1b = 2.5797	(Note that position unit is in 0.5 scanline)798					*only supported by H/W prior to Cx799 800 0x8237				RW	on-pad command control 8801	bit4~bit0	0x13	RW	YHI in 0s/4/1, so 11h = 1000.1b = 8.5802	(Note that position unit is in 0.5 scanline)803					*only supported by H/W prior to Cx804 805 0x8240				RW	system control 5806	bit1		0	RW	FSP Intellimouse mode enable807					0: disable, 1: enable808					*only supported by H/W prior to Cx809 810	bit2		0	RW	movement + abs. coordinate mode enable811					0: disable, 1: enable812	(Note that this function has the functionality of bit 1 even when813	bit 1 is not set. However, the format is different from that of bit 1.814	In addition, when bit 1 and bit 2 are set at the same time, bit 2 will815	override bit 1.)816					*only supported by H/W prior to Cx817 818	bit3		0	RW	abs. coordinate only mode enable819					0: disable, 1: enable820	(Note that this function has the functionality of bit 1 even when821	bit 1 is not set. However, the format is different from that of bit 1.822	In addition, when bit 1, bit 2 and bit 3 are set at the same time,823	bit 3 will override bit 1 and 2.)824					*only supported by H/W prior to Cx825 826	bit5		0	RW	auto switch enable827					0: disable, 1: enable828					*only supported by H/W prior to Cx829 830	bit6		0	RW	G0 abs. + notify packet format enable831					0: disable, 1: enable832	(Note that the absolute/relative coordinate output still depends on833	bit 2 and 3.  That is, if any of those bit is 1, host will receive834	absolute coordinates; otherwise, host only receives packets with835	relative coordinate.)836					*only supported by H/W prior to Cx837 838	bit7		0	RW	EN_PS2_F2: PS/2 gesture mode 2nd839					finger packet enable840					0: disable, 1: enable841					*only supported by H/W prior to Cx842 843 0x8243				RW	on-pad control844	bit0		0	RW	on-pad control enable845					0: disable, 1: enable846	(Note that if this bit is cleared, bit 3/5 will be ineffective)847					*only supported by H/W prior to Cx848 849	bit3		0	RW	on-pad fix vertical scrolling enable850					0: disable, 1: enable851					*only supported by H/W prior to Cx852 853	bit5		0	RW	on-pad fix horizontal scrolling enable854					0: disable, 1: enable855					*only supported by H/W prior to Cx856 857 0x8290				RW	software control register 1858	bit0		0	RW	absolute coordination mode859					0: disable, 1: enable860					*supported since Cx861 862	bit1		0	RW	gesture ID output863					0: disable, 1: enable864					*supported since Cx865 866	bit2		0	RW	two fingers' coordinates output867					0: disable, 1: enable868					*supported since Cx869 870	bit3		0	RW	finger up one packet output871					0: disable, 1: enable872					*supported since Cx873 874	bit4		0	RW	absolute coordination continuous mode875					0: disable, 1: enable876					*supported since Cx877 878	bit6~bit5	00	RW	gesture group selection879					00: basic880					01: suite881					10: suite pro882					11: advanced883					*supported since Cx884 885	bit7		0	RW	Bx packet output compatible mode886					0: disable, 1: enable887					*supported since Cx888					*supported since Cx889 890 891 0x833d				RW	on-pad command control 1892	bit7		1	RW	on-pad command detection enable893					0: disable, 1: enable894					*supported since Cx895 896 0x833e				RW	on-pad command detection897	bit7		0	RW	on-pad command left button down tag898					enable. Works only in H/W based PS/2899					data packet mode.900					0: disable, 1: enable901					*supported since Cx902