GNU Linux-libre 4.19.211-gnu1
[releases.git] / Documentation / hid / hid-alps.txt
1 ALPS HID Touchpad Protocol
2 ----------------------
3
4 Introduction
5 ------------
6 Currently ALPS HID driver supports U1 Touchpad device.
7
8 U1 devuce basic information.
9 Vender ID       0x044E
10 Product ID      0x120B
11 Version ID      0x0121
12
13
14 HID Descriptor
15 ------------
16 Byte    Field                   Value   Notes
17 0       wHIDDescLength          001E    Length of HID Descriptor : 30 bytes
18 2       bcdVersion              0100    Compliant with Version 1.00
19 4       wReportDescLength       00B2    Report Descriptor is 178 Bytes (0x00B2)
20 6       wReportDescRegister     0002    Identifier to read Report Descriptor
21 8       wInputRegister          0003    Identifier to read Input Report
22 10      wMaxInputLength         0053    Input Report is 80 Bytes + 2
23 12      wOutputRegister         0000    Identifier to read Output Report
24 14      wMaxOutputLength        0000    No Output Reports
25 16      wCommandRegister        0005    Identifier for Command Register
26 18      wDataRegister           0006    Identifier for Data Register
27 20      wVendorID               044E    Vendor ID 0x044E
28 22      wProductID              120B    Product ID 0x120B
29 24      wVersionID              0121    Version 01.21
30 26      RESERVED                0000    RESERVED
31
32
33 Report ID
34 ------------
35 ReportID-1      (Input Reports) (HIDUsage-Mouse) for TP&SP
36 ReportID-2      (Input Reports) (HIDUsage-keyboard) for TP
37 ReportID-3      (Input Reports) (Vendor Usage: Max 10 finger data) for TP
38 ReportID-4      (Input Reports) (Vendor Usage: ON bit data) for GP
39 ReportID-5      (Feature Reports)       Feature Reports
40 ReportID-6      (Input Reports) (Vendor Usage: StickPointer data) for SP
41 ReportID-7      (Feature Reports)       Flash update (Bootloader)
42
43
44 Data pattern
45 ------------
46 Case1   ReportID_1      TP/SP   Relative/Relative
47 Case2   ReportID_3      TP      Absolute
48         ReportID_6      SP      Absolute
49
50
51 Command Read/Write
52 ------------------
53 To read/write to RAM, need to send a commands to the device.
54 The command format is as below.
55
56 DataByte(SET_REPORT)
57 Byte1   Command Byte
58 Byte2   Address - Byte 0 (LSB)
59 Byte3   Address - Byte 1
60 Byte4   Address - Byte 2
61 Byte5   Address - Byte 3 (MSB)
62 Byte6   Value Byte
63 Byte7   Checksum
64
65 Command Byte is read=0xD1/write=0xD2 .
66 Address is read/write RAM address.
67 Value Byte is writing data when you send the write commands.
68 When you read RAM, there is no meaning.
69
70 DataByte(GET_REPORT)
71 Byte1   Response Byte
72 Byte2   Address - Byte 0 (LSB)
73 Byte3   Address - Byte 1
74 Byte4   Address - Byte 2
75 Byte5   Address - Byte 3 (MSB)
76 Byte6   Value Byte
77 Byte7   Checksum
78
79 Read value is stored in Value Byte.
80
81
82 Packet Format
83 Touchpad data byte
84 ------------------
85         b7      b6      b5      b4      b3      b2      b1      b0
86 1       0       0       SW6     SW5     SW4     SW3     SW2     SW1
87 2       0       0       0       Fcv     Fn3     Fn2     Fn1     Fn0
88 3       Xa0_7   Xa0_6   Xa0_5   Xa0_4   Xa0_3   Xa0_2   Xa0_1   Xa0_0
89 4       Xa0_15  Xa0_14  Xa0_13  Xa0_12  Xa0_11  Xa0_10  Xa0_9   Xa0_8
90 5       Ya0_7   Ya0_6   Ya0_5   Ya0_4   Ya0_3   Ya0_2   Ya0_1   Ya0_0
91 6       Ya0_15  Ya0_14  Ya0_13  Ya0_12  Ya0_11  Ya0_10  Ya0_9   Ya0_8
92 7       LFB0    Zs0_6   Zs0_5   Zs0_4   Zs0_3   Zs0_2   Zs0_1   Zs0_0
93
94 8       Xa1_7   Xa1_6   Xa1_5   Xa1_4   Xa1_3   Xa1_2   Xa1_1   Xa1_0
95 9       Xa1_15  Xa1_14  Xa1_13  Xa1_12  Xa1_11  Xa1_10  Xa1_9   Xa1_8
96 10      Ya1_7   Ya1_6   Ya1_5   Ya1_4   Ya1_3   Ya1_2   Ya1_1   Ya1_0
97 11      Ya1_15  Ya1_14  Ya1_13  Ya1_12  Ya1_11  Ya1_10  Ya1_9   Ya1_8
98 12      LFB1    Zs1_6   Zs1_5   Zs1_4   Zs1_3   Zs1_2   Zs1_1   Zs1_0
99
100 13      Xa2_7   Xa2_6   Xa2_5   Xa2_4   Xa2_3   Xa2_2   Xa2_1   Xa2_0
101 14      Xa2_15  Xa2_14  Xa2_13  Xa2_12  Xa2_11  Xa2_10  Xa2_9   Xa2_8
102 15      Ya2_7   Ya2_6   Ya2_5   Ya2_4   Ya2_3   Ya2_2   Ya2_1   Ya2_0
103 16      Ya2_15  Ya2_14  Ya2_13  Ya2_12  Ya2_11  Ya2_10  Ya2_9   Ya2_8
104 17      LFB2    Zs2_6   Zs2_5   Zs2_4   Zs2_3   Zs2_2   Zs2_1   Zs2_0
105
106 18      Xa3_7   Xa3_6   Xa3_5   Xa3_4   Xa3_3   Xa3_2   Xa3_1   Xa3_0
107 19      Xa3_15  Xa3_14  Xa3_13  Xa3_12  Xa3_11  Xa3_10  Xa3_9   Xa3_8
108 20      Ya3_7   Ya3_6   Ya3_5   Ya3_4   Ya3_3   Ya3_2   Ya3_1   Ya3_0
109 21      Ya3_15  Ya3_14  Ya3_13  Ya3_12  Ya3_11  Ya3_10  Ya3_9   Ya3_8
110 22      LFB3    Zs3_6   Zs3_5   Zs3_4   Zs3_3   Zs3_2   Zs3_1   Zs3_0
111
112 23      Xa4_7   Xa4_6   Xa4_5   Xa4_4   Xa4_3   Xa4_2   Xa4_1   Xa4_0
113 24      Xa4_15  Xa4_14  Xa4_13  Xa4_12  Xa4_11  Xa4_10  Xa4_9   Xa4_8
114 25      Ya4_7   Ya4_6   Ya4_5   Ya4_4   Ya4_3   Ya4_2   Ya4_1   Ya4_0
115 26      Ya4_15  Ya4_14  Ya4_13  Ya4_12  Ya4_11  Ya4_10  Ya4_9   Ya4_8
116 27      LFB4    Zs4_6   Zs4_5   Zs4_4   Zs4_3   Zs4_2   Zs4_1   Zs4_0
117
118
119 SW1-SW6:        SW ON/OFF status
120 Xan_15-0(16bit):X Absolute data of the "n"th finger
121 Yan_15-0(16bit):Y Absolute data of the "n"th finger
122 Zsn_6-0(7bit):  Operation area of the "n"th finger
123
124
125 StickPointer data byte
126 ------------------
127         b7      b6      b5      b4      b3      b2      b1      b0
128 Byte1   1       1       1       0       1       SW3     SW2     SW1
129 Byte2   X7      X6      X5      X4      X3      X2      X1      X0
130 Byte3   X15     X14     X13     X12     X11     X10     X9      X8
131 Byte4   Y7      Y6      Y5      Y4      Y3      Y2      Y1      Y0
132 Byte5   Y15     Y14     Y13     Y12     Y11     Y10     Y9      Y8
133 Byte6   Z7      Z6      Z5      Z4      Z3      Z2      Z1      Z0
134 Byte7   T&P     Z14     Z13     Z12     Z11     Z10     Z9      Z8
135
136 SW1-SW3:        SW ON/OFF status
137 Xn_15-0(16bit):X Absolute data
138 Yn_15-0(16bit):Y Absolute data
139 Zn_14-0(15bit):Z