xref: /openbmc/linux/drivers/hid/wacom_wac.h (revision ae3473231e77a3f1909d48cd144cebe5e1d049b3)
1 /*
2  * drivers/input/tablet/wacom_wac.h
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  */
9 #ifndef WACOM_WAC_H
10 #define WACOM_WAC_H
11 
12 #include <linux/types.h>
13 #include <linux/hid.h>
14 
15 /* maximum packet length for USB devices */
16 #define WACOM_PKGLEN_MAX	192
17 
18 #define WACOM_NAME_MAX		64
19 #define WACOM_MAX_REMOTES	5
20 #define WACOM_STATUS_UNKNOWN	255
21 
22 /* packet length for individual models */
23 #define WACOM_PKGLEN_BBFUN	 9
24 #define WACOM_PKGLEN_TPC1FG	 5
25 #define WACOM_PKGLEN_TPC1FG_B	10
26 #define WACOM_PKGLEN_TPC2FG	14
27 #define WACOM_PKGLEN_BBTOUCH	20
28 #define WACOM_PKGLEN_BBTOUCH3	64
29 #define WACOM_PKGLEN_BBPEN	10
30 #define WACOM_PKGLEN_WIRELESS	32
31 #define WACOM_PKGLEN_PENABLED	 8
32 #define WACOM_PKGLEN_BPAD_TOUCH	32
33 #define WACOM_PKGLEN_BPAD_TOUCH_USB	64
34 
35 /* wacom data size per MT contact */
36 #define WACOM_BYTES_PER_MT_PACKET	11
37 #define WACOM_BYTES_PER_24HDT_PACKET	14
38 #define WACOM_BYTES_PER_QHDTHID_PACKET	 6
39 
40 /* device IDs */
41 #define STYLUS_DEVICE_ID	0x02
42 #define TOUCH_DEVICE_ID		0x03
43 #define CURSOR_DEVICE_ID	0x06
44 #define ERASER_DEVICE_ID	0x0A
45 #define PAD_DEVICE_ID		0x0F
46 
47 /* wacom data packet report IDs */
48 #define WACOM_REPORT_PENABLED		2
49 #define WACOM_REPORT_PENABLED_BT	3
50 #define WACOM_REPORT_INTUOS_ID1		5
51 #define WACOM_REPORT_INTUOS_ID2		6
52 #define WACOM_REPORT_INTUOSPAD		12
53 #define WACOM_REPORT_INTUOS5PAD		3
54 #define WACOM_REPORT_DTUSPAD		21
55 #define WACOM_REPORT_TPC1FG		6
56 #define WACOM_REPORT_TPC2FG		13
57 #define WACOM_REPORT_TPCMT		13
58 #define WACOM_REPORT_TPCMT2		3
59 #define WACOM_REPORT_TPCHID		15
60 #define WACOM_REPORT_CINTIQ		16
61 #define WACOM_REPORT_CINTIQPAD		17
62 #define WACOM_REPORT_TPCST		16
63 #define WACOM_REPORT_DTUS		17
64 #define WACOM_REPORT_TPC1FGE		18
65 #define WACOM_REPORT_24HDT		1
66 #define WACOM_REPORT_WL			128
67 #define WACOM_REPORT_USB		192
68 #define WACOM_REPORT_BPAD_PEN		3
69 #define WACOM_REPORT_BPAD_TOUCH		16
70 #define WACOM_REPORT_DEVICE_LIST	16
71 #define WACOM_REPORT_INTUOS_PEN		16
72 #define WACOM_REPORT_REMOTE		17
73 #define WACOM_REPORT_INTUOSHT2_ID	8
74 
75 /* device quirks */
76 #define WACOM_QUIRK_BBTOUCH_LOWRES	0x0001
77 #define WACOM_QUIRK_SENSE		0x0002
78 #define WACOM_QUIRK_BATTERY		0x0008
79 
80 /* device types */
81 #define WACOM_DEVICETYPE_NONE           0x0000
82 #define WACOM_DEVICETYPE_PEN            0x0001
83 #define WACOM_DEVICETYPE_TOUCH          0x0002
84 #define WACOM_DEVICETYPE_PAD            0x0004
85 #define WACOM_DEVICETYPE_WL_MONITOR     0x0008
86 #define WACOM_DEVICETYPE_DIRECT         0x0010
87 
88 #define WACOM_HID_UP_WACOMDIGITIZER     0xff0d0000
89 #define WACOM_HID_SP_PAD                0x00040000
90 #define WACOM_HID_SP_BUTTON             0x00090000
91 #define WACOM_HID_SP_DIGITIZER          0x000d0000
92 #define WACOM_HID_SP_DIGITIZERINFO      0x00100000
93 #define WACOM_HID_WD_DIGITIZER          (WACOM_HID_UP_WACOMDIGITIZER | 0x01)
94 #define WACOM_HID_WD_SENSE              (WACOM_HID_UP_WACOMDIGITIZER | 0x36)
95 #define WACOM_HID_WD_DIGITIZERFNKEYS    (WACOM_HID_UP_WACOMDIGITIZER | 0x39)
96 #define WACOM_HID_WD_SERIALHI           (WACOM_HID_UP_WACOMDIGITIZER | 0x5c)
97 #define WACOM_HID_WD_TOOLTYPE           (WACOM_HID_UP_WACOMDIGITIZER | 0x77)
98 #define WACOM_HID_WD_DISTANCE           (WACOM_HID_UP_WACOMDIGITIZER | 0x0132)
99 #define WACOM_HID_WD_TOUCHSTRIP         (WACOM_HID_UP_WACOMDIGITIZER | 0x0136)
100 #define WACOM_HID_WD_TOUCHSTRIP2        (WACOM_HID_UP_WACOMDIGITIZER | 0x0137)
101 #define WACOM_HID_WD_TOUCHRING          (WACOM_HID_UP_WACOMDIGITIZER | 0x0138)
102 #define WACOM_HID_WD_TOUCHRINGSTATUS    (WACOM_HID_UP_WACOMDIGITIZER | 0x0139)
103 #define WACOM_HID_WD_ACCELEROMETER_X    (WACOM_HID_UP_WACOMDIGITIZER | 0x0401)
104 #define WACOM_HID_WD_ACCELEROMETER_Y    (WACOM_HID_UP_WACOMDIGITIZER | 0x0402)
105 #define WACOM_HID_WD_ACCELEROMETER_Z    (WACOM_HID_UP_WACOMDIGITIZER | 0x0403)
106 #define WACOM_HID_WD_BATTERY_CHARGING   (WACOM_HID_UP_WACOMDIGITIZER | 0x0404)
107 #define WACOM_HID_WD_BATTERY_LEVEL      (WACOM_HID_UP_WACOMDIGITIZER | 0x043b)
108 #define WACOM_HID_WD_EXPRESSKEY00       (WACOM_HID_UP_WACOMDIGITIZER | 0x0910)
109 #define WACOM_HID_WD_EXPRESSKEYCAP00    (WACOM_HID_UP_WACOMDIGITIZER | 0x0950)
110 #define WACOM_HID_WD_BUTTONHOME         (WACOM_HID_UP_WACOMDIGITIZER | 0x0990)
111 #define WACOM_HID_WD_BUTTONUP           (WACOM_HID_UP_WACOMDIGITIZER | 0x0991)
112 #define WACOM_HID_WD_BUTTONDOWN         (WACOM_HID_UP_WACOMDIGITIZER | 0x0992)
113 #define WACOM_HID_WD_BUTTONLEFT         (WACOM_HID_UP_WACOMDIGITIZER | 0x0993)
114 #define WACOM_HID_WD_BUTTONRIGHT        (WACOM_HID_UP_WACOMDIGITIZER | 0x0994)
115 #define WACOM_HID_WD_BUTTONCENTER       (WACOM_HID_UP_WACOMDIGITIZER | 0x0995)
116 #define WACOM_HID_WD_TOUCHONOFF         (WACOM_HID_UP_WACOMDIGITIZER | 0x0996)
117 #define WACOM_HID_WD_FINGERWHEEL        (WACOM_HID_UP_WACOMDIGITIZER | 0x0d03)
118 #define WACOM_HID_WD_OFFSETLEFT         (WACOM_HID_UP_WACOMDIGITIZER | 0x0d30)
119 #define WACOM_HID_WD_OFFSETTOP          (WACOM_HID_UP_WACOMDIGITIZER | 0x0d31)
120 #define WACOM_HID_WD_OFFSETRIGHT        (WACOM_HID_UP_WACOMDIGITIZER | 0x0d32)
121 #define WACOM_HID_WD_OFFSETBOTTOM       (WACOM_HID_UP_WACOMDIGITIZER | 0x0d33)
122 #define WACOM_HID_WD_DATAMODE           (WACOM_HID_UP_WACOMDIGITIZER | 0x1002)
123 #define WACOM_HID_WD_DIGITIZERINFO      (WACOM_HID_UP_WACOMDIGITIZER | 0x1013)
124 #define WACOM_HID_UP_G9                 0xff090000
125 #define WACOM_HID_G9_PEN                (WACOM_HID_UP_G9 | 0x02)
126 #define WACOM_HID_G9_TOUCHSCREEN        (WACOM_HID_UP_G9 | 0x11)
127 #define WACOM_HID_UP_G11                0xff110000
128 #define WACOM_HID_G11_PEN               (WACOM_HID_UP_G11 | 0x02)
129 #define WACOM_HID_G11_TOUCHSCREEN       (WACOM_HID_UP_G11 | 0x11)
130 
131 #define WACOM_PAD_FIELD(f)	(((f)->physical == HID_DG_TABLETFUNCTIONKEY) || \
132 				 ((f)->physical == WACOM_HID_WD_DIGITIZERFNKEYS) || \
133 				 ((f)->physical == WACOM_HID_WD_DIGITIZERINFO))
134 
135 #define WACOM_PEN_FIELD(f)	(((f)->logical == HID_DG_STYLUS) || \
136 				 ((f)->physical == HID_DG_STYLUS) || \
137 				 ((f)->physical == HID_DG_PEN) || \
138 				 ((f)->application == HID_DG_PEN) || \
139 				 ((f)->application == HID_DG_DIGITIZER) || \
140 				 ((f)->application == WACOM_HID_WD_DIGITIZER) || \
141 				 ((f)->application == WACOM_HID_G9_PEN) || \
142 				 ((f)->application == WACOM_HID_G11_PEN))
143 #define WACOM_FINGER_FIELD(f)	(((f)->logical == HID_DG_FINGER) || \
144 				 ((f)->physical == HID_DG_FINGER) || \
145 				 ((f)->application == HID_DG_TOUCHSCREEN) || \
146 				 ((f)->application == WACOM_HID_G9_TOUCHSCREEN) || \
147 				 ((f)->application == WACOM_HID_G11_TOUCHSCREEN))
148 
149 enum {
150 	PENPARTNER = 0,
151 	GRAPHIRE,
152 	GRAPHIRE_BT,
153 	WACOM_G4,
154 	PTU,
155 	PL,
156 	DTU,
157 	DTUS,
158 	DTUSX,
159 	INTUOS,
160 	INTUOS3S,
161 	INTUOS3,
162 	INTUOS3L,
163 	INTUOS4S,
164 	INTUOS4,
165 	INTUOS4WL,
166 	INTUOS4L,
167 	INTUOS5S,
168 	INTUOS5,
169 	INTUOS5L,
170 	INTUOSPS,
171 	INTUOSPM,
172 	INTUOSPL,
173 	WACOM_21UX2,
174 	WACOM_22HD,
175 	DTK,
176 	WACOM_24HD,
177 	WACOM_27QHD,
178 	CINTIQ_HYBRID,
179 	CINTIQ_COMPANION_2,
180 	CINTIQ,
181 	WACOM_BEE,
182 	WACOM_13HD,
183 	WACOM_MO,
184 	BAMBOO_PEN,
185 	INTUOSHT,
186 	INTUOSHT2,
187 	BAMBOO_TOUCH,
188 	BAMBOO_PT,
189 	WACOM_24HDT,
190 	WACOM_27QHDT,
191 	BAMBOO_PAD,
192 	WIRELESS,
193 	REMOTE,
194 	TABLETPC,   /* add new TPC below */
195 	TABLETPCE,
196 	TABLETPC2FG,
197 	MTSCREEN,
198 	MTTPC,
199 	MTTPC_B,
200 	HID_GENERIC,
201 	MAX_TYPE
202 };
203 
204 struct wacom_features {
205 	const char *name;
206 	int x_max;
207 	int y_max;
208 	int pressure_max;
209 	int distance_max;
210 	int type;
211 	int x_resolution;
212 	int y_resolution;
213 	int numbered_buttons;
214 	int offset_left;
215 	int offset_right;
216 	int offset_top;
217 	int offset_bottom;
218 	int device_type;
219 	int x_phy;
220 	int y_phy;
221 	unsigned unit;
222 	int unitExpo;
223 	int x_fuzz;
224 	int y_fuzz;
225 	int pressure_fuzz;
226 	int distance_fuzz;
227 	int tilt_fuzz;
228 	unsigned quirks;
229 	unsigned touch_max;
230 	int oVid;
231 	int oPid;
232 	int pktlen;
233 	bool check_for_hid_type;
234 	int hid_type;
235 	bool input_event_flag;
236 };
237 
238 struct wacom_shared {
239 	bool stylus_in_proximity;
240 	bool touch_down;
241 	/* for wireless device to access USB interfaces */
242 	unsigned touch_max;
243 	int type;
244 	struct input_dev *touch_input;
245 	struct hid_device *pen;
246 	struct hid_device *touch;
247 };
248 
249 struct hid_data {
250 	__s16 inputmode;	/* InputMode HID feature, -1 if non-existent */
251 	__s16 inputmode_index;	/* InputMode HID feature index in the report */
252 	bool sense_state;
253 	bool inrange_state;
254 	bool invert_state;
255 	bool tipswitch;
256 	int x;
257 	int y;
258 	int pressure;
259 	int width;
260 	int height;
261 	int id;
262 	int cc_report;
263 	int cc_index;
264 	int cc_value_index;
265 	int last_slot_field;
266 	int num_expected;
267 	int num_received;
268 	int battery_capacity;
269 	int bat_charging;
270 	int bat_connected;
271 	int ps_connected;
272 };
273 
274 struct wacom_remote_data {
275 	struct {
276 		u32 serial;
277 		bool connected;
278 	} remote[WACOM_MAX_REMOTES];
279 };
280 
281 struct wacom_wac {
282 	char name[WACOM_NAME_MAX];
283 	char pen_name[WACOM_NAME_MAX];
284 	char touch_name[WACOM_NAME_MAX];
285 	char pad_name[WACOM_NAME_MAX];
286 	unsigned char data[WACOM_PKGLEN_MAX];
287 	int tool[2];
288 	int id[2];
289 	__u64 serial[2];
290 	bool reporting_data;
291 	struct wacom_features features;
292 	struct wacom_shared *shared;
293 	struct input_dev *pen_input;
294 	struct input_dev *touch_input;
295 	struct input_dev *pad_input;
296 	int pid;
297 	int num_contacts_left;
298 	u8 bt_features;
299 	u8 bt_high_speed;
300 	int mode_report;
301 	int mode_value;
302 	struct hid_data hid_data;
303 };
304 
305 #endif
306