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