aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/input/alps.txt75
-rw-r--r--drivers/input/mouse/alps.c37
2 files changed, 76 insertions, 36 deletions
diff --git a/Documentation/input/alps.txt b/Documentation/input/alps.txt
new file mode 100644
index 000000000000..ab5478f92a2b
--- /dev/null
+++ b/Documentation/input/alps.txt
@@ -0,0 +1,75 @@
1ALPS Touchpad Protocol
2----------------------
3
4Introduction
5------------
6
7Currently the ALPS touchpad driver supports two protocol versions in use by
8ALPS touchpads, the "old" and "new" protocol versions. Fundamentally these
9differ only in the format of their event packets (in reality many features may
10be found on new protocol devices that aren't found on the old protocol
11devices, but these are handled transparently as feature differences rather
12than protocol differences).
13
14Detection
15---------
16
17All ALPS touchpads should respond to the "E6 report" command sequence:
18E8-E6-E6-E6-E9. An ALPS touchpad should respond with either 00-00-0A or
1900-00-64.
20
21If the E6 report is successful, the touchpad model is identified using the "E7
22report" sequence: E8-E7-E7-E7-E9. The response is the model signature and is
23matched against known models in the alps_model_data_array.
24
25Packet Format
26-------------
27
28In the following tables, the following notation us used.
29
30 CAPITALS = stick, miniscules = touchpad
31
32?'s can have different meanings on different models, such as wheel rotation,
33extra buttons, stick buttons on a dualpoint, etc.
34
35PS/2 packet format
36------------------
37
38 byte 0: 0 0 YSGN XSGN 1 M R L
39 byte 1: X7 X6 X5 X4 X3 X2 X1 X0
40 byte 2: Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0
41
42Note that the device never signals overflow condition.
43
44ALPS Absolute Mode - Old Format
45-------------------------------
46
47 byte 0: 1 0 0 0 1 x9 x8 x7
48 byte 1: 0 x6 x5 x4 x3 x2 x1 x0
49 byte 2: 0 ? ? l r ? fin ges
50 byte 3: 0 ? ? ? ? y9 y8 y7
51 byte 4: 0 y6 y5 y4 y3 y2 y1 y0
52 byte 5: 0 z6 z5 z4 z3 z2 z1 z0
53
54ALPS Absolute Mode - New Format
55-------------------------------
56
57 byte 0: 1 ? ? ? 1 ? ? ?
58 byte 1: 0 x6 x5 x4 x3 x2 x1 x0
59 byte 2: 0 x10 x9 x8 x7 ? fin ges
60 byte 3: 0 y9 y8 y7 1 M R L
61 byte 4: 0 y6 y5 y4 y3 y2 y1 y0
62 byte 5: 0 z6 z5 z4 z3 z2 z1 z0
63
64Dualpoint device -- interleaved packet format
65---------------------------------------------
66
67 byte 0: 1 1 0 0 1 1 1 1
68 byte 1: 0 x6 x5 x4 x3 x2 x1 x0
69 byte 2: 0 x10 x9 x8 x7 0 fin ges
70 byte 3: 0 0 YSGN XSGN 1 1 1 1
71 byte 4: X7 X6 X5 X4 X3 X2 X1 X0
72 byte 5: Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0
73 byte 6: 0 y9 y8 y7 1 m r l
74 byte 7: 0 y6 y5 y4 y3 y2 y1 y0
75 byte 8: 0 z6 z5 z4 z3 z2 z1 z0
diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
index 003587c71f43..19d09431addd 100644
--- a/drivers/input/mouse/alps.c
+++ b/drivers/input/mouse/alps.c
@@ -67,42 +67,7 @@ static const struct alps_model_info alps_model_data[] = {
67 * isn't valid per PS/2 spec. 67 * isn't valid per PS/2 spec.
68 */ 68 */
69 69
70/* 70/* Packet formats are described in Documentation/input/alps.txt */
71 * PS/2 packet format
72 *
73 * byte 0: 0 0 YSGN XSGN 1 M R L
74 * byte 1: X7 X6 X5 X4 X3 X2 X1 X0
75 * byte 2: Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0
76 *
77 * Note that the device never signals overflow condition.
78 *
79 * ALPS absolute Mode - new format
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 *
88 * Dualpoint device -- interleaved packet format
89 *
90 * byte 0: 1 1 0 0 1 1 1 1
91 * byte 1: 0 x6 x5 x4 x3 x2 x1 x0
92 * byte 2: 0 x10 x9 x8 x7 0 fin ges
93 * byte 3: 0 0 YSGN XSGN 1 1 1 1
94 * byte 4: X7 X6 X5 X4 X3 X2 X1 X0
95 * byte 5: Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0
96 * byte 6: 0 y9 y8 y7 1 m r l
97 * byte 7: 0 y6 y5 y4 y3 y2 y1 y0
98 * byte 8: 0 z6 z5 z4 z3 z2 z1 z0
99 *
100 * CAPITALS = stick, miniscules = touchpad
101 *
102 * ?'s can have different meanings on different models,
103 * such as wheel rotation, extra buttons, stick buttons
104 * on a dualpoint, etc.
105 */
106 71
107static bool alps_is_valid_first_byte(const struct alps_model_info *model, 72static bool alps_is_valid_first_byte(const struct alps_model_info *model,
108 unsigned char data) 73 unsigned char data)