xref: /OK3568_Linux_fs/kernel/Documentation/hid/hid-alps.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun==========================
2*4882a593SmuzhiyunALPS HID Touchpad Protocol
3*4882a593Smuzhiyun==========================
4*4882a593Smuzhiyun
5*4882a593SmuzhiyunIntroduction
6*4882a593Smuzhiyun------------
7*4882a593SmuzhiyunCurrently ALPS HID driver supports U1 Touchpad device.
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunU1 device basic information.
10*4882a593Smuzhiyun
11*4882a593Smuzhiyun==========	======
12*4882a593SmuzhiyunVender ID	0x044E
13*4882a593SmuzhiyunProduct ID	0x120B
14*4882a593SmuzhiyunVersion ID	0x0121
15*4882a593Smuzhiyun==========	======
16*4882a593Smuzhiyun
17*4882a593Smuzhiyun
18*4882a593SmuzhiyunHID Descriptor
19*4882a593Smuzhiyun--------------
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun=======	====================	=====	=======================================
22*4882a593SmuzhiyunByte	Field			Value	Notes
23*4882a593Smuzhiyun=======	====================	=====	=======================================
24*4882a593Smuzhiyun0	wHIDDescLength		001E	Length of HID Descriptor : 30 bytes
25*4882a593Smuzhiyun2	bcdVersion		0100	Compliant with Version 1.00
26*4882a593Smuzhiyun4	wReportDescLength	00B2	Report Descriptor is 178 Bytes (0x00B2)
27*4882a593Smuzhiyun6	wReportDescRegister	0002	Identifier to read Report Descriptor
28*4882a593Smuzhiyun8	wInputRegister		0003	Identifier to read Input Report
29*4882a593Smuzhiyun10	wMaxInputLength		0053	Input Report is 80 Bytes + 2
30*4882a593Smuzhiyun12	wOutputRegister		0000	Identifier to read Output Report
31*4882a593Smuzhiyun14	wMaxOutputLength	0000	No Output Reports
32*4882a593Smuzhiyun16	wCommandRegister	0005	Identifier for Command Register
33*4882a593Smuzhiyun18	wDataRegister		0006	Identifier for Data Register
34*4882a593Smuzhiyun20	wVendorID		044E	Vendor ID 0x044E
35*4882a593Smuzhiyun22	wProductID		120B	Product ID 0x120B
36*4882a593Smuzhiyun24	wVersionID		0121	Version 01.21
37*4882a593Smuzhiyun26	RESERVED		0000	RESERVED
38*4882a593Smuzhiyun=======	====================	=====	=======================================
39*4882a593Smuzhiyun
40*4882a593Smuzhiyun
41*4882a593SmuzhiyunReport ID
42*4882a593Smuzhiyun---------
43*4882a593Smuzhiyun
44*4882a593Smuzhiyun==========	=================  =========================================
45*4882a593SmuzhiyunReportID-1	(Input Reports)	   (HIDUsage-Mouse) for TP&SP
46*4882a593SmuzhiyunReportID-2	(Input Reports)	   (HIDUsage-keyboard) for TP
47*4882a593SmuzhiyunReportID-3	(Input Reports)	   (Vendor Usage: Max 10 finger data) for TP
48*4882a593SmuzhiyunReportID-4	(Input Reports)	   (Vendor Usage: ON bit data) for GP
49*4882a593SmuzhiyunReportID-5	(Feature Reports)  Feature Reports
50*4882a593SmuzhiyunReportID-6	(Input Reports)	   (Vendor Usage: StickPointer data) for SP
51*4882a593SmuzhiyunReportID-7	(Feature Reports)  Flash update (Bootloader)
52*4882a593Smuzhiyun==========	=================  =========================================
53*4882a593Smuzhiyun
54*4882a593Smuzhiyun
55*4882a593SmuzhiyunData pattern
56*4882a593Smuzhiyun------------
57*4882a593Smuzhiyun
58*4882a593Smuzhiyun=====	==========	=====	=================
59*4882a593SmuzhiyunCase1	ReportID_1	TP/SP	Relative/Relative
60*4882a593SmuzhiyunCase2	ReportID_3	TP	Absolute
61*4882a593Smuzhiyun	ReportID_6	SP	Absolute
62*4882a593Smuzhiyun=====	==========	=====	=================
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun
65*4882a593SmuzhiyunCommand Read/Write
66*4882a593Smuzhiyun------------------
67*4882a593SmuzhiyunTo read/write to RAM, need to send a commands to the device.
68*4882a593Smuzhiyun
69*4882a593SmuzhiyunThe command format is as below.
70*4882a593Smuzhiyun
71*4882a593SmuzhiyunDataByte(SET_REPORT)
72*4882a593Smuzhiyun
73*4882a593Smuzhiyun=====	======================
74*4882a593SmuzhiyunByte1	Command Byte
75*4882a593SmuzhiyunByte2	Address - Byte 0 (LSB)
76*4882a593SmuzhiyunByte3	Address - Byte 1
77*4882a593SmuzhiyunByte4	Address - Byte 2
78*4882a593SmuzhiyunByte5	Address - Byte 3 (MSB)
79*4882a593SmuzhiyunByte6	Value Byte
80*4882a593SmuzhiyunByte7	Checksum
81*4882a593Smuzhiyun=====	======================
82*4882a593Smuzhiyun
83*4882a593SmuzhiyunCommand Byte is read=0xD1/write=0xD2 .
84*4882a593Smuzhiyun
85*4882a593SmuzhiyunAddress is read/write RAM address.
86*4882a593Smuzhiyun
87*4882a593SmuzhiyunValue Byte is writing data when you send the write commands.
88*4882a593Smuzhiyun
89*4882a593SmuzhiyunWhen you read RAM, there is no meaning.
90*4882a593Smuzhiyun
91*4882a593SmuzhiyunDataByte(GET_REPORT)
92*4882a593Smuzhiyun
93*4882a593Smuzhiyun=====	======================
94*4882a593SmuzhiyunByte1	Response Byte
95*4882a593SmuzhiyunByte2	Address - Byte 0 (LSB)
96*4882a593SmuzhiyunByte3	Address - Byte 1
97*4882a593SmuzhiyunByte4	Address - Byte 2
98*4882a593SmuzhiyunByte5	Address - Byte 3 (MSB)
99*4882a593SmuzhiyunByte6	Value Byte
100*4882a593SmuzhiyunByte7	Checksum
101*4882a593Smuzhiyun=====	======================
102*4882a593Smuzhiyun
103*4882a593SmuzhiyunRead value is stored in Value Byte.
104*4882a593Smuzhiyun
105*4882a593Smuzhiyun
106*4882a593SmuzhiyunPacket Format
107*4882a593SmuzhiyunTouchpad data byte
108*4882a593Smuzhiyun------------------
109*4882a593Smuzhiyun
110*4882a593Smuzhiyun
111*4882a593Smuzhiyun======= ======= ======= ======= ======= ======= ======= ======= =====
112*4882a593Smuzhiyun-	b7	b6	b5	b4	b3	b2	b1	b0
113*4882a593Smuzhiyun======= ======= ======= ======= ======= ======= ======= ======= =====
114*4882a593Smuzhiyun1	0	0	SW6	SW5	SW4	SW3	SW2	SW1
115*4882a593Smuzhiyun2	0	0	0	Fcv	Fn3	Fn2	Fn1	Fn0
116*4882a593Smuzhiyun3	Xa0_7	Xa0_6	Xa0_5	Xa0_4	Xa0_3	Xa0_2	Xa0_1	Xa0_0
117*4882a593Smuzhiyun4	Xa0_15	Xa0_14	Xa0_13	Xa0_12	Xa0_11	Xa0_10	Xa0_9	Xa0_8
118*4882a593Smuzhiyun5	Ya0_7	Ya0_6	Ya0_5	Ya0_4	Ya0_3	Ya0_2	Ya0_1	Ya0_0
119*4882a593Smuzhiyun6	Ya0_15	Ya0_14	Ya0_13	Ya0_12	Ya0_11	Ya0_10	Ya0_9	Ya0_8
120*4882a593Smuzhiyun7	LFB0	Zs0_6	Zs0_5	Zs0_4	Zs0_3	Zs0_2	Zs0_1	Zs0_0
121*4882a593Smuzhiyun
122*4882a593Smuzhiyun8	Xa1_7	Xa1_6	Xa1_5	Xa1_4	Xa1_3	Xa1_2	Xa1_1	Xa1_0
123*4882a593Smuzhiyun9	Xa1_15	Xa1_14	Xa1_13	Xa1_12	Xa1_11	Xa1_10	Xa1_9	Xa1_8
124*4882a593Smuzhiyun10	Ya1_7	Ya1_6	Ya1_5	Ya1_4	Ya1_3	Ya1_2	Ya1_1	Ya1_0
125*4882a593Smuzhiyun11	Ya1_15	Ya1_14	Ya1_13	Ya1_12	Ya1_11	Ya1_10	Ya1_9	Ya1_8
126*4882a593Smuzhiyun12	LFB1	Zs1_6	Zs1_5	Zs1_4	Zs1_3	Zs1_2	Zs1_1	Zs1_0
127*4882a593Smuzhiyun
128*4882a593Smuzhiyun13	Xa2_7	Xa2_6	Xa2_5	Xa2_4	Xa2_3	Xa2_2	Xa2_1	Xa2_0
129*4882a593Smuzhiyun14	Xa2_15	Xa2_14	Xa2_13	Xa2_12	Xa2_11	Xa2_10	Xa2_9	Xa2_8
130*4882a593Smuzhiyun15	Ya2_7	Ya2_6	Ya2_5	Ya2_4	Ya2_3	Ya2_2	Ya2_1	Ya2_0
131*4882a593Smuzhiyun16	Ya2_15	Ya2_14	Ya2_13	Ya2_12	Ya2_11	Ya2_10	Ya2_9	Ya2_8
132*4882a593Smuzhiyun17	LFB2	Zs2_6	Zs2_5	Zs2_4	Zs2_3	Zs2_2	Zs2_1	Zs2_0
133*4882a593Smuzhiyun
134*4882a593Smuzhiyun18	Xa3_7	Xa3_6	Xa3_5	Xa3_4	Xa3_3	Xa3_2	Xa3_1	Xa3_0
135*4882a593Smuzhiyun19	Xa3_15	Xa3_14	Xa3_13	Xa3_12	Xa3_11	Xa3_10	Xa3_9	Xa3_8
136*4882a593Smuzhiyun20	Ya3_7	Ya3_6	Ya3_5	Ya3_4	Ya3_3	Ya3_2	Ya3_1	Ya3_0
137*4882a593Smuzhiyun21	Ya3_15	Ya3_14	Ya3_13	Ya3_12	Ya3_11	Ya3_10	Ya3_9	Ya3_8
138*4882a593Smuzhiyun22	LFB3	Zs3_6	Zs3_5	Zs3_4	Zs3_3	Zs3_2	Zs3_1	Zs3_0
139*4882a593Smuzhiyun
140*4882a593Smuzhiyun23	Xa4_7	Xa4_6	Xa4_5	Xa4_4	Xa4_3	Xa4_2	Xa4_1	Xa4_0
141*4882a593Smuzhiyun24	Xa4_15	Xa4_14	Xa4_13	Xa4_12	Xa4_11	Xa4_10	Xa4_9	Xa4_8
142*4882a593Smuzhiyun25	Ya4_7	Ya4_6	Ya4_5	Ya4_4	Ya4_3	Ya4_2	Ya4_1	Ya4_0
143*4882a593Smuzhiyun26	Ya4_15	Ya4_14	Ya4_13	Ya4_12	Ya4_11	Ya4_10	Ya4_9	Ya4_8
144*4882a593Smuzhiyun27	LFB4	Zs4_6	Zs4_5	Zs4_4	Zs4_3	Zs4_2	Zs4_1	Zs4_0
145*4882a593Smuzhiyun======= ======= ======= ======= ======= ======= ======= ======= =====
146*4882a593Smuzhiyun
147*4882a593Smuzhiyun
148*4882a593SmuzhiyunSW1-SW6:
149*4882a593Smuzhiyun	SW ON/OFF status
150*4882a593SmuzhiyunXan_15-0(16bit):
151*4882a593Smuzhiyun	X Absolute data of the "n"th finger
152*4882a593SmuzhiyunYan_15-0(16bit):
153*4882a593Smuzhiyun	Y Absolute data of the "n"th finger
154*4882a593SmuzhiyunZsn_6-0(7bit):
155*4882a593Smuzhiyun	Operation area of the "n"th finger
156*4882a593Smuzhiyun
157*4882a593Smuzhiyun
158*4882a593SmuzhiyunStickPointer data byte
159*4882a593Smuzhiyun----------------------
160*4882a593Smuzhiyun
161*4882a593Smuzhiyun======= ======= ======= ======= ======= ======= ======= ======= =====
162*4882a593Smuzhiyun-	b7	b6	b5	b4	b3	b2	b1	b0
163*4882a593Smuzhiyun======= ======= ======= ======= ======= ======= ======= ======= =====
164*4882a593SmuzhiyunByte1	1	1	1	0	1	SW3	SW2	SW1
165*4882a593SmuzhiyunByte2	X7	X6	X5	X4	X3	X2	X1	X0
166*4882a593SmuzhiyunByte3	X15	X14	X13	X12	X11	X10	X9	X8
167*4882a593SmuzhiyunByte4	Y7	Y6	Y5	Y4	Y3	Y2	Y1	Y0
168*4882a593SmuzhiyunByte5	Y15	Y14	Y13	Y12	Y11	Y10	Y9	Y8
169*4882a593SmuzhiyunByte6	Z7	Z6	Z5	Z4	Z3	Z2	Z1	Z0
170*4882a593SmuzhiyunByte7	T&P	Z14	Z13	Z12	Z11	Z10	Z9	Z8
171*4882a593Smuzhiyun======= ======= ======= ======= ======= ======= ======= ======= =====
172*4882a593Smuzhiyun
173*4882a593SmuzhiyunSW1-SW3:
174*4882a593Smuzhiyun	SW ON/OFF status
175*4882a593SmuzhiyunXn_15-0(16bit):
176*4882a593Smuzhiyun	X Absolute data
177*4882a593SmuzhiyunYn_15-0(16bit):
178*4882a593Smuzhiyun	Y Absolute data
179*4882a593SmuzhiyunZn_14-0(15bit):
180*4882a593Smuzhiyun	Z
181