xref: /linux/drivers/hid/wacom_wac.h (revision f3a8b6645dc2e60d11f20c1c23afd964ff4e55ae)
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_BATTERY		0x0008
78 
79 /* device types */
80 #define WACOM_DEVICETYPE_NONE           0x0000
81 #define WACOM_DEVICETYPE_PEN            0x0001
82 #define WACOM_DEVICETYPE_TOUCH          0x0002
83 #define WACOM_DEVICETYPE_PAD            0x0004
84 #define WACOM_DEVICETYPE_WL_MONITOR     0x0008
85 #define WACOM_DEVICETYPE_DIRECT         0x0010
86 
87 #define WACOM_VENDORDEFINED_PEN		0xff0d0001
88 #define WACOM_G9_PAGE			0xff090000
89 #define WACOM_G9_DIGITIZER		(WACOM_G9_PAGE | 0x02)
90 #define WACOM_G9_TOUCHSCREEN		(WACOM_G9_PAGE | 0x11)
91 #define WACOM_G11_PAGE			0xff110000
92 #define WACOM_G11_DIGITIZER		(WACOM_G11_PAGE | 0x02)
93 #define WACOM_G11_TOUCHSCREEN		(WACOM_G11_PAGE | 0x11)
94 
95 #define WACOM_PEN_FIELD(f)	(((f)->logical == HID_DG_STYLUS) || \
96 				 ((f)->physical == HID_DG_STYLUS) || \
97 				 ((f)->physical == HID_DG_PEN) || \
98 				 ((f)->application == HID_DG_PEN) || \
99 				 ((f)->application == HID_DG_DIGITIZER) || \
100 				 ((f)->application == WACOM_VENDORDEFINED_PEN))
101 #define WACOM_FINGER_FIELD(f)	(((f)->logical == HID_DG_FINGER) || \
102 				 ((f)->physical == HID_DG_FINGER) || \
103 				 ((f)->application == HID_DG_TOUCHSCREEN))
104 
105 enum {
106 	PENPARTNER = 0,
107 	GRAPHIRE,
108 	GRAPHIRE_BT,
109 	WACOM_G4,
110 	PTU,
111 	PL,
112 	DTU,
113 	DTUS,
114 	DTUSX,
115 	INTUOS,
116 	INTUOS3S,
117 	INTUOS3,
118 	INTUOS3L,
119 	INTUOS4S,
120 	INTUOS4,
121 	INTUOS4WL,
122 	INTUOS4L,
123 	INTUOS5S,
124 	INTUOS5,
125 	INTUOS5L,
126 	INTUOSPS,
127 	INTUOSPM,
128 	INTUOSPL,
129 	WACOM_21UX2,
130 	WACOM_22HD,
131 	DTK,
132 	WACOM_24HD,
133 	WACOM_27QHD,
134 	CINTIQ_HYBRID,
135 	CINTIQ_COMPANION_2,
136 	CINTIQ,
137 	WACOM_BEE,
138 	WACOM_13HD,
139 	WACOM_MO,
140 	BAMBOO_PEN,
141 	INTUOSHT,
142 	INTUOSHT2,
143 	BAMBOO_TOUCH,
144 	BAMBOO_PT,
145 	WACOM_24HDT,
146 	WACOM_27QHDT,
147 	BAMBOO_PAD,
148 	WIRELESS,
149 	REMOTE,
150 	TABLETPC,   /* add new TPC below */
151 	TABLETPCE,
152 	TABLETPC2FG,
153 	MTSCREEN,
154 	MTTPC,
155 	MTTPC_B,
156 	HID_GENERIC,
157 	MAX_TYPE
158 };
159 
160 struct wacom_features {
161 	const char *name;
162 	int x_max;
163 	int y_max;
164 	int pressure_max;
165 	int distance_max;
166 	int type;
167 	int x_resolution;
168 	int y_resolution;
169 	int numbered_buttons;
170 	int x_min;
171 	int y_min;
172 	int device_type;
173 	int x_phy;
174 	int y_phy;
175 	unsigned unit;
176 	int unitExpo;
177 	int x_fuzz;
178 	int y_fuzz;
179 	int pressure_fuzz;
180 	int distance_fuzz;
181 	int tilt_fuzz;
182 	unsigned quirks;
183 	unsigned touch_max;
184 	int oVid;
185 	int oPid;
186 	int pktlen;
187 	bool check_for_hid_type;
188 	int hid_type;
189 };
190 
191 struct wacom_shared {
192 	bool stylus_in_proximity;
193 	bool touch_down;
194 	/* for wireless device to access USB interfaces */
195 	unsigned touch_max;
196 	int type;
197 	struct input_dev *touch_input;
198 	struct hid_device *pen;
199 	struct hid_device *touch;
200 };
201 
202 struct hid_data {
203 	__s16 inputmode;	/* InputMode HID feature, -1 if non-existent */
204 	__s16 inputmode_index;	/* InputMode HID feature index in the report */
205 	bool inrange_state;
206 	bool invert_state;
207 	bool tipswitch;
208 	int x;
209 	int y;
210 	int pressure;
211 	int width;
212 	int height;
213 	int id;
214 	int cc_report;
215 	int cc_index;
216 	int cc_value_index;
217 	int last_slot_field;
218 	int num_expected;
219 	int num_received;
220 };
221 
222 struct wacom_remote_data {
223 	struct {
224 		u32 serial;
225 		bool connected;
226 	} remote[WACOM_MAX_REMOTES];
227 };
228 
229 struct wacom_wac {
230 	char name[WACOM_NAME_MAX];
231 	char pen_name[WACOM_NAME_MAX];
232 	char touch_name[WACOM_NAME_MAX];
233 	char pad_name[WACOM_NAME_MAX];
234 	unsigned char data[WACOM_PKGLEN_MAX];
235 	int tool[2];
236 	int id[2];
237 	__u32 serial[2];
238 	bool reporting_data;
239 	struct wacom_features features;
240 	struct wacom_shared *shared;
241 	struct input_dev *pen_input;
242 	struct input_dev *touch_input;
243 	struct input_dev *pad_input;
244 	int pid;
245 	int num_contacts_left;
246 	u8 bt_features;
247 	u8 bt_high_speed;
248 	int mode_report;
249 	int mode_value;
250 	struct hid_data hid_data;
251 };
252 
253 #endif
254