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