xref: /OK3568_Linux_fs/kernel/drivers/hid/hid-uclogic-rdesc.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0+ */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  *  HID driver for UC-Logic devices not fully compliant with HID standard
4*4882a593Smuzhiyun  *  - original and fixed report descriptors
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  *  Copyright (c) 2010-2018 Nikolai Kondrashov
7*4882a593Smuzhiyun  *  Copyright (c) 2013 Martin Rusko
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun /*
11*4882a593Smuzhiyun  * This program is free software; you can redistribute it and/or modify it
12*4882a593Smuzhiyun  * under the terms of the GNU General Public License as published by the Free
13*4882a593Smuzhiyun  * Software Foundation; either version 2 of the License, or (at your option)
14*4882a593Smuzhiyun  * any later version.
15*4882a593Smuzhiyun  */
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #ifndef _HID_UCLOGIC_RDESC_H
18*4882a593Smuzhiyun #define _HID_UCLOGIC_RDESC_H
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #include <linux/usb.h>
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun /* Size of the original descriptor of WPXXXXU tablets */
23*4882a593Smuzhiyun #define UCLOGIC_RDESC_WPXXXXU_ORIG_SIZE		212
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun /* Fixed WP4030U report descriptor */
26*4882a593Smuzhiyun extern __u8 uclogic_rdesc_wp4030u_fixed_arr[];
27*4882a593Smuzhiyun extern const size_t uclogic_rdesc_wp4030u_fixed_size;
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun /* Fixed WP5540U report descriptor */
30*4882a593Smuzhiyun extern __u8 uclogic_rdesc_wp5540u_fixed_arr[];
31*4882a593Smuzhiyun extern const size_t uclogic_rdesc_wp5540u_fixed_size;
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun /* Fixed WP8060U report descriptor */
34*4882a593Smuzhiyun extern __u8 uclogic_rdesc_wp8060u_fixed_arr[];
35*4882a593Smuzhiyun extern const size_t uclogic_rdesc_wp8060u_fixed_size;
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun /* Size of the original descriptor of the new WP5540U tablet */
38*4882a593Smuzhiyun #define UCLOGIC_RDESC_WP5540U_V2_ORIG_SIZE	232
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun /* Size of the original descriptor of WP1062 tablet */
41*4882a593Smuzhiyun #define UCLOGIC_RDESC_WP1062_ORIG_SIZE		254
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun /* Fixed WP1062 report descriptor */
44*4882a593Smuzhiyun extern __u8 uclogic_rdesc_wp1062_fixed_arr[];
45*4882a593Smuzhiyun extern const size_t uclogic_rdesc_wp1062_fixed_size;
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun /* Size of the original descriptor of PF1209 tablet */
48*4882a593Smuzhiyun #define UCLOGIC_RDESC_PF1209_ORIG_SIZE		234
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun /* Fixed PF1209 report descriptor */
51*4882a593Smuzhiyun extern __u8 uclogic_rdesc_pf1209_fixed_arr[];
52*4882a593Smuzhiyun extern const size_t uclogic_rdesc_pf1209_fixed_size;
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun /* Size of the original descriptors of TWHL850 tablet */
55*4882a593Smuzhiyun #define UCLOGIC_RDESC_TWHL850_ORIG0_SIZE	182
56*4882a593Smuzhiyun #define UCLOGIC_RDESC_TWHL850_ORIG1_SIZE	161
57*4882a593Smuzhiyun #define UCLOGIC_RDESC_TWHL850_ORIG2_SIZE	92
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun /* Fixed PID 0522 tablet report descriptor, interface 0 (stylus) */
60*4882a593Smuzhiyun extern __u8 uclogic_rdesc_twhl850_fixed0_arr[];
61*4882a593Smuzhiyun extern const size_t uclogic_rdesc_twhl850_fixed0_size;
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun /* Fixed PID 0522 tablet report descriptor, interface 1 (mouse) */
64*4882a593Smuzhiyun extern __u8 uclogic_rdesc_twhl850_fixed1_arr[];
65*4882a593Smuzhiyun extern const size_t uclogic_rdesc_twhl850_fixed1_size;
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun /* Fixed PID 0522 tablet report descriptor, interface 2 (frame buttons) */
68*4882a593Smuzhiyun extern __u8 uclogic_rdesc_twhl850_fixed2_arr[];
69*4882a593Smuzhiyun extern const size_t uclogic_rdesc_twhl850_fixed2_size;
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun /* Size of the original descriptors of TWHA60 tablet */
72*4882a593Smuzhiyun #define UCLOGIC_RDESC_TWHA60_ORIG0_SIZE		254
73*4882a593Smuzhiyun #define UCLOGIC_RDESC_TWHA60_ORIG1_SIZE		139
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun /* Fixed TWHA60 report descriptor, interface 0 (stylus) */
76*4882a593Smuzhiyun extern __u8 uclogic_rdesc_twha60_fixed0_arr[];
77*4882a593Smuzhiyun extern const size_t uclogic_rdesc_twha60_fixed0_size;
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun /* Fixed TWHA60 report descriptor, interface 1 (frame buttons) */
80*4882a593Smuzhiyun extern __u8 uclogic_rdesc_twha60_fixed1_arr[];
81*4882a593Smuzhiyun extern const size_t uclogic_rdesc_twha60_fixed1_size;
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun /* Report descriptor template placeholder head */
84*4882a593Smuzhiyun #define UCLOGIC_RDESC_PH_HEAD	0xFE, 0xED, 0x1D
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun /* Apply report descriptor parameters to a report descriptor template */
87*4882a593Smuzhiyun extern __u8 *uclogic_rdesc_template_apply(const __u8 *template_ptr,
88*4882a593Smuzhiyun 					  size_t template_size,
89*4882a593Smuzhiyun 					  const s32 *param_list,
90*4882a593Smuzhiyun 					  size_t param_num);
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun /* Pen report descriptor template placeholder IDs */
93*4882a593Smuzhiyun enum uclogic_rdesc_pen_ph_id {
94*4882a593Smuzhiyun 	UCLOGIC_RDESC_PEN_PH_ID_X_LM,
95*4882a593Smuzhiyun 	UCLOGIC_RDESC_PEN_PH_ID_X_PM,
96*4882a593Smuzhiyun 	UCLOGIC_RDESC_PEN_PH_ID_Y_LM,
97*4882a593Smuzhiyun 	UCLOGIC_RDESC_PEN_PH_ID_Y_PM,
98*4882a593Smuzhiyun 	UCLOGIC_RDESC_PEN_PH_ID_PRESSURE_LM,
99*4882a593Smuzhiyun 	UCLOGIC_RDESC_PEN_PH_ID_NUM
100*4882a593Smuzhiyun };
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun /* Report descriptor pen template placeholder */
103*4882a593Smuzhiyun #define UCLOGIC_RDESC_PEN_PH(_ID) \
104*4882a593Smuzhiyun 	UCLOGIC_RDESC_PH_HEAD, UCLOGIC_RDESC_PEN_PH_ID_##_ID
105*4882a593Smuzhiyun 
106*4882a593Smuzhiyun /* Report ID for v1 pen reports */
107*4882a593Smuzhiyun #define UCLOGIC_RDESC_PEN_V1_ID	0x07
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun /* Fixed report descriptor template for (tweaked) v1 pen reports */
110*4882a593Smuzhiyun extern const __u8 uclogic_rdesc_pen_v1_template_arr[];
111*4882a593Smuzhiyun extern const size_t uclogic_rdesc_pen_v1_template_size;
112*4882a593Smuzhiyun 
113*4882a593Smuzhiyun /* Report ID for v2 pen reports */
114*4882a593Smuzhiyun #define UCLOGIC_RDESC_PEN_V2_ID	0x08
115*4882a593Smuzhiyun 
116*4882a593Smuzhiyun /* Fixed report descriptor template for (tweaked) v2 pen reports */
117*4882a593Smuzhiyun extern const __u8 uclogic_rdesc_pen_v2_template_arr[];
118*4882a593Smuzhiyun extern const size_t uclogic_rdesc_pen_v2_template_size;
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun /* Fixed report descriptor for (tweaked) v1 buttonpad reports */
121*4882a593Smuzhiyun extern const __u8 uclogic_rdesc_buttonpad_v1_arr[];
122*4882a593Smuzhiyun extern const size_t uclogic_rdesc_buttonpad_v1_size;
123*4882a593Smuzhiyun 
124*4882a593Smuzhiyun /* Report ID for tweaked v1 buttonpad reports */
125*4882a593Smuzhiyun #define UCLOGIC_RDESC_BUTTONPAD_V1_ID 0xf7
126*4882a593Smuzhiyun 
127*4882a593Smuzhiyun /* Fixed report descriptor for (tweaked) v2 buttonpad reports */
128*4882a593Smuzhiyun extern const __u8 uclogic_rdesc_buttonpad_v2_arr[];
129*4882a593Smuzhiyun extern const size_t uclogic_rdesc_buttonpad_v2_size;
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun /* Report ID for tweaked v2 buttonpad reports */
132*4882a593Smuzhiyun #define UCLOGIC_RDESC_BUTTONPAD_V2_ID 0xf7
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun /* Fixed report descriptor for Ugee EX07 buttonpad */
135*4882a593Smuzhiyun extern const __u8 uclogic_rdesc_ugee_ex07_buttonpad_arr[];
136*4882a593Smuzhiyun extern const size_t uclogic_rdesc_ugee_ex07_buttonpad_size;
137*4882a593Smuzhiyun 
138*4882a593Smuzhiyun /* Fixed report descriptor for XP-Pen Deco 01 frame controls */
139*4882a593Smuzhiyun extern const __u8 uclogic_rdesc_xppen_deco01_frame_arr[];
140*4882a593Smuzhiyun extern const size_t uclogic_rdesc_xppen_deco01_frame_size;
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun /* Fixed report descriptor for Ugee G5 frame controls */
143*4882a593Smuzhiyun extern const __u8 uclogic_rdesc_ugee_g5_frame_arr[];
144*4882a593Smuzhiyun extern const size_t uclogic_rdesc_ugee_g5_frame_size;
145*4882a593Smuzhiyun 
146*4882a593Smuzhiyun /* Report ID of Ugee G5 frame control reports */
147*4882a593Smuzhiyun #define UCLOGIC_RDESC_UGEE_G5_FRAME_ID 0x06
148*4882a593Smuzhiyun 
149*4882a593Smuzhiyun /* Device ID byte offset in Ugee G5 frame report */
150*4882a593Smuzhiyun #define UCLOGIC_RDESC_UGEE_G5_FRAME_DEV_ID_BYTE	0x2
151*4882a593Smuzhiyun 
152*4882a593Smuzhiyun /* Least-significant bit of Ugee G5 frame rotary encoder state */
153*4882a593Smuzhiyun #define UCLOGIC_RDESC_UGEE_G5_FRAME_RE_LSB 38
154*4882a593Smuzhiyun 
155*4882a593Smuzhiyun #endif /* _HID_UCLOGIC_RDESC_H */
156