linux/Documentation/input/sentelic.txt
<<
>>
Prefs
   1Copyright (C) 2002-2008 Sentelic Corporation.
   2Last update: Oct-31-2008
   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|l|r|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 Vertical scrolling movement rightward.
  63        Bit3 => the Vertical scrolling movement leftward.
  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) data 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-A0.
 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        Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up.
 144                When both fingers are up, the last two reports have zero valid
 145                bit.
 146        Bit4 => arc
 147        Bit3 => 1
 148        Bit2 => Left Button, 1 is pressed, 0 is released.
 149        Bit1 => 0
 150        Bit0 => 1
 151Byte 2: X coordinate (xpos[9:2])
 152Byte 3: Y coordinate (ypos[9:2])
 153Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])
 154        Bit3~Bit2 => X coordinate (ypos[1:0])
 155        Bit5~Bit4 => y1_g
 156        Bit7~Bit6 => x1_g
 157
 158Packet 2 (ABSOLUTE POSITION)
 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 0
 160BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
 161  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|
 162      |---------------|     |---------------|    |---------------|    |---------------|
 163
 164Byte 1: Bit7~Bit6 => 00, Normal data packet
 165                  => 01, Absolute coordinates packet
 166                  => 10, Notify packet
 167        Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up.
 168                When both fingers are up, the last two reports have zero valid
 169                bit.
 170        Bit4 => arc
 171        Bit3 => 1
 172        Bit2 => Right Button, 1 is pressed, 0 is released.
 173        Bit1 => 1
 174        Bit0 => 0
 175Byte 2: X coordinate (xpos[9:2])
 176Byte 3: Y coordinate (ypos[9:2])
 177Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])
 178        Bit3~Bit2 => X coordinate (ypos[1:0])
 179        Bit5~Bit4 => y2_g
 180        Bit7~Bit6 => x2_g
 181
 182Notify Packet for STL3888-A0
 183   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
 184BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
 185  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|
 186      |---------------|     |---------------|    |---------------|    |---------------|
 187
 188Byte 1: Bit7~Bit6 => 00, Normal data packet
 189                  => 01, Absolute coordination packet
 190                  => 10, Notify packet
 191        Bit5 => 1
 192        Bit4 => when in absolute coordinates mode (valid when EN_PKT_GO is 1):
 193                0: left button is generated by the on-pad command
 194                1: left button is generated by the external button
 195        Bit3 => 1
 196        Bit2 => Middle Button, 1 is pressed, 0 is not pressed.
 197        Bit1 => Right Button, 1 is pressed, 0 is not pressed.
 198        Bit0 => Left Button, 1 is pressed, 0 is not pressed.
 199Byte 2: Message Type => 0xB7 (Multi Finger, Multi Coordinate mode)
 200Byte 3: Bit7~Bit6 => Don't care
 201        Bit5~Bit4 => Number of fingers
 202        Bit3~Bit1 => Reserved
 203        Bit0 => 1: enter gesture mode; 0: leaving gesture mode
 204Byte 4: Bit7 => scroll right button
 205        Bit6 => scroll left button
 206        Bit5 => scroll down button
 207        Bit4 => scroll up button
 208            * Note that if gesture and additional button (Bit4~Bit7)
 209              happen at the same time, the button information will not
 210              be sent.
 211        Bit3~Bit0 => Reserved
 212
 213Sample sequence of Multi-finger, Multi-coordinate mode:
 214
 215        notify packet (valid bit == 1), abs pkt 1, abs pkt 2, abs pkt 1,
 216        abs pkt 2, ..., notify packet(valid bit == 0)
 217
 218==============================================================================
 219* FSP Enable/Disable packet
 220==============================================================================
 221   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
 222BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
 223  1   |Y|X|0|0|1|M|R|L|  2  |0|1|0|1|1|0|1|E|  3 | | | | | | | | |  4 | | | | | | | | |
 224      |---------------|     |---------------|    |---------------|    |---------------|
 225
 226FSP will send out enable/disable packet when FSP receive PS/2 enable/disable
 227command. Host will receive the packet which Middle, Right, Left button will
 228be set. The packet only use byte 0 and byte 1 as a pattern of original packet.
 229Ignore the other bytes of the packet.
 230
 231Byte 1: Bit7 => 0, Y overflow
 232        Bit6 => 0, X overflow
 233        Bit5 => 0, Y sign bit
 234        Bit4 => 0, X sign bit
 235        Bit3 => 1
 236        Bit2 => 1, Middle Button
 237        Bit1 => 1, Right Button
 238        Bit0 => 1, Left Button
 239Byte 2: Bit7~1 => (0101101b)
 240        Bit0 => 1 = Enable
 241                0 = Disable
 242Byte 3: Don't care
 243Byte 4: Don't care (MOUSE ID 3, 4)
 244Byte 5~8: Don't care (Absolute packet)
 245
 246==============================================================================
 247* PS/2 Command Set
 248==============================================================================
 249
 250FSP supports basic PS/2 commanding set and modes, refer to following URL for
 251details about PS/2 commands:
 252
 253http://www.computer-engineering.org/index.php?title=PS/2_Mouse_Interface
 254
 255==============================================================================
 256* Programming Sequence for Determining Packet Parsing Flow
 257==============================================================================
 2581. Identify FSP by reading device ID(0x00) and version(0x01) register
 259
 2602. Determine number of buttons by reading status2 (0x0b) register
 261
 262        buttons = reg[0x0b] & 0x30
 263
 264        if buttons == 0x30 or buttons == 0x20:
 265                # two/four buttons
 266                Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse'
 267                section A for packet parsing detail(ignore byte 4, bit ~ 7)
 268        elif buttons == 0x10:
 269                # 6 buttons
 270                Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse'
 271                section B for packet parsing detail
 272        elif buttons == 0x00:
 273                # 6 buttons
 274                Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse'
 275                section A for packet parsing detail
 276
 277==============================================================================
 278* Programming Sequence for Register Reading/Writing
 279==============================================================================
 280
 281Register inversion requirement:
 282
 283  Following values needed to be inverted(the '~' operator in C) before being
 284sent to FSP:
 285
 286        0xe9, 0xee, 0xf2 and 0xff.
 287
 288Register swapping requirement:
 289
 290  Following values needed to have their higher 4 bits and lower 4 bits being
 291swapped before being sent to FSP:
 292
 293        10, 20, 40, 60, 80, 100 and 200.
 294
 295Register reading sequence:
 296
 297        1. send 0xf3 PS/2 command to FSP;
 298
 299        2. send 0x66 PS/2 command to FSP;
 300
 301        3. send 0x88 PS/2 command to FSP;
 302
 303        4. send 0xf3 PS/2 command to FSP;
 304
 305        5. if the register address being to read is not required to be
 306        inverted(refer to the 'Register inversion requirement' section),
 307        goto step 6
 308
 309        5a. send 0x68 PS/2 command to FSP;
 310
 311        5b. send the inverted register address to FSP and goto step 8;
 312
 313        6. if the register address being to read is not required to be
 314        swapped(refer to the 'Register swapping requirement' section),
 315        goto step 7
 316
 317        6a. send 0xcc PS/2 command to FSP;
 318
 319        6b. send the swapped register address to FSP and goto step 8;
 320
 321        7. send 0x66 PS/2 command to FSP;
 322
 323        7a. send the original register address to FSP and goto step 8;
 324
 325        8. send 0xe9(status request) PS/2 command to FSP;
 326
 327        9. the response read from FSP should be the requested register value.
 328
 329Register writing sequence:
 330
 331        1. send 0xf3 PS/2 command to FSP;
 332
 333        2. if the register address being to write is not required to be
 334        inverted(refer to the 'Register inversion requirement' section),
 335        goto step 3
 336
 337        2a. send 0x74 PS/2 command to FSP;
 338
 339        2b. send the inverted register address to FSP and goto step 5;
 340
 341        3. if the register address being to write is not required to be
 342        swapped(refer to the 'Register swapping requirement' section),
 343        goto step 4
 344
 345        3a. send 0x77 PS/2 command to FSP;
 346
 347        3b. send the swapped register address to FSP and goto step 5;
 348
 349        4. send 0x55 PS/2 command to FSP;
 350
 351        4a. send the register address to FSP and goto step 5;
 352
 353        5. send 0xf3 PS/2 command to FSP;
 354
 355        6. if the register value being to write is not required to be
 356        inverted(refer to the 'Register inversion requirement' section),
 357        goto step 7
 358
 359        6a. send 0x47 PS/2 command to FSP;
 360
 361        6b. send the inverted register value to FSP and goto step 9;
 362
 363        7. if the register value being to write is not required to be
 364        swapped(refer to the 'Register swapping requirement' section),
 365        goto step 8
 366
 367        7a. send 0x44 PS/2 command to FSP;
 368
 369        7b. send the swapped register value to FSP and goto step 9;
 370
 371        8. send 0x33 PS/2 command to FSP;
 372
 373        8a. send the register value to FSP;
 374
 375        9. the register writing sequence is completed.
 376
 377==============================================================================
 378* Register Listing
 379==============================================================================
 380
 381offset  width           default r/w     name
 3820x00    bit7~bit0       0x01    RO      device ID
 383
 3840x01    bit7~bit0       0xc0    RW      version ID
 385
 3860x02    bit7~bit0       0x01    RO      vendor ID
 387
 3880x03    bit7~bit0       0x01    RO      product ID
 389
 3900x04    bit3~bit0       0x01    RW      revision ID
 391
 3920x0b                            RO      test mode status 1
 393        bit3            1       RO      0: rotate 180 degree, 1: no rotation
 394
 395        bit5~bit4               RO      number of buttons
 396                        11 => 2, lbtn/rbtn
 397                        10 => 4, lbtn/rbtn/scru/scrd
 398                        01 => 6, lbtn/rbtn/scru/scrd/scrl/scrr
 399                        00 => 6, lbtn/rbtn/scru/scrd/fbtn/bbtn
 400
 4010x0f                            RW      register file page control
 402        bit0            0       RW      1 to enable page 1 register files
 403
 4040x10                            RW      system control 1
 405        bit0            1       RW      Reserved, must be 1
 406        bit1            0       RW      Reserved, must be 0
 407        bit4            1       RW      Reserved, must be 0
 408        bit5            0       RW      register clock gating enable
 409                                        0: read only, 1: read/write enable
 410        (Note that following registers does not require clock gating being
 411        enabled prior to write: 05 06 07 08 09 0c 0f 10 11 12 16 17 18 23 2e
 412        40 41 42 43.)
 413
 4140x31                            RW      on-pad command detection
 415        bit7            0       RW      on-pad command left button down tag
 416                                        enable
 417                                        0: disable, 1: enable
 418
 4190x34                            RW      on-pad command control 5
 420        bit4~bit0       0x05    RW      XLO in 0s/4/1, so 03h = 0010.1b = 2.5
 421        (Note that position unit is in 0.5 scanline)
 422
 423        bit7            0       RW      on-pad tap zone enable
 424                                        0: disable, 1: enable
 425
 4260x35                            RW      on-pad command control 6
 427        bit4~bit0       0x1d    RW      XHI in 0s/4/1, so 19h = 1100.1b = 12.5
 428        (Note that position unit is in 0.5 scanline)
 429
 4300x36                            RW      on-pad command control 7
 431        bit4~bit0       0x04    RW      YLO in 0s/4/1, so 03h = 0010.1b = 2.5
 432        (Note that position unit is in 0.5 scanline)
 433
 4340x37                            RW      on-pad command control 8
 435        bit4~bit0       0x13    RW      YHI in 0s/4/1, so 11h = 1000.1b = 8.5
 436        (Note that position unit is in 0.5 scanline)
 437
 4380x40                            RW      system control 5
 439        bit1            0       RW      FSP Intellimouse mode enable
 440                                        0: disable, 1: enable
 441
 442        bit2            0       RW      movement + abs. coordinate mode enable
 443                                        0: disable, 1: enable
 444        (Note that this function has the functionality of bit 1 even when
 445        bit 1 is not set. However, the format is different from that of bit 1.
 446        In addition, when bit 1 and bit 2 are set at the same time, bit 2 will
 447        override bit 1.)
 448
 449        bit3            0       RW      abs. coordinate only mode enable
 450                                        0: disable, 1: enable
 451        (Note that this function has the functionality of bit 1 even when
 452        bit 1 is not set. However, the format is different from that of bit 1.
 453        In addition, when bit 1, bit 2 and bit 3 are set at the same time,
 454        bit 3 will override bit 1 and 2.)
 455
 456        bit5            0       RW      auto switch enable
 457                                        0: disable, 1: enable
 458
 459        bit6            0       RW      G0 abs. + notify packet format enable
 460                                        0: disable, 1: enable
 461        (Note that the absolute/relative coordinate output still depends on
 462        bit 2 and 3.  That is, if any of those bit is 1, host will receive
 463        absolute coordinates; otherwise, host only receives packets with
 464        relative coordinate.)
 465
 4660x43                            RW      on-pad control
 467        bit0            0       RW      on-pad control enable
 468                                        0: disable, 1: enable
 469        (Note that if this bit is cleared, bit 3/5 will be ineffective)
 470
 471        bit3            0       RW      on-pad fix vertical scrolling enable
 472                                        0: disable, 1: enable
 473
 474        bit5            0       RW      on-pad fix horizontal scrolling enable
 475                                        0: disable, 1: enable
 476
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.