linux/Documentation/input/devices/sentelic.rst
<<
>>
Prefs
   1.. include:: <isonum.txt>
   2
   3=================
   4Sentelic Touchpad
   5=================
   6
   7
   8:Copyright: |copy| 2002-2011 Sentelic Corporation.
   9
  10:Last update: Dec-07-2011
  11
  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 Backward
  16   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 1
  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
  28    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 overflow
  33            Bit6 => X overflow
  34            Bit5 => Y sign bit
  35            Bit4 => X sign bit
  36            Bit3 => 1
  37            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 ~ +7
  44            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 scrolling
  50
  51- Set bit 1 in register 0x40 to 1
  52
  53FSP replaces scrolling wheel's movement as 4 bits to show horizontal and
  54vertical scrolling.
  55
  56::
  57
  58    Packet 1
  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
  60    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 overflow
  65            Bit6 => X overflow
  66            Bit5 => Y sign bit
  67            Bit4 => X sign bit
  68            Bit3 => 1
  69            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 7
  84
  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-G0
  95================================
  96
  971. Set bit 2 or 3 in register 0x40 to 1
  982. Set bit 6 in register 0x40 to 1
  99
 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 0
 104    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 packet
 109                    => 01, Absolute coordination packet
 110                    => 10, Notify packet
 111            Bit5 => valid bit
 112            Bit4 => 1
 113            Bit3 => 1
 114            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 up
 122            Bit5 => scroll down
 123            Bit6 => scroll left
 124            Bit7 => scroll right
 125
 126    Notify Packet for G0
 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
 128    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 packet
 133                    => 01, Absolute coordination packet
 134                    => 10, Notify packet
 135            Bit5 => 0
 136            Bit4 => 1
 137            Bit3 => 1
 138            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 Care
 148
 149Absolute position for STL3888-Ax
 150================================
 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 0
 156    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 packet
 161                    => 01, Absolute coordination packet
 162                    => 10, Notify packet
 163                    => 11, Normal data packet with on-pad click
 164            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 valid
 166                    bit.
 167            Bit4 => arc
 168            Bit3 => 1
 169            Bit2 => Left Button, 1 is pressed, 0 is released.
 170            Bit1 => 0
 171            Bit0 => 1
 172    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_g
 177            Bit7~Bit6 => x1_g
 178
 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 0
 181    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 packet
 186                    => 01, Absolute coordinates packet
 187                    => 10, Notify packet
 188                    => 11, Normal data packet with on-pad click
 189            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 valid
 191                    bit.
 192            Bit4 => arc
 193            Bit3 => 1
 194            Bit2 => Right Button, 1 is pressed, 0 is released.
 195            Bit1 => 1
 196            Bit0 => 0
 197    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_g
 202            Bit7~Bit6 => x2_g
 203
 204    Notify Packet for STL3888-Ax
 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
 206    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 packet
 211                    => 01, Absolute coordinates packet
 212                    => 10, Notify packet
 213                    => 11, Normal data packet with on-pad click
 214            Bit5 => 1
 215            Bit4 => when in absolute coordinates mode (valid when EN_PKT_GO is 1):
 216                    0: left button is generated by the on-pad command
 217                    1: left button is generated by the external button
 218            Bit3 => 1
 219            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 care
 224            Bit5~Bit4 => Number of fingers
 225            Bit3~Bit1 => Reserved
 226            Bit0 => 1: enter gesture mode; 0: leaving gesture mode
 227    Byte 4: Bit7 => scroll right button
 228            Bit6 => scroll left button
 229            Bit5 => scroll down button
 230            Bit4 => scroll up button
 231                * Note that if gesture and additional button (Bit4~Bit7)
 232                happen at the same time, the button information will not
 233                be sent.
 234            Bit3~Bit0 => Reserved
 235
 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-B0
 242================================
 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 0
 248    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 packet
 253                    => 01, Absolute coordinates packet
 254                    => 10, Notify packet
 255                    => 11, Normal data packet with on-pad click
 256            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 valid
 258                    bit.
 259            Bit4 => finger up/down information. 1: finger down, 0: finger up.
 260            Bit3 => 1
 261            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 button
 269            Bit5 => scroll up button
 270            Bit6 => scroll left button
 271            Bit7 => scroll right button
 272
 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 0
 275    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 packet
 280                    => 01, Absolute coordination packet
 281                    => 10, Notify packet
 282                    => 11, Normal data packet with on-pad click
 283            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 valid
 285                    bit.
 286            Bit4 => finger up/down information. 1: finger down, 0: finger up.
 287            Bit3 => 1
 288            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 button
 296            Bit5 => scroll up button
 297            Bit6 => scroll left button
 298            Bit7 => scroll right button
 299
 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 0
 303    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 packet
 308                    => 01, Absolute coordination packet
 309                    => 10, Notify packet
 310                    => 11, Normal data packet with on-pad click
 311            Bit5 => 1
 312            Bit4 => when in absolute coordinates mode (valid when EN_PKT_GO is 1):
 313                    0: left button is generated by the on-pad command
 314                    1: left button is generated by the external button
 315            Bit3 => 1
 316            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 care
 321            Bit5~Bit4 => Number of fingers
 322            Bit3~Bit1 => Reserved
 323            Bit0 => 1: enter gesture mode; 0: leaving gesture mode
 324    Byte 4: Bit7 => scroll right button
 325            Bit6 => scroll left button
 326            Bit5 => scroll up button
 327            Bit4 => scroll down button
 328                * Note that if gesture and additional button(Bit4~Bit7)
 329                happen at the same time, the button information will not
 330                be sent.
 331            Bit3~Bit0 => Reserved
 332
 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-Dx
 339===============================================
 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 0
 345    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 packet
 350                    => 01, Absolute coordinates packet
 351                    => 10, Notify packet
 352            Bit5 => Coordinate mode(always 0 in SFAC mode):
 353                    0: single-finger absolute coordinates (SFAC) mode
 354                    1: multi-finger, multiple coordinates (MFMC) mode
 355            Bit4 => 0: The LEFT button is generated by on-pad command (OPC)
 356                    1: The LEFT button is generated by external button
 357                    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 button
 369            Bit7 => scroll right button
 370
 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 0
 373    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 packet
 378                    => 01, Absolute coordination packet
 379                    => 10, Notify packet
 380            Bit5 => Coordinate mode (always 1 in MFMC mode):
 381                    0: single-finger absolute coordinates (SFAC) mode
 382                    1: multi-finger, multiple coordinates (MFMC) mode
 383            Bit4 => 0: The LEFT button is generated by on-pad command (OPC)
 384                    1: The LEFT button is generated by external button
 385                    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 external
 389                    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 button
 399            Bit7 => scroll right button
 400
 401When one of the two fingers is up, the device will output four consecutive
 402MFMC#0 report packets with zero X and Y to represent 1st finger is up or
 403four consecutive MFMC#1 report packets with zero X and Y to represent that
 404the 2nd finger is up.  On the other hand, if both fingers are up, the device
 405will output four consecutive single-finger, absolute coordinate(SFAC) packets
 406with 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 0
 411    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 packet
 416                    => 01, Absolute coordinates packet
 417                    => 10, Notify packet
 418            Bit5 => Always 0
 419            Bit4 => 0: The LEFT button is generated by on-pad command(OPC)
 420                    1: The LEFT button is generated by external button
 421                    Default is 1 even if the LEFT button is not pressed.
 422            Bit3 => 1
 423            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 information
 428            0xc0 => one finger hold-rotating gesture
 429    Byte 3: The first parameter for the received message:
 430            0xba => gesture ID (refer to the 'Gesture ID' section)
 431            0xc0 => region ID
 432    Byte 4: The second parameter for the received message:
 433            0xba => N/A
 434            0xc0 => finger up/down information
 435
 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 receive
 443        interleaved absolute coordinate packets for each finger.
 444
 445FSP Enable/Disable packet
 446=========================
 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 0
 451    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/disable
 456    command. Host will receive the packet which Middle, Right, Left button will
 457    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 overflow
 461            Bit6 => 0, X overflow
 462            Bit5 => 0, Y sign bit
 463            Bit4 => 0, X sign bit
 464            Bit3 => 1
 465            Bit2 => 1, Middle Button
 466            Bit1 => 1, Right Button
 467            Bit0 => 1, Left Button
 468    Byte 2: Bit7~1 => (0101101b)
 469            Bit0 => 1 = Enable
 470                    0 = Disable
 471    Byte 3: Don't care
 472    Byte 4: Don't care (MOUSE ID 3, 4)
 473    Byte 5~8: Don't care (Absolute packet)
 474
 475PS/2 Command Set
 476================
 477
 478FSP supports basic PS/2 commanding set and modes, refer to following URL for
 479details about PS/2 commands:
 480
 481http://www.computer-engineering.org/ps2mouse/
 482
 483Programming Sequence for Determining Packet Parsing Flow
 484========================================================
 485
 4861. Identify FSP by reading device ID(0x00) and version(0x01) register
 487
 4882. For FSP version < STL3888 Cx, determine number of buttons by reading
 489   the 'test mode status' (0x20) register::
 490
 491        buttons = reg[0x20] & 0x30
 492
 493        if buttons == 0x30 or buttons == 0x20:
 494                # two/four buttons
 495                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 buttons
 499                Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse'
 500                section B for packet parsing detail
 501        elif buttons == 0x00:
 502                # 6 buttons
 503                Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse'
 504                section A for packet parsing detail
 505
 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/Writing
 511=================================================
 512
 513Register inversion requirement:
 514
 515Following values needed to be inverted(the '~' operator in C) before being
 516sent 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 being
 523swapped 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 be
 538        inverted(refer to the 'Register inversion requirement' section),
 539        goto step 6
 540
 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 be
 546        swapped(refer to the 'Register swapping requirement' section),
 547        goto step 7
 548
 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 the
 560        requested register value(?? indicates don't care byte)::
 561
 562                host: 0xe9
 563                3888: 0xfa (??) (??) (val)
 564
 565        * Note that since the Cx release, the hardware will return 1's
 566          complement of the register value at the 3rd byte of status request
 567          result::
 568
 569                host: 0xe9
 570                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 be
 577        inverted(refer to the 'Register inversion requirement' section),
 578        goto step 3
 579
 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 be
 585        swapped(refer to the 'Register swapping requirement' section),
 586        goto step 4
 587
 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 be
 599        inverted(refer to the 'Register inversion requirement' section),
 600        goto step 7
 601
 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 be
 607        swapped(refer to the 'Register swapping requirement' section),
 608        goto step 8
 609
 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's
 621          complement of the register value at the 3rd byte of status request
 622          result. Host can optionally send another 0xe9 (status request) PS/2
 623          command to FSP at the end of register writing to verify that the
 624          register writing operation is successful (?? indicates don't care
 625          byte)::
 626
 627                host: 0xe9
 628                3888: 0xfa (??) (~val) (val)
 629
 630Programming Sequence for Page Register Reading/Writing
 631======================================================
 632
 633In order to overcome the limitation of maximum number of registers
 634supported, the hardware separates register into different groups called
 635'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 get
 638access to register 0x8301, one has to use following sequence to switch
 639to page 0x83, then start reading/writing from/to offset 0x01 by using
 640the 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 be
 672        inverted(refer to the 'Register inversion requirement' section),
 673        goto step 6
 674
 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 be
 680        swapped(refer to the 'Register swapping requirement' section),
 681        goto step 7
 682
 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 ID
 694==========
 695
 696Unlike other devices which sends multiple fingers' coordinates to host,
 697FSP processes multiple fingers' coordinates internally and convert them
 698into a 8 bits integer, namely 'Gesture ID.'  Following is a list of
 699supported gesture IDs:
 700
 701        ======= ==================================
 702        ID      Description
 703        ======= ==================================
 704        0x86    2 finger straight up
 705        0x82    2 finger straight down
 706        0x80    2 finger straight right
 707        0x84    2 finger straight left
 708        0x8f    2 finger zoom in
 709        0x8b    2 finger zoom out
 710        0xc0    2 finger curve, counter clockwise
 711        0xc4    2 finger curve, clockwise
 712        0x2e    3 finger straight up
 713        0x2a    3 finger straight down
 714        0x28    3 finger straight right
 715        0x2c    3 finger straight left
 716        0x38    palm
 717        ======= ==================================
 718
 719Register Listing
 720================
 721
 722Registers are represented in 16 bits values. The higher 8 bits represent
 723the page address and the lower 8 bits represent the relative offset within
 724that particular page.  Refer to the 'Programming Sequence for Page Register
 725Reading/Writing' section for instructions on how to change current page
 726address::
 727
 728 offset width           default r/w     name
 729 0x8200 bit7~bit0       0x01    RO      device ID
 730
 731 0x8201 bit7~bit0               RW      version ID
 732                                        0xc1: STL3888 Ax
 733                                        0xd0 ~ 0xd2: STL3888 Bx
 734                                        0xe0 ~ 0xe1: STL3888 Cx
 735                                        0xe2 ~ 0xe3: STL3888 Dx
 736
 737 0x8202 bit7~bit0       0x01    RO      vendor ID
 738
 739 0x8203 bit7~bit0       0x01    RO      product ID
 740
 741 0x8204 bit3~bit0       0x01    RW      revision ID
 742
 743 0x820b                                 test mode status 1
 744        bit3            1       RO      0: rotate 180 degree
 745                                        1: no rotation
 746                                        *only supported by H/W prior to Cx
 747
 748 0x820f                                 register file page control
 749        bit2            0       RW      1: rotate 180 degree
 750                                        0: no rotation
 751                                        *supported since Cx
 752
 753        bit0            0       RW      1 to enable page 1 register files
 754                                        *only supported by H/W prior to Cx
 755
 756 0x8210                         RW      system control 1
 757        bit0            1       RW      Reserved, must be 1
 758        bit1            0       RW      Reserved, must be 0
 759        bit4            0       RW      Reserved, must be 0
 760        bit5            1       RW      register clock gating enable
 761                                        0: read only, 1: read/write enable
 762        (Note that following registers does not require clock gating being
 763        enabled prior to write: 05 06 07 08 09 0c 0f 10 11 12 16 17 18 23 2e
 764        40 41 42 43.  In addition to that, this bit must be 1 when gesture
 765        mode is enabled)
 766
 767 0x8220                                 test mode status
 768        bit5~bit4               RO      number of buttons
 769                                        11 => 2, lbtn/rbtn
 770                                        10 => 4, lbtn/rbtn/scru/scrd
 771                                        01 => 6, lbtn/rbtn/scru/scrd/scrl/scrr
 772                                        00 => 6, lbtn/rbtn/scru/scrd/fbtn/bbtn
 773                                        *only supported by H/W prior to Cx
 774
 775 0x8231                         RW      on-pad command detection
 776        bit7            0       RW      on-pad command left button down tag
 777                                        enable
 778                                        0: disable, 1: enable
 779                                        *only supported by H/W prior to Cx
 780
 781 0x8234                         RW      on-pad command control 5
 782        bit4~bit0       0x05    RW      XLO in 0s/4/1, so 03h = 0010.1b = 2.5
 783        (Note that position unit is in 0.5 scanline)
 784                                        *only supported by H/W prior to Cx
 785
 786        bit7            0       RW      on-pad tap zone enable
 787                                        0: disable, 1: enable
 788                                        *only supported by H/W prior to Cx
 789
 790 0x8235                         RW      on-pad command control 6
 791        bit4~bit0       0x1d    RW      XHI in 0s/4/1, so 19h = 1100.1b = 12.5
 792        (Note that position unit is in 0.5 scanline)
 793                                        *only supported by H/W prior to Cx
 794
 795 0x8236                         RW      on-pad command control 7
 796        bit4~bit0       0x04    RW      YLO in 0s/4/1, so 03h = 0010.1b = 2.5
 797        (Note that position unit is in 0.5 scanline)
 798                                        *only supported by H/W prior to Cx
 799
 800 0x8237                         RW      on-pad command control 8
 801        bit4~bit0       0x13    RW      YHI in 0s/4/1, so 11h = 1000.1b = 8.5
 802        (Note that position unit is in 0.5 scanline)
 803                                        *only supported by H/W prior to Cx
 804
 805 0x8240                         RW      system control 5
 806        bit1            0       RW      FSP Intellimouse mode enable
 807                                        0: disable, 1: enable
 808                                        *only supported by H/W prior to Cx
 809
 810        bit2            0       RW      movement + abs. coordinate mode enable
 811                                        0: disable, 1: enable
 812        (Note that this function has the functionality of bit 1 even when
 813        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 will
 815        override bit 1.)
 816                                        *only supported by H/W prior to Cx
 817
 818        bit3            0       RW      abs. coordinate only mode enable
 819                                        0: disable, 1: enable
 820        (Note that this function has the functionality of bit 1 even when
 821        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 Cx
 825
 826        bit5            0       RW      auto switch enable
 827                                        0: disable, 1: enable
 828                                        *only supported by H/W prior to Cx
 829
 830        bit6            0       RW      G0 abs. + notify packet format enable
 831                                        0: disable, 1: enable
 832        (Note that the absolute/relative coordinate output still depends on
 833        bit 2 and 3.  That is, if any of those bit is 1, host will receive
 834        absolute coordinates; otherwise, host only receives packets with
 835        relative coordinate.)
 836                                        *only supported by H/W prior to Cx
 837
 838        bit7            0       RW      EN_PS2_F2: PS/2 gesture mode 2nd
 839                                        finger packet enable
 840                                        0: disable, 1: enable
 841                                        *only supported by H/W prior to Cx
 842
 843 0x8243                         RW      on-pad control
 844        bit0            0       RW      on-pad control enable
 845                                        0: disable, 1: enable
 846        (Note that if this bit is cleared, bit 3/5 will be ineffective)
 847                                        *only supported by H/W prior to Cx
 848
 849        bit3            0       RW      on-pad fix vertical scrolling enable
 850                                        0: disable, 1: enable
 851                                        *only supported by H/W prior to Cx
 852
 853        bit5            0       RW      on-pad fix horizontal scrolling enable
 854                                        0: disable, 1: enable
 855                                        *only supported by H/W prior to Cx
 856
 857 0x8290                         RW      software control register 1
 858        bit0            0       RW      absolute coordination mode
 859                                        0: disable, 1: enable
 860                                        *supported since Cx
 861
 862        bit1            0       RW      gesture ID output
 863                                        0: disable, 1: enable
 864                                        *supported since Cx
 865
 866        bit2            0       RW      two fingers' coordinates output
 867                                        0: disable, 1: enable
 868                                        *supported since Cx
 869
 870        bit3            0       RW      finger up one packet output
 871                                        0: disable, 1: enable
 872                                        *supported since Cx
 873
 874        bit4            0       RW      absolute coordination continuous mode
 875                                        0: disable, 1: enable
 876                                        *supported since Cx
 877
 878        bit6~bit5       00      RW      gesture group selection
 879                                        00: basic
 880                                        01: suite
 881                                        10: suite pro
 882                                        11: advanced
 883                                        *supported since Cx
 884
 885        bit7            0       RW      Bx packet output compatible mode
 886                                        0: disable, 1: enable
 887                                        *supported since Cx
 888                                        *supported since Cx
 889
 890
 891 0x833d                         RW      on-pad command control 1
 892        bit7            1       RW      on-pad command detection enable
 893                                        0: disable, 1: enable
 894                                        *supported since Cx
 895
 896 0x833e                         RW      on-pad command detection
 897        bit7            0       RW      on-pad command left button down tag
 898                                        enable. Works only in H/W based PS/2
 899                                        data packet mode.
 900                                        0: disable, 1: enable
 901                                        *supported since Cx
 902