aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-01-10 13:55:52 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2012-01-10 13:55:52 -0500
commitdbe950f201a8edd353b0bd9079e8d536ee4ce37c (patch)
treedffbada6b3d33cc67383758570de22b4f45693b6 /Documentation
parentf62f61917d72c1fb0101ad405664f6fc868d676b (diff)
parentda733563be5a9da26fe81d9f007262d00b846e22 (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: (64 commits) Input: tc3589x-keypad - add missing kerneldoc Input: ucb1400-ts - switch to using dev_xxx() for diagnostic messages Input: ucb1400_ts - convert to threaded IRQ Input: ucb1400_ts - drop inline annotations Input: usb1400_ts - add __devinit/__devexit section annotations Input: ucb1400_ts - set driver owner Input: ucb1400_ts - convert to use dev_pm_ops Input: psmouse - make sure we do not use stale methods Input: evdev - do not block waiting for an event if fd is nonblock Input: evdev - if no events and non-block, return EAGAIN not 0 Input: evdev - only allow reading events if a full packet is present Input: add driver for pixcir i2c touchscreens Input: samsung-keypad - implement runtime power management support Input: tegra-kbc - report wakeup key for some platforms Input: tegra-kbc - add device tree bindings Input: add driver for AUO In-Cell touchscreens using pixcir ICs Input: mpu3050 - configure the sampling method Input: mpu3050 - ensure we enable interrupts Input: mpu3050 - add of_match table for device-tree probing Input: sentelic - document the latest hardware ... Fix up fairly trivial conflicts (device tree matching conflicting with some independent cleanups) in drivers/input/keyboard/samsung-keypad.c
Diffstat (limited to 'Documentation')
-rw-r--r--Documentation/ABI/testing/sysfs-driver-wacom17
-rw-r--r--Documentation/devicetree/bindings/input/tegra-kbc.txt18
-rw-r--r--Documentation/input/alps.txt188
-rw-r--r--Documentation/input/gpio-tilt.txt103
-rw-r--r--Documentation/input/sentelic.txt364
5 files changed, 651 insertions, 39 deletions
diff --git a/Documentation/ABI/testing/sysfs-driver-wacom b/Documentation/ABI/testing/sysfs-driver-wacom
index 82d4df136444..0130d6683c14 100644
--- a/Documentation/ABI/testing/sysfs-driver-wacom
+++ b/Documentation/ABI/testing/sysfs-driver-wacom
@@ -15,9 +15,9 @@ Contact: linux-input@vger.kernel.org
15Description: 15Description:
16 Attribute group for control of the status LEDs and the OLEDs. 16 Attribute group for control of the status LEDs and the OLEDs.
17 This attribute group is only available for Intuos 4 M, L, 17 This attribute group is only available for Intuos 4 M, L,
18 and XL (with LEDs and OLEDs) and Cintiq 21UX2 (LEDs only). 18 and XL (with LEDs and OLEDs) and Cintiq 21UX2 and Cintiq 24HD
19 Therefore its presence implicitly signifies the presence of 19 (LEDs only). Therefore its presence implicitly signifies the
20 said LEDs and OLEDs on the tablet device. 20 presence of said LEDs and OLEDs on the tablet device.
21 21
22What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/status0_luminance 22What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/status0_luminance
23Date: August 2011 23Date: August 2011
@@ -41,16 +41,17 @@ Date: August 2011
41Contact: linux-input@vger.kernel.org 41Contact: linux-input@vger.kernel.org
42Description: 42Description:
43 Writing to this file sets which one of the four (for Intuos 4) 43 Writing to this file sets which one of the four (for Intuos 4)
44 or of the right four (for Cintiq 21UX2) status LEDs is active (0..3). 44 or of the right four (for Cintiq 21UX2 and Cintiq 24HD) status
45 The other three LEDs on the same side are always inactive. 45 LEDs is active (0..3). The other three LEDs on the same side are
46 always inactive.
46 47
47What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/status_led1_select 48What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/status_led1_select
48Date: September 2011 49Date: September 2011
49Contact: linux-input@vger.kernel.org 50Contact: linux-input@vger.kernel.org
50Description: 51Description:
51 Writing to this file sets which one of the left four (for Cintiq 21UX2) 52 Writing to this file sets which one of the left four (for Cintiq 21UX2
52 status LEDs is active (0..3). The other three LEDs on the left are always 53 and Cintiq 24HD) status LEDs is active (0..3). The other three LEDs on
53 inactive. 54 the left are always inactive.
54 55
55What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/buttons_luminance 56What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/buttons_luminance
56Date: August 2011 57Date: August 2011
diff --git a/Documentation/devicetree/bindings/input/tegra-kbc.txt b/Documentation/devicetree/bindings/input/tegra-kbc.txt
new file mode 100644
index 000000000000..5ecfa99089b4
--- /dev/null
+++ b/Documentation/devicetree/bindings/input/tegra-kbc.txt
@@ -0,0 +1,18 @@
1* Tegra keyboard controller
2
3Required properties:
4- compatible: "nvidia,tegra20-kbc"
5
6Optional properties:
7- debounce-delay: delay in milliseconds per row scan for debouncing
8- repeat-delay: delay in milliseconds before repeat starts
9- ghost-filter: enable ghost filtering for this device
10- wakeup-source: configure keyboard as a wakeup source for suspend/resume
11
12Example:
13
14keyboard: keyboard {
15 compatible = "nvidia,tegra20-kbc";
16 reg = <0x7000e200 0x100>;
17 ghost-filter;
18};
diff --git a/Documentation/input/alps.txt b/Documentation/input/alps.txt
new file mode 100644
index 000000000000..f274c28b5103
--- /dev/null
+++ b/Documentation/input/alps.txt
@@ -0,0 +1,188 @@
1ALPS Touchpad Protocol
2----------------------
3
4Introduction
5------------
6
7Currently the ALPS touchpad driver supports four protocol versions in use by
8ALPS touchpads, called versions 1, 2, 3, and 4. Information about the various
9protocol versions is contained in the following sections.
10
11Detection
12---------
13
14All ALPS touchpads should respond to the "E6 report" command sequence:
15E8-E6-E6-E6-E9. An ALPS touchpad should respond with either 00-00-0A or
1600-00-64.
17
18If the E6 report is successful, the touchpad model is identified using the "E7
19report" sequence: E8-E7-E7-E7-E9. The response is the model signature and is
20matched against known models in the alps_model_data_array.
21
22With protocol versions 3 and 4, the E7 report model signature is always
2373-02-64. To differentiate between these versions, the response from the
24"Enter Command Mode" sequence must be inspected as described below.
25
26Command Mode
27------------
28
29Protocol versions 3 and 4 have a command mode that is used to read and write
30one-byte device registers in a 16-bit address space. The command sequence
31EC-EC-EC-E9 places the device in command mode, and the device will respond
32with 88-07 followed by a third byte. This third byte can be used to determine
33whether the devices uses the version 3 or 4 protocol.
34
35To exit command mode, PSMOUSE_CMD_SETSTREAM (EA) is sent to the touchpad.
36
37While in command mode, register addresses can be set by first sending a
38specific command, either EC for v3 devices or F5 for v4 devices. Then the
39address is sent one nibble at a time, where each nibble is encoded as a
40command with optional data. This enoding differs slightly between the v3 and
41v4 protocols.
42
43Once an address has been set, the addressed register can be read by sending
44PSMOUSE_CMD_GETINFO (E9). The first two bytes of the response contains the
45address of the register being read, and the third contains the value of the
46register. Registers are written by writing the value one nibble at a time
47using the same encoding used for addresses.
48
49Packet Format
50-------------
51
52In the following tables, the following notation is used.
53
54 CAPITALS = stick, miniscules = touchpad
55
56?'s can have different meanings on different models, such as wheel rotation,
57extra buttons, stick buttons on a dualpoint, etc.
58
59PS/2 packet format
60------------------
61
62 byte 0: 0 0 YSGN XSGN 1 M R L
63 byte 1: X7 X6 X5 X4 X3 X2 X1 X0
64 byte 2: Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0
65
66Note that the device never signals overflow condition.
67
68ALPS Absolute Mode - Protocol Verion 1
69--------------------------------------
70
71 byte 0: 1 0 0 0 1 x9 x8 x7
72 byte 1: 0 x6 x5 x4 x3 x2 x1 x0
73 byte 2: 0 ? ? l r ? fin ges
74 byte 3: 0 ? ? ? ? y9 y8 y7
75 byte 4: 0 y6 y5 y4 y3 y2 y1 y0
76 byte 5: 0 z6 z5 z4 z3 z2 z1 z0
77
78ALPS Absolute Mode - Protocol Version 2
79---------------------------------------
80
81 byte 0: 1 ? ? ? 1 ? ? ?
82 byte 1: 0 x6 x5 x4 x3 x2 x1 x0
83 byte 2: 0 x10 x9 x8 x7 ? fin ges
84 byte 3: 0 y9 y8 y7 1 M R L
85 byte 4: 0 y6 y5 y4 y3 y2 y1 y0
86 byte 5: 0 z6 z5 z4 z3 z2 z1 z0
87
88Dualpoint device -- interleaved packet format
89---------------------------------------------
90
91 byte 0: 1 1 0 0 1 1 1 1
92 byte 1: 0 x6 x5 x4 x3 x2 x1 x0
93 byte 2: 0 x10 x9 x8 x7 0 fin ges
94 byte 3: 0 0 YSGN XSGN 1 1 1 1
95 byte 4: X7 X6 X5 X4 X3 X2 X1 X0
96 byte 5: Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0
97 byte 6: 0 y9 y8 y7 1 m r l
98 byte 7: 0 y6 y5 y4 y3 y2 y1 y0
99 byte 8: 0 z6 z5 z4 z3 z2 z1 z0
100
101ALPS Absolute Mode - Protocol Version 3
102---------------------------------------
103
104ALPS protocol version 3 has three different packet formats. The first two are
105associated with touchpad events, and the third is associatd with trackstick
106events.
107
108The first type is the touchpad position packet.
109
110 byte 0: 1 ? x1 x0 1 1 1 1
111 byte 1: 0 x10 x9 x8 x7 x6 x5 x4
112 byte 2: 0 y10 y9 y8 y7 y6 y5 y4
113 byte 3: 0 M R L 1 m r l
114 byte 4: 0 mt x3 x2 y3 y2 y1 y0
115 byte 5: 0 z6 z5 z4 z3 z2 z1 z0
116
117Note that for some devices the trackstick buttons are reported in this packet,
118and on others it is reported in the trackstick packets.
119
120The second packet type contains bitmaps representing the x and y axes. In the
121bitmaps a given bit is set if there is a finger covering that position on the
122given axis. Thus the bitmap packet can be used for low-resolution multi-touch
123data, although finger tracking is not possible. This packet also encodes the
124number of contacts (f1 and f0 in the table below).
125
126 byte 0: 1 1 x1 x0 1 1 1 1
127 byte 1: 0 x8 x7 x6 x5 x4 x3 x2
128 byte 2: 0 y7 y6 y5 y4 y3 y2 y1
129 byte 3: 0 y10 y9 y8 1 1 1 1
130 byte 4: 0 x14 x13 x12 x11 x10 x9 y0
131 byte 5: 0 1 ? ? ? ? f1 f0
132
133This packet only appears after a position packet with the mt bit set, and
134ususally only appears when there are two or more contacts (although
135ocassionally it's seen with only a single contact).
136
137The final v3 packet type is the trackstick packet.
138
139 byte 0: 1 1 x7 y7 1 1 1 1
140 byte 1: 0 x6 x5 x4 x3 x2 x1 x0
141 byte 2: 0 y6 y5 y4 y3 y2 y1 y0
142 byte 3: 0 1 0 0 1 0 0 0
143 byte 4: 0 z4 z3 z2 z1 z0 ? ?
144 byte 5: 0 0 1 1 1 1 1 1
145
146ALPS Absolute Mode - Protocol Version 4
147---------------------------------------
148
149Protocol version 4 has an 8-byte packet format.
150
151 byte 0: 1 ? x1 x0 1 1 1 1
152 byte 1: 0 x10 x9 x8 x7 x6 x5 x4
153 byte 2: 0 y10 y9 y8 y7 y6 y5 y4
154 byte 3: 0 1 x3 x2 y3 y2 y1 y0
155 byte 4: 0 ? ? ? 1 ? r l
156 byte 5: 0 z6 z5 z4 z3 z2 z1 z0
157 byte 6: bitmap data (described below)
158 byte 7: bitmap data (described below)
159
160The last two bytes represent a partial bitmap packet, with 3 full packets
161required to construct a complete bitmap packet. Once assembled, the 6-byte
162bitmap packet has the following format:
163
164 byte 0: 0 1 x7 x6 x5 x4 x3 x2
165 byte 1: 0 x1 x0 y4 y3 y2 y1 y0
166 byte 2: 0 0 ? x14 x13 x12 x11 x10
167 byte 3: 0 x9 x8 y9 y8 y7 y6 y5
168 byte 4: 0 0 0 0 0 0 0 0
169 byte 5: 0 0 0 0 0 0 0 y10
170
171There are several things worth noting here.
172
173 1) In the bitmap data, bit 6 of byte 0 serves as a sync byte to
174 identify the first fragment of a bitmap packet.
175
176 2) The bitmaps represent the same data as in the v3 bitmap packets, although
177 the packet layout is different.
178
179 3) There doesn't seem to be a count of the contact points anywhere in the v4
180 protocol packets. Deriving a count of contact points must be done by
181 analyzing the bitmaps.
182
183 4) There is a 3 to 1 ratio of position packets to bitmap packets. Therefore
184 MT position can only be updated for every third ST position update, and
185 the count of contact points can only be updated every third packet as
186 well.
187
188So far no v4 devices with tracksticks have been encountered.
diff --git a/Documentation/input/gpio-tilt.txt b/Documentation/input/gpio-tilt.txt
new file mode 100644
index 000000000000..06d60c3ff5e7
--- /dev/null
+++ b/Documentation/input/gpio-tilt.txt
@@ -0,0 +1,103 @@
1Driver for tilt-switches connected via GPIOs
2============================================
3
4Generic driver to read data from tilt switches connected via gpios.
5Orientation can be provided by one or more than one tilt switches,
6i.e. each tilt switch providing one axis, and the number of axes
7is also not limited.
8
9
10Data structures:
11----------------
12
13The array of struct gpio in the gpios field is used to list the gpios
14that represent the current tilt state.
15
16The array of struct gpio_tilt_axis describes the axes that are reported
17to the input system. The values set therein are used for the
18input_set_abs_params calls needed to init the axes.
19
20The array of struct gpio_tilt_state maps gpio states to the corresponding
21values to report. The gpio state is represented as a bitfield where the
22bit-index corresponds to the index of the gpio in the struct gpio array.
23In the same manner the values stored in the axes array correspond to
24the elements of the gpio_tilt_axis-array.
25
26
27Example:
28--------
29
30Example configuration for a single TS1003 tilt switch that rotates around
31one axis in 4 steps and emitts the current tilt via two GPIOs.
32
33static int sg060_tilt_enable(struct device *dev) {
34 /* code to enable the sensors */
35};
36
37static void sg060_tilt_disable(struct device *dev) {
38 /* code to disable the sensors */
39};
40
41static struct gpio sg060_tilt_gpios[] = {
42 { SG060_TILT_GPIO_SENSOR1, GPIOF_IN, "tilt_sensor1" },
43 { SG060_TILT_GPIO_SENSOR2, GPIOF_IN, "tilt_sensor2" },
44};
45
46static struct gpio_tilt_state sg060_tilt_states[] = {
47 {
48 .gpios = (0 << 1) | (0 << 0),
49 .axes = (int[]) {
50 0,
51 },
52 }, {
53 .gpios = (0 << 1) | (1 << 0),
54 .axes = (int[]) {
55 1, /* 90 degrees */
56 },
57 }, {
58 .gpios = (1 << 1) | (1 << 0),
59 .axes = (int[]) {
60 2, /* 180 degrees */
61 },
62 }, {
63 .gpios = (1 << 1) | (0 << 0),
64 .axes = (int[]) {
65 3, /* 270 degrees */
66 },
67 },
68};
69
70static struct gpio_tilt_axis sg060_tilt_axes[] = {
71 {
72 .axis = ABS_RY,
73 .min = 0,
74 .max = 3,
75 .fuzz = 0,
76 .flat = 0,
77 },
78};
79
80static struct gpio_tilt_platform_data sg060_tilt_pdata= {
81 .gpios = sg060_tilt_gpios,
82 .nr_gpios = ARRAY_SIZE(sg060_tilt_gpios),
83
84 .axes = sg060_tilt_axes,
85 .nr_axes = ARRAY_SIZE(sg060_tilt_axes),
86
87 .states = sg060_tilt_states,
88 .nr_states = ARRAY_SIZE(sg060_tilt_states),
89
90 .debounce_interval = 100,
91
92 .poll_interval = 1000,
93 .enable = sg060_tilt_enable,
94 .disable = sg060_tilt_disable,
95};
96
97static struct platform_device sg060_device_tilt = {
98 .name = "gpio-tilt-polled",
99 .id = -1,
100 .dev = {
101 .platform_data = &sg060_tilt_pdata,
102 },
103};
diff --git a/Documentation/input/sentelic.txt b/Documentation/input/sentelic.txt
index b2ef125b71f8..89251e2a3eba 100644
--- a/Documentation/input/sentelic.txt
+++ b/Documentation/input/sentelic.txt
@@ -1,5 +1,5 @@
1Copyright (C) 2002-2010 Sentelic Corporation. 1Copyright (C) 2002-2011 Sentelic Corporation.
2Last update: Jan-13-2010 2Last update: Dec-07-2011
3 3
4============================================================================== 4==============================================================================
5* Finger Sensing Pad Intellimouse Mode(scrolling wheel, 4th and 5th buttons) 5* Finger Sensing Pad Intellimouse Mode(scrolling wheel, 4th and 5th buttons)
@@ -140,6 +140,7 @@ BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------
140Byte 1: Bit7~Bit6 => 00, Normal data packet 140Byte 1: Bit7~Bit6 => 00, Normal data packet
141 => 01, Absolute coordination packet 141 => 01, Absolute coordination packet
142 => 10, Notify packet 142 => 10, Notify packet
143 => 11, Normal data packet with on-pad click
143 Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up. 144 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 When both fingers are up, the last two reports have zero valid
145 bit. 146 bit.
@@ -164,6 +165,7 @@ BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------
164Byte 1: Bit7~Bit6 => 00, Normal data packet 165Byte 1: Bit7~Bit6 => 00, Normal data packet
165 => 01, Absolute coordinates packet 166 => 01, Absolute coordinates packet
166 => 10, Notify packet 167 => 10, Notify packet
168 => 11, Normal data packet with on-pad click
167 Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up. 169 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 170 When both fingers are up, the last two reports have zero valid
169 bit. 171 bit.
@@ -188,6 +190,7 @@ BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------
188Byte 1: Bit7~Bit6 => 00, Normal data packet 190Byte 1: Bit7~Bit6 => 00, Normal data packet
189 => 01, Absolute coordinates packet 191 => 01, Absolute coordinates packet
190 => 10, Notify packet 192 => 10, Notify packet
193 => 11, Normal data packet with on-pad click
191 Bit5 => 1 194 Bit5 => 1
192 Bit4 => when in absolute coordinates mode (valid when EN_PKT_GO is 1): 195 Bit4 => when in absolute coordinates mode (valid when EN_PKT_GO is 1):
193 0: left button is generated by the on-pad command 196 0: left button is generated by the on-pad command
@@ -205,7 +208,7 @@ Byte 4: Bit7 => scroll right button
205 Bit6 => scroll left button 208 Bit6 => scroll left button
206 Bit5 => scroll down button 209 Bit5 => scroll down button
207 Bit4 => scroll up button 210 Bit4 => scroll up button
208 * Note that if gesture and additional buttoni (Bit4~Bit7) 211 * Note that if gesture and additional button (Bit4~Bit7)
209 happen at the same time, the button information will not 212 happen at the same time, the button information will not
210 be sent. 213 be sent.
211 Bit3~Bit0 => Reserved 214 Bit3~Bit0 => Reserved
@@ -227,6 +230,7 @@ BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------
227Byte 1: Bit7~Bit6 => 00, Normal data packet 230Byte 1: Bit7~Bit6 => 00, Normal data packet
228 => 01, Absolute coordinates packet 231 => 01, Absolute coordinates packet
229 => 10, Notify packet 232 => 10, Notify packet
233 => 11, Normal data packet with on-pad click
230 Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up. 234 Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up.
231 When both fingers are up, the last two reports have zero valid 235 When both fingers are up, the last two reports have zero valid
232 bit. 236 bit.
@@ -253,6 +257,7 @@ BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------
253Byte 1: Bit7~Bit6 => 00, Normal data packet 257Byte 1: Bit7~Bit6 => 00, Normal data packet
254 => 01, Absolute coordination packet 258 => 01, Absolute coordination packet
255 => 10, Notify packet 259 => 10, Notify packet
260 => 11, Normal data packet with on-pad click
256 Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up. 261 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 262 When both fingers are up, the last two reports have zero valid
258 bit. 263 bit.
@@ -279,8 +284,9 @@ BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------
279Byte 1: Bit7~Bit6 => 00, Normal data packet 284Byte 1: Bit7~Bit6 => 00, Normal data packet
280 => 01, Absolute coordination packet 285 => 01, Absolute coordination packet
281 => 10, Notify packet 286 => 10, Notify packet
287 => 11, Normal data packet with on-pad click
282 Bit5 => 1 288 Bit5 => 1
283 Bit4 => when in absolute coordinate mode (valid when EN_PKT_GO is 1): 289 Bit4 => when in absolute coordinates mode (valid when EN_PKT_GO is 1):
284 0: left button is generated by the on-pad command 290 0: left button is generated by the on-pad command
285 1: left button is generated by the external button 291 1: left button is generated by the external button
286 Bit3 => 1 292 Bit3 => 1
@@ -307,6 +313,110 @@ Sample sequence of Multi-finger, Multi-coordinate mode:
307 abs pkt 2, ..., notify packet (valid bit == 0) 313 abs pkt 2, ..., notify packet (valid bit == 0)
308 314
309============================================================================== 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==============================================================================
310* FSP Enable/Disable packet 420* FSP Enable/Disable packet
311============================================================================== 421==============================================================================
312 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 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
@@ -348,9 +458,10 @@ http://www.computer-engineering.org/ps2mouse/
348============================================================================== 458==============================================================================
3491. Identify FSP by reading device ID(0x00) and version(0x01) register 4591. Identify FSP by reading device ID(0x00) and version(0x01) register
350 460
3512. Determine number of buttons by reading status2 (0x0b) register 4612a. For FSP version < STL3888 Cx, determine number of buttons by reading
462 the 'test mode status' (0x20) register:
352 463
353 buttons = reg[0x0b] & 0x30 464 buttons = reg[0x20] & 0x30
354 465
355 if buttons == 0x30 or buttons == 0x20: 466 if buttons == 0x30 or buttons == 0x20:
356 # two/four buttons 467 # two/four buttons
@@ -365,6 +476,10 @@ http://www.computer-engineering.org/ps2mouse/
365 Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse' 476 Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse'
366 section A for packet parsing detail 477 section A for packet parsing detail
367 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
368============================================================================== 483==============================================================================
369* Programming Sequence for Register Reading/Writing 484* Programming Sequence for Register Reading/Writing
370============================================================================== 485==============================================================================
@@ -374,7 +489,7 @@ Register inversion requirement:
374 Following values needed to be inverted(the '~' operator in C) before being 489 Following values needed to be inverted(the '~' operator in C) before being
375sent to FSP: 490sent to FSP:
376 491
377 0xe9, 0xee, 0xf2 and 0xff. 492 0xe8, 0xe9, 0xee, 0xf2, 0xf3 and 0xff.
378 493
379Register swapping requirement: 494Register swapping requirement:
380 495
@@ -415,7 +530,18 @@ Register reading sequence:
415 530
416 8. send 0xe9(status request) PS/2 command to FSP; 531 8. send 0xe9(status request) PS/2 command to FSP;
417 532
418 9. the response read from FSP should be the requested register value. 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)
419 545
420Register writing sequence: 546Register writing sequence:
421 547
@@ -465,71 +591,194 @@ Register writing sequence:
465 591
466 9. the register writing sequence is completed. 592 9. the register writing sequence is completed.
467 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
468============================================================================== 691==============================================================================
469* Register Listing 692* Register Listing
470============================================================================== 693==============================================================================
471 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
472offset width default r/w name 701offset width default r/w name
4730x00 bit7~bit0 0x01 RO device ID 7020x8200 bit7~bit0 0x01 RO device ID
474 703
4750x01 bit7~bit0 0xc0 RW version ID 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
476 709
4770x02 bit7~bit0 0x01 RO vendor ID 7100x8202 bit7~bit0 0x01 RO vendor ID
478 711
4790x03 bit7~bit0 0x01 RO product ID 7120x8203 bit7~bit0 0x01 RO product ID
480 713
4810x04 bit3~bit0 0x01 RW revision ID 7140x8204 bit3~bit0 0x01 RW revision ID
482 715
4830x0b RO test mode status 1 7160x820b test mode status 1
484 bit3 1 RO 0: rotate 180 degree, 1: no rotation 717 bit3 1 RO 0: rotate 180 degree
718 1: no rotation
719 *only supported by H/W prior to Cx
485 720
486 bit5~bit4 RO number of buttons 7210x820f register file page control
487 11 => 2, lbtn/rbtn 722 bit2 0 RW 1: rotate 180 degree
488 10 => 4, lbtn/rbtn/scru/scrd 723 0: no rotation
489 01 => 6, lbtn/rbtn/scru/scrd/scrl/scrr 724 *supported since Cx
490 00 => 6, lbtn/rbtn/scru/scrd/fbtn/bbtn
491 725
4920x0f RW register file page control
493 bit0 0 RW 1 to enable page 1 register files 726 bit0 0 RW 1 to enable page 1 register files
727 *only supported by H/W prior to Cx
494 728
4950x10 RW system control 1 7290x8210 RW system control 1
496 bit0 1 RW Reserved, must be 1 730 bit0 1 RW Reserved, must be 1
497 bit1 0 RW Reserved, must be 0 731 bit1 0 RW Reserved, must be 0
498 bit4 1 RW Reserved, must be 0 732 bit4 0 RW Reserved, must be 0
499 bit5 0 RW register clock gating enable 733 bit5 1 RW register clock gating enable
500 0: read only, 1: read/write enable 734 0: read only, 1: read/write enable
501 (Note that following registers does not require clock gating being 735 (Note that following registers does not require clock gating being
502 enabled prior to write: 05 06 07 08 09 0c 0f 10 11 12 16 17 18 23 2e 736 enabled prior to write: 05 06 07 08 09 0c 0f 10 11 12 16 17 18 23 2e
503 40 41 42 43. In addition to that, this bit must be 1 when gesture 737 40 41 42 43. In addition to that, this bit must be 1 when gesture
504 mode is enabled) 738 mode is enabled)
505 739
5060x31 RW on-pad command detection 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
507 bit7 0 RW on-pad command left button down tag 749 bit7 0 RW on-pad command left button down tag
508 enable 750 enable
509 0: disable, 1: enable 751 0: disable, 1: enable
752 *only supported by H/W prior to Cx
510 753
5110x34 RW on-pad command control 5 7540x8234 RW on-pad command control 5
512 bit4~bit0 0x05 RW XLO in 0s/4/1, so 03h = 0010.1b = 2.5 755 bit4~bit0 0x05 RW XLO in 0s/4/1, so 03h = 0010.1b = 2.5
513 (Note that position unit is in 0.5 scanline) 756 (Note that position unit is in 0.5 scanline)
757 *only supported by H/W prior to Cx
514 758
515 bit7 0 RW on-pad tap zone enable 759 bit7 0 RW on-pad tap zone enable
516 0: disable, 1: enable 760 0: disable, 1: enable
761 *only supported by H/W prior to Cx
517 762
5180x35 RW on-pad command control 6 7630x8235 RW on-pad command control 6
519 bit4~bit0 0x1d RW XHI in 0s/4/1, so 19h = 1100.1b = 12.5 764 bit4~bit0 0x1d RW XHI in 0s/4/1, so 19h = 1100.1b = 12.5
520 (Note that position unit is in 0.5 scanline) 765 (Note that position unit is in 0.5 scanline)
766 *only supported by H/W prior to Cx
521 767
5220x36 RW on-pad command control 7 7680x8236 RW on-pad command control 7
523 bit4~bit0 0x04 RW YLO in 0s/4/1, so 03h = 0010.1b = 2.5 769 bit4~bit0 0x04 RW YLO in 0s/4/1, so 03h = 0010.1b = 2.5
524 (Note that position unit is in 0.5 scanline) 770 (Note that position unit is in 0.5 scanline)
771 *only supported by H/W prior to Cx
525 772
5260x37 RW on-pad command control 8 7730x8237 RW on-pad command control 8
527 bit4~bit0 0x13 RW YHI in 0s/4/1, so 11h = 1000.1b = 8.5 774 bit4~bit0 0x13 RW YHI in 0s/4/1, so 11h = 1000.1b = 8.5
528 (Note that position unit is in 0.5 scanline) 775 (Note that position unit is in 0.5 scanline)
776 *only supported by H/W prior to Cx
529 777
5300x40 RW system control 5 7780x8240 RW system control 5
531 bit1 0 RW FSP Intellimouse mode enable 779 bit1 0 RW FSP Intellimouse mode enable
532 0: disable, 1: enable 780 0: disable, 1: enable
781 *only supported by H/W prior to Cx
533 782
534 bit2 0 RW movement + abs. coordinate mode enable 783 bit2 0 RW movement + abs. coordinate mode enable
535 0: disable, 1: enable 784 0: disable, 1: enable
@@ -537,6 +786,7 @@ offset width default r/w name
537 bit 1 is not set. However, the format is different from that of bit 1. 786 bit 1 is not set. However, the format is different from that of bit 1.
538 In addition, when bit 1 and bit 2 are set at the same time, bit 2 will 787 In addition, when bit 1 and bit 2 are set at the same time, bit 2 will
539 override bit 1.) 788 override bit 1.)
789 *only supported by H/W prior to Cx
540 790
541 bit3 0 RW abs. coordinate only mode enable 791 bit3 0 RW abs. coordinate only mode enable
542 0: disable, 1: enable 792 0: disable, 1: enable
@@ -544,9 +794,11 @@ offset width default r/w name
544 bit 1 is not set. However, the format is different from that of bit 1. 794 bit 1 is not set. However, the format is different from that of bit 1.
545 In addition, when bit 1, bit 2 and bit 3 are set at the same time, 795 In addition, when bit 1, bit 2 and bit 3 are set at the same time,
546 bit 3 will override bit 1 and 2.) 796 bit 3 will override bit 1 and 2.)
797 *only supported by H/W prior to Cx
547 798
548 bit5 0 RW auto switch enable 799 bit5 0 RW auto switch enable
549 0: disable, 1: enable 800 0: disable, 1: enable
801 *only supported by H/W prior to Cx
550 802
551 bit6 0 RW G0 abs. + notify packet format enable 803 bit6 0 RW G0 abs. + notify packet format enable
552 0: disable, 1: enable 804 0: disable, 1: enable
@@ -554,18 +806,68 @@ offset width default r/w name
554 bit 2 and 3. That is, if any of those bit is 1, host will receive 806 bit 2 and 3. That is, if any of those bit is 1, host will receive
555 absolute coordinates; otherwise, host only receives packets with 807 absolute coordinates; otherwise, host only receives packets with
556 relative coordinate.) 808 relative coordinate.)
809 *only supported by H/W prior to Cx
557 810
558 bit7 0 RW EN_PS2_F2: PS/2 gesture mode 2nd 811 bit7 0 RW EN_PS2_F2: PS/2 gesture mode 2nd
559 finger packet enable 812 finger packet enable
560 0: disable, 1: enable 813 0: disable, 1: enable
814 *only supported by H/W prior to Cx
561 815
5620x43 RW on-pad control 8160x8243 RW on-pad control
563 bit0 0 RW on-pad control enable 817 bit0 0 RW on-pad control enable
564 0: disable, 1: enable 818 0: disable, 1: enable
565 (Note that if this bit is cleared, bit 3/5 will be ineffective) 819 (Note that if this bit is cleared, bit 3/5 will be ineffective)
820 *only supported by H/W prior to Cx
566 821
567 bit3 0 RW on-pad fix vertical scrolling enable 822 bit3 0 RW on-pad fix vertical scrolling enable
568 0: disable, 1: enable 823 0: disable, 1: enable
824 *only supported by H/W prior to Cx
569 825
570 bit5 0 RW on-pad fix horizontal scrolling enable 826 bit5 0 RW on-pad fix horizontal scrolling enable
571 0: disable, 1: 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