blob: d7ad603dd77e26ad78ee0bff5d2261c97e3bcc42 [file] [log] [blame]
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -07001.. include:: <isonum.txt>
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -07002
Dmitry Torokhovb08c1182017-04-06 18:08:42 -07003=================
4Sentelic Touchpad
5=================
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -07006
7
8:Copyright: |copy| 2002-2011 Sentelic Corporation.
9
10:Last update: Dec-07-2011
11
Dmitry Torokhovb08c1182017-04-06 18:08:42 -070012Finger Sensing Pad Intellimouse Mode (scrolling wheel, 4th and 5th buttons)
13============================================================================
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -070014
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -070015A) MSID 4: Scrolling wheel mode plus Forward page(4th button) and Backward
16 page (5th button)
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -070017
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700181. 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.
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -070023
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -070024::
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -070025
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -070026 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 |---------------| |---------------| |---------------| |---------------|
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -070031
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -070032 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.
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -070048
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -070049B) MSID 6: Horizontal and Vertical scrolling
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -070050
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -070051- Set bit 1 in register 0x40 to 1
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -070052
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -070053FSP 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
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -070088 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
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -070092MSID6 special packet will be enable at the same time when enable MSID 7.
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -070093
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -070094Absolute position for STL3886-G0
95================================
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -070096
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700971. Set bit 2 or 3 in register 0x40 to 1
982. Set bit 6 in register 0x40 to 1
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -070099
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700100::
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700101
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700102 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 |---------------| |---------------| |---------------| |---------------|
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700107
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700108 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
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700125
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700126 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 |---------------| |---------------| |---------------| |---------------|
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700131
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700132 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
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700148
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700149Absolute position for STL3888-Ax
150================================
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700151
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700152::
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700153
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700154 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 |---------------| |---------------| |---------------| |---------------|
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700159
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700160 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
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700235
236Sample sequence of Multi-finger, Multi-coordinate mode:
237
238 notify packet (valid bit == 1), abs pkt 1, abs pkt 2, abs pkt 1,
Tai-hwa Liang3920ab02010-01-13 00:22:29 -0800239 abs pkt 2, ..., notify packet (valid bit == 0)
240
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700241Absolute position for STL3888-B0
242================================
Tai-hwa Liang3920ab02010-01-13 00:22:29 -0800243
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700244::
Tai-hwa Liang3920ab02010-01-13 00:22:29 -0800245
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700246 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 |---------------| |---------------| |---------------| |---------------|
Tai-hwa Liang3920ab02010-01-13 00:22:29 -0800251
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700252 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
Tai-hwa Liang3920ab02010-01-13 00:22:29 -0800272
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700273 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 |---------------| |---------------| |---------------| |---------------|
Tai-hwa Liang3920ab02010-01-13 00:22:29 -0800278
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700279 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
Tai-hwa Liang3920ab02010-01-13 00:22:29 -0800332
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)
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700337
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700338Absolute position for STL3888-Cx and STL3888-Dx
339===============================================
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800340
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700341::
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800342
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700343 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 |---------------| |---------------| |---------------| |---------------|
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800348
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700349 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
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800370
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700371 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
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800402MFMC#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
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700408Notify Packet for STL3888-Cx/Dx::
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800409
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700410 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
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800435
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
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700445FSP Enable/Disable packet
446=========================
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700447
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700448::
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700449
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700450 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 |---------------| |---------------| |---------------| |---------------|
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700454
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700455 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================
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700477
478FSP supports basic PS/2 commanding set and modes, refer to following URL for
479details about PS/2 commands:
480
Justin P. Mattock0ea6e612010-07-23 20:51:24 -0700481http://www.computer-engineering.org/ps2mouse/
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700482
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700483Programming Sequence for Determining Packet Parsing Flow
484========================================================
485
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -07004861. Identify FSP by reading device ID(0x00) and version(0x01) register
487
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -07004882. For FSP version < STL3888 Cx, determine number of buttons by reading
489 the 'test mode status' (0x20) register::
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700490
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800491 buttons = reg[0x20] & 0x30
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700492
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
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -07005063. For FSP version >= STL3888 Cx:
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800507 Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse'
508 section A for packet parsing detail (ignore byte 4, bit ~ 7)
509
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700510Programming Sequence for Register Reading/Writing
511=================================================
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700512
513Register inversion requirement:
514
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700515Following values needed to be inverted(the '~' operator in C) before being
516sent to FSP::
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700517
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800518 0xe8, 0xe9, 0xee, 0xf2, 0xf3 and 0xff.
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700519
520Register swapping requirement:
521
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700522Following values needed to have their higher 4 bits and lower 4 bits being
523swapped before being sent to FSP::
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700524
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
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700541 a. send 0x68 PS/2 command to FSP;
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700542
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700543 b. send the inverted register address to FSP and goto step 8;
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700544
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
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700549 a. send 0xcc PS/2 command to FSP;
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700550
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700551 b. send the swapped register address to FSP and goto step 8;
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700552
553 7. send 0x66 PS/2 command to FSP;
554
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700555 a. send the original register address to FSP and goto step 8;
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700556
557 8. send 0xe9(status request) PS/2 command to FSP;
558
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800559 9. the 4th byte of the response read from FSP should be the
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700560 requested register value(?? indicates don't care byte)::
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800561
562 host: 0xe9
563 3888: 0xfa (??) (??) (val)
564
565 * Note that since the Cx release, the hardware will return 1's
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700566 complement of the register value at the 3rd byte of status request
567 result::
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800568
569 host: 0xe9
570 3888: 0xfa (??) (~val) (val)
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700571
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
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700580 a. send 0x74 PS/2 command to FSP;
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700581
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700582 b. send the inverted register address to FSP and goto step 5;
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700583
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
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700588 a. send 0x77 PS/2 command to FSP;
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700589
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700590 b. send the swapped register address to FSP and goto step 5;
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700591
592 4. send 0x55 PS/2 command to FSP;
593
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700594 a. send the register address to FSP and goto step 5;
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700595
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
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700602 a. send 0x47 PS/2 command to FSP;
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700603
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700604 b. send the inverted register value to FSP and goto step 9;
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700605
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
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700610 a. send 0x44 PS/2 command to FSP;
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700611
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700612 b. send the swapped register value to FSP and goto step 9;
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700613
614 8. send 0x33 PS/2 command to FSP;
615
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700616 a. send the register value to FSP;
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700617
618 9. the register writing sequence is completed.
619
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700620 * 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)::
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800626
627 host: 0xe9
628 3888: 0xfa (??) (~val) (val)
629
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700630Programming Sequence for Page Register Reading/Writing
631======================================================
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800632
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700633In order to overcome the limitation of maximum number of registers
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800634supported, the hardware separates register into different groups called
635'pages.' Each page is able to include up to 255 registers.
636
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700637The default page after power up is 0x82; therefore, if one has to get
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800638access 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
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700660
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800661Page 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
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700675 a. send 0x47 PS/2 command to FSP;
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800676
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700677 b. send the inverted page address to FSP and goto step 9;
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800678
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
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700683 a. send 0x44 PS/2 command to FSP;
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800684
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700685 b. send the swapped page address to FSP and goto step 9;
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800686
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
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700693Gesture ID
694==========
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800695
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700696Unlike other devices which sends multiple fingers' coordinates to host,
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800697FSP 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
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700701 ======= ==================================
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800702 ID Description
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700703 ======= ==================================
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800704 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
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700717 ======= ==================================
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800718
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700719Register Listing
720================
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700721
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700722Registers are represented in 16 bits values. The higher 8 bits represent
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800723the 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
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700726address::
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800727
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700728 offset width default r/w name
729 0x8200 bit7~bit0 0x01 RO device ID
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700730
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700731 0x8201 bit7~bit0 RW version ID
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800732 0xc1: STL3888 Ax
733 0xd0 ~ 0xd2: STL3888 Bx
734 0xe0 ~ 0xe1: STL3888 Cx
735 0xe2 ~ 0xe3: STL3888 Dx
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700736
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700737 0x8202 bit7~bit0 0x01 RO vendor ID
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700738
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700739 0x8203 bit7~bit0 0x01 RO product ID
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700740
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700741 0x8204 bit3~bit0 0x01 RW revision ID
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700742
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700743 0x820b test mode status 1
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800744 bit3 1 RO 0: rotate 180 degree
745 1: no rotation
746 *only supported by H/W prior to Cx
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700747
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700748 0x820f register file page control
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800749 bit2 0 RW 1: rotate 180 degree
750 0: no rotation
751 *supported since Cx
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700752
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700753 bit0 0 RW 1 to enable page 1 register files
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800754 *only supported by H/W prior to Cx
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700755
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700756 0x8210 RW system control 1
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700757 bit0 1 RW Reserved, must be 1
758 bit1 0 RW Reserved, must be 0
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800759 bit4 0 RW Reserved, must be 0
760 bit5 1 RW register clock gating enable
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700761 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
Tai-hwa Liang3920ab02010-01-13 00:22:29 -0800764 40 41 42 43. In addition to that, this bit must be 1 when gesture
765 mode is enabled)
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700766
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700767 0x8220 test mode status
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800768 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
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700775 0x8231 RW on-pad command detection
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700776 bit7 0 RW on-pad command left button down tag
777 enable
778 0: disable, 1: enable
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800779 *only supported by H/W prior to Cx
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700780
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700781 0x8234 RW on-pad command control 5
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700782 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)
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800784 *only supported by H/W prior to Cx
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700785
786 bit7 0 RW on-pad tap zone enable
787 0: disable, 1: enable
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800788 *only supported by H/W prior to Cx
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700789
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700790 0x8235 RW on-pad command control 6
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700791 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)
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800793 *only supported by H/W prior to Cx
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700794
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700795 0x8236 RW on-pad command control 7
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700796 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)
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800798 *only supported by H/W prior to Cx
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700799
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700800 0x8237 RW on-pad command control 8
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700801 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)
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800803 *only supported by H/W prior to Cx
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700804
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700805 0x8240 RW system control 5
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700806 bit1 0 RW FSP Intellimouse mode enable
807 0: disable, 1: enable
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800808 *only supported by H/W prior to Cx
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700809
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.)
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800816 *only supported by H/W prior to Cx
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700817
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.)
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800824 *only supported by H/W prior to Cx
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700825
826 bit5 0 RW auto switch enable
827 0: disable, 1: enable
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800828 *only supported by H/W prior to Cx
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700829
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.)
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800836 *only supported by H/W prior to Cx
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700837
Tai-hwa Liang3920ab02010-01-13 00:22:29 -0800838 bit7 0 RW EN_PS2_F2: PS/2 gesture mode 2nd
839 finger packet enable
840 0: disable, 1: enable
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800841 *only supported by H/W prior to Cx
Tai-hwa Liang3920ab02010-01-13 00:22:29 -0800842
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700843 0x8243 RW on-pad control
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700844 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)
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800847 *only supported by H/W prior to Cx
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700848
849 bit3 0 RW on-pad fix vertical scrolling enable
850 0: disable, 1: enable
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800851 *only supported by H/W prior to Cx
Tai-hwa Liangfc69f4a2009-05-10 18:15:39 -0700852
853 bit5 0 RW on-pad fix horizontal scrolling enable
854 0: disable, 1: enable
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800855 *only supported by H/W prior to Cx
856
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700857 0x8290 RW software control register 1
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800858 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
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700886 0: disable, 1: enable
887 *supported since Cx
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800888 *supported since Cx
889
890
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700891 0x833d RW on-pad command control 1
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800892 bit7 1 RW on-pad command detection enable
893 0: disable, 1: enable
894 *supported since Cx
895
Mauro Carvalho Chehab9dc500a2017-04-04 17:48:24 -0700896 0x833e RW on-pad command detection
Tai-hwa Liange24f7342011-12-23 01:14:28 -0800897 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