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