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