xref: /openbmc/linux/drivers/hid/wacom_wac.h (revision 6189f1b0)
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 
20 /* packet length for individual models */
21 #define WACOM_PKGLEN_BBFUN	 9
22 #define WACOM_PKGLEN_TPC1FG	 5
23 #define WACOM_PKGLEN_TPC1FG_B	10
24 #define WACOM_PKGLEN_TPC2FG	14
25 #define WACOM_PKGLEN_BBTOUCH	20
26 #define WACOM_PKGLEN_BBTOUCH3	64
27 #define WACOM_PKGLEN_BBPEN	10
28 #define WACOM_PKGLEN_WIRELESS	32
29 #define WACOM_PKGLEN_PENABLED	 8
30 #define WACOM_PKGLEN_BPAD_TOUCH	32
31 #define WACOM_PKGLEN_BPAD_TOUCH_USB	64
32 
33 /* wacom data size per MT contact */
34 #define WACOM_BYTES_PER_MT_PACKET	11
35 #define WACOM_BYTES_PER_24HDT_PACKET	14
36 #define WACOM_BYTES_PER_QHDTHID_PACKET	 6
37 
38 /* device IDs */
39 #define STYLUS_DEVICE_ID	0x02
40 #define TOUCH_DEVICE_ID		0x03
41 #define CURSOR_DEVICE_ID	0x06
42 #define ERASER_DEVICE_ID	0x0A
43 #define PAD_DEVICE_ID		0x0F
44 
45 /* wacom data packet report IDs */
46 #define WACOM_REPORT_PENABLED		2
47 #define WACOM_REPORT_PENABLED_BT	3
48 #define WACOM_REPORT_INTUOSREAD		5
49 #define WACOM_REPORT_INTUOSWRITE	6
50 #define WACOM_REPORT_INTUOSPAD		12
51 #define WACOM_REPORT_INTUOS5PAD		3
52 #define WACOM_REPORT_DTUSPAD		21
53 #define WACOM_REPORT_TPC1FG		6
54 #define WACOM_REPORT_TPC2FG		13
55 #define WACOM_REPORT_TPCMT		13
56 #define WACOM_REPORT_TPCMT2		3
57 #define WACOM_REPORT_TPCHID		15
58 #define WACOM_REPORT_CINTIQ		16
59 #define WACOM_REPORT_CINTIQPAD		17
60 #define WACOM_REPORT_TPCST		16
61 #define WACOM_REPORT_DTUS		17
62 #define WACOM_REPORT_TPC1FGE		18
63 #define WACOM_REPORT_24HDT		1
64 #define WACOM_REPORT_WL			128
65 #define WACOM_REPORT_USB		192
66 #define WACOM_REPORT_BPAD_PEN		3
67 #define WACOM_REPORT_BPAD_TOUCH		16
68 
69 /* device quirks */
70 #define WACOM_QUIRK_BBTOUCH_LOWRES	0x0001
71 #define WACOM_QUIRK_NO_INPUT		0x0002
72 #define WACOM_QUIRK_MONITOR		0x0004
73 #define WACOM_QUIRK_BATTERY		0x0008
74 
75 /* device types */
76 #define WACOM_DEVICETYPE_NONE           0x0000
77 #define WACOM_DEVICETYPE_PEN            0x0001
78 #define WACOM_DEVICETYPE_TOUCH          0x0002
79 #define WACOM_DEVICETYPE_PAD            0x0004
80 
81 #define WACOM_VENDORDEFINED_PEN		0xff0d0001
82 
83 #define WACOM_PEN_FIELD(f)	(((f)->logical == HID_DG_STYLUS) || \
84 				 ((f)->physical == HID_DG_STYLUS) || \
85 				 ((f)->physical == HID_DG_PEN) || \
86 				 ((f)->application == HID_DG_PEN) || \
87 				 ((f)->application == HID_DG_DIGITIZER) || \
88 				 ((f)->application == WACOM_VENDORDEFINED_PEN))
89 #define WACOM_FINGER_FIELD(f)	(((f)->logical == HID_DG_FINGER) || \
90 				 ((f)->physical == HID_DG_FINGER) || \
91 				 ((f)->application == HID_DG_TOUCHSCREEN))
92 
93 enum {
94 	PENPARTNER = 0,
95 	GRAPHIRE,
96 	GRAPHIRE_BT,
97 	WACOM_G4,
98 	PTU,
99 	PL,
100 	DTU,
101 	DTUS,
102 	DTUSX,
103 	INTUOS,
104 	INTUOS3S,
105 	INTUOS3,
106 	INTUOS3L,
107 	INTUOS4S,
108 	INTUOS4,
109 	INTUOS4WL,
110 	INTUOS4L,
111 	INTUOS5S,
112 	INTUOS5,
113 	INTUOS5L,
114 	INTUOSPS,
115 	INTUOSPM,
116 	INTUOSPL,
117 	INTUOSHT,
118 	WACOM_21UX2,
119 	WACOM_22HD,
120 	DTK,
121 	WACOM_24HD,
122 	WACOM_27QHD,
123 	CINTIQ_HYBRID,
124 	CINTIQ,
125 	WACOM_BEE,
126 	WACOM_13HD,
127 	WACOM_MO,
128 	WIRELESS,
129 	BAMBOO_PT,
130 	WACOM_24HDT,
131 	WACOM_27QHDT,
132 	BAMBOO_PAD,
133 	TABLETPC,   /* add new TPC below */
134 	TABLETPCE,
135 	TABLETPC2FG,
136 	MTSCREEN,
137 	MTTPC,
138 	MTTPC_B,
139 	HID_GENERIC,
140 	MAX_TYPE
141 };
142 
143 struct wacom_features {
144 	const char *name;
145 	int x_max;
146 	int y_max;
147 	int pressure_max;
148 	int distance_max;
149 	int type;
150 	int x_resolution;
151 	int y_resolution;
152 	int x_min;
153 	int y_min;
154 	int device_type;
155 	int x_phy;
156 	int y_phy;
157 	unsigned unit;
158 	int unitExpo;
159 	int x_fuzz;
160 	int y_fuzz;
161 	int pressure_fuzz;
162 	int distance_fuzz;
163 	unsigned quirks;
164 	unsigned touch_max;
165 	int oVid;
166 	int oPid;
167 	int pktlen;
168 	bool check_for_hid_type;
169 	int hid_type;
170 	int last_slot_field;
171 };
172 
173 struct wacom_shared {
174 	bool stylus_in_proximity;
175 	bool touch_down;
176 	/* for wireless device to access USB interfaces */
177 	unsigned touch_max;
178 	int type;
179 	struct input_dev *touch_input;
180 	struct hid_device *pen;
181 	struct hid_device *touch;
182 };
183 
184 struct hid_data {
185 	__s16 inputmode;	/* InputMode HID feature, -1 if non-existent */
186 	__s16 inputmode_index;	/* InputMode HID feature index in the report */
187 	bool inrange_state;
188 	bool invert_state;
189 	bool tipswitch;
190 	int x;
191 	int y;
192 	int pressure;
193 	int width;
194 	int height;
195 	int id;
196 };
197 
198 struct wacom_wac {
199 	char pen_name[WACOM_NAME_MAX];
200 	char touch_name[WACOM_NAME_MAX];
201 	char pad_name[WACOM_NAME_MAX];
202 	char bat_name[WACOM_NAME_MAX];
203 	char ac_name[WACOM_NAME_MAX];
204 	unsigned char data[WACOM_PKGLEN_MAX];
205 	int tool[2];
206 	int id[2];
207 	__u32 serial[2];
208 	bool reporting_data;
209 	struct wacom_features features;
210 	struct wacom_shared *shared;
211 	struct input_dev *pen_input;
212 	struct input_dev *touch_input;
213 	struct input_dev *pad_input;
214 	bool pen_registered;
215 	bool touch_registered;
216 	bool pad_registered;
217 	int pid;
218 	int battery_capacity;
219 	int num_contacts_left;
220 	int bat_charging;
221 	int bat_connected;
222 	int ps_connected;
223 	u8 bt_features;
224 	u8 bt_high_speed;
225 	struct hid_data hid_data;
226 };
227 
228 #endif
229