Linux Audio

Check our new training course

Loading...
v6.2
  1/* SPDX-License-Identifier: GPL-2.0-or-later */
  2
  3#ifndef WACOM_WAC_H
  4#define WACOM_WAC_H
  5
  6#include <linux/types.h>
  7#include <linux/hid.h>
  8#include <linux/kfifo.h>
  9
 10/* maximum packet length for USB/BT devices */
 11#define WACOM_PKGLEN_MAX	361
 12
 13#define WACOM_NAME_MAX		64
 14#define WACOM_MAX_REMOTES	5
 15#define WACOM_STATUS_UNKNOWN	255
 
 
 16
 17/* packet length for individual models */
 18#define WACOM_PKGLEN_BBFUN	 9
 19#define WACOM_PKGLEN_TPC1FG	 5
 20#define WACOM_PKGLEN_TPC1FG_B	10
 21#define WACOM_PKGLEN_TPC2FG	14
 22#define WACOM_PKGLEN_BBTOUCH	20
 23#define WACOM_PKGLEN_BBTOUCH3	64
 24#define WACOM_PKGLEN_BBPEN	10
 25#define WACOM_PKGLEN_WIRELESS	32
 26#define WACOM_PKGLEN_PENABLED	 8
 27#define WACOM_PKGLEN_BPAD_TOUCH	32
 28#define WACOM_PKGLEN_BPAD_TOUCH_USB	64
 29
 30/* wacom data size per MT contact */
 31#define WACOM_BYTES_PER_MT_PACKET	11
 32#define WACOM_BYTES_PER_24HDT_PACKET	14
 33#define WACOM_BYTES_PER_QHDTHID_PACKET	 6
 34
 35/* device IDs */
 36#define STYLUS_DEVICE_ID	0x02
 37#define TOUCH_DEVICE_ID		0x03
 38#define CURSOR_DEVICE_ID	0x06
 39#define ERASER_DEVICE_ID	0x0A
 40#define PAD_DEVICE_ID		0x0F
 41
 42/* wacom data packet report IDs */
 43#define WACOM_REPORT_PENABLED		2
 44#define WACOM_REPORT_PENABLED_BT	3
 45#define WACOM_REPORT_INTUOS_ID1		5
 46#define WACOM_REPORT_INTUOS_ID2		6
 47#define WACOM_REPORT_INTUOSPAD		12
 48#define WACOM_REPORT_INTUOS5PAD		3
 49#define WACOM_REPORT_DTUSPAD		21
 50#define WACOM_REPORT_TPC1FG		6
 51#define WACOM_REPORT_TPC2FG		13
 52#define WACOM_REPORT_TPCMT		13
 53#define WACOM_REPORT_TPCMT2		3
 54#define WACOM_REPORT_TPCHID		15
 55#define WACOM_REPORT_CINTIQ		16
 56#define WACOM_REPORT_CINTIQPAD		17
 57#define WACOM_REPORT_TPCST		16
 58#define WACOM_REPORT_DTUS		17
 59#define WACOM_REPORT_TPC1FGE		18
 60#define WACOM_REPORT_24HDT		1
 61#define WACOM_REPORT_WL			128
 62#define WACOM_REPORT_USB		192
 63#define WACOM_REPORT_BPAD_PEN		3
 64#define WACOM_REPORT_BPAD_TOUCH		16
 65#define WACOM_REPORT_DEVICE_LIST	16
 66#define WACOM_REPORT_INTUOS_PEN		16
 67#define WACOM_REPORT_REMOTE		17
 68#define WACOM_REPORT_INTUOSHT2_ID	8
 69
 70/* wacom command report ids */
 71#define WAC_CMD_WL_LED_CONTROL          0x03
 72#define WAC_CMD_LED_CONTROL             0x20
 73#define WAC_CMD_ICON_START              0x21
 74#define WAC_CMD_ICON_XFER               0x23
 75#define WAC_CMD_ICON_BT_XFER            0x26
 76#define WAC_CMD_DELETE_PAIRING          0x20
 77#define WAC_CMD_LED_CONTROL_GENERIC     0x32
 78#define WAC_CMD_UNPAIR_ALL              0xFF
 79#define WAC_CMD_WL_INTUOSP2             0x82
 80
 81/* device quirks */
 82#define WACOM_QUIRK_BBTOUCH_LOWRES	0x0001
 83#define WACOM_QUIRK_SENSE		0x0002
 84#define WACOM_QUIRK_AESPEN		0x0004
 85#define WACOM_QUIRK_BATTERY		0x0008
 86#define WACOM_QUIRK_TOOLSERIAL		0x0010
 87#define WACOM_QUIRK_PEN_BUTTON3	0x0020
 88
 89/* device types */
 90#define WACOM_DEVICETYPE_NONE           0x0000
 91#define WACOM_DEVICETYPE_PEN            0x0001
 92#define WACOM_DEVICETYPE_TOUCH          0x0002
 93#define WACOM_DEVICETYPE_PAD            0x0004
 94#define WACOM_DEVICETYPE_WL_MONITOR     0x0008
 95#define WACOM_DEVICETYPE_DIRECT         0x0010
 96
 97#define WACOM_POWER_SUPPLY_STATUS_AUTO  -1
 98
 99#define WACOM_HID_UP_WACOMDIGITIZER     0xff0d0000
100#define WACOM_HID_SP_PAD                0x00040000
101#define WACOM_HID_SP_BUTTON             0x00090000
102#define WACOM_HID_SP_DIGITIZER          0x000d0000
103#define WACOM_HID_SP_DIGITIZERINFO      0x00100000
104#define WACOM_HID_WD_DIGITIZER          (WACOM_HID_UP_WACOMDIGITIZER | 0x01)
105#define WACOM_HID_WD_PEN                (WACOM_HID_UP_WACOMDIGITIZER | 0x02)
106#define WACOM_HID_WD_SENSE              (WACOM_HID_UP_WACOMDIGITIZER | 0x36)
107#define WACOM_HID_WD_DIGITIZERFNKEYS    (WACOM_HID_UP_WACOMDIGITIZER | 0x39)
108#define WACOM_HID_WD_SERIALNUMBER       (WACOM_HID_UP_WACOMDIGITIZER | 0x5b)
109#define WACOM_HID_WD_SERIALHI           (WACOM_HID_UP_WACOMDIGITIZER | 0x5c)
110#define WACOM_HID_WD_BARRELSWITCH3      (WACOM_HID_UP_WACOMDIGITIZER | 0x5d)
111#define WACOM_HID_WD_TOOLTYPE           (WACOM_HID_UP_WACOMDIGITIZER | 0x77)
112#define WACOM_HID_WD_DISTANCE           (WACOM_HID_UP_WACOMDIGITIZER | 0x0132)
113#define WACOM_HID_WD_TOUCHSTRIP         (WACOM_HID_UP_WACOMDIGITIZER | 0x0136)
114#define WACOM_HID_WD_TOUCHSTRIP2        (WACOM_HID_UP_WACOMDIGITIZER | 0x0137)
115#define WACOM_HID_WD_TOUCHRING          (WACOM_HID_UP_WACOMDIGITIZER | 0x0138)
116#define WACOM_HID_WD_TOUCHRINGSTATUS    (WACOM_HID_UP_WACOMDIGITIZER | 0x0139)
117#define WACOM_HID_WD_REPORT_VALID       (WACOM_HID_UP_WACOMDIGITIZER | 0x01d0)
118#define WACOM_HID_WD_SEQUENCENUMBER     (WACOM_HID_UP_WACOMDIGITIZER | 0x0220)
119#define WACOM_HID_WD_ACCELEROMETER_X    (WACOM_HID_UP_WACOMDIGITIZER | 0x0401)
120#define WACOM_HID_WD_ACCELEROMETER_Y    (WACOM_HID_UP_WACOMDIGITIZER | 0x0402)
121#define WACOM_HID_WD_ACCELEROMETER_Z    (WACOM_HID_UP_WACOMDIGITIZER | 0x0403)
122#define WACOM_HID_WD_BATTERY_CHARGING   (WACOM_HID_UP_WACOMDIGITIZER | 0x0404)
123#define WACOM_HID_WD_TOUCHONOFF         (WACOM_HID_UP_WACOMDIGITIZER | 0x0454)
124#define WACOM_HID_WD_BATTERY_LEVEL      (WACOM_HID_UP_WACOMDIGITIZER | 0x043b)
125#define WACOM_HID_WD_EXPRESSKEY00       (WACOM_HID_UP_WACOMDIGITIZER | 0x0910)
126#define WACOM_HID_WD_EXPRESSKEYCAP00    (WACOM_HID_UP_WACOMDIGITIZER | 0x0940)
127#define WACOM_HID_WD_MODE_CHANGE        (WACOM_HID_UP_WACOMDIGITIZER | 0x0980)
128#define WACOM_HID_WD_MUTE_DEVICE        (WACOM_HID_UP_WACOMDIGITIZER | 0x0981)
129#define WACOM_HID_WD_CONTROLPANEL       (WACOM_HID_UP_WACOMDIGITIZER | 0x0982)
130#define WACOM_HID_WD_ONSCREEN_KEYBOARD  (WACOM_HID_UP_WACOMDIGITIZER | 0x0983)
131#define WACOM_HID_WD_BUTTONCONFIG       (WACOM_HID_UP_WACOMDIGITIZER | 0x0986)
132#define WACOM_HID_WD_BUTTONHOME         (WACOM_HID_UP_WACOMDIGITIZER | 0x0990)
133#define WACOM_HID_WD_BUTTONUP           (WACOM_HID_UP_WACOMDIGITIZER | 0x0991)
134#define WACOM_HID_WD_BUTTONDOWN         (WACOM_HID_UP_WACOMDIGITIZER | 0x0992)
135#define WACOM_HID_WD_BUTTONLEFT         (WACOM_HID_UP_WACOMDIGITIZER | 0x0993)
136#define WACOM_HID_WD_BUTTONRIGHT        (WACOM_HID_UP_WACOMDIGITIZER | 0x0994)
137#define WACOM_HID_WD_BUTTONCENTER       (WACOM_HID_UP_WACOMDIGITIZER | 0x0995)
138#define WACOM_HID_WD_FINGERWHEEL        (WACOM_HID_UP_WACOMDIGITIZER | 0x0d03)
139#define WACOM_HID_WD_OFFSETLEFT         (WACOM_HID_UP_WACOMDIGITIZER | 0x0d30)
140#define WACOM_HID_WD_OFFSETTOP          (WACOM_HID_UP_WACOMDIGITIZER | 0x0d31)
141#define WACOM_HID_WD_OFFSETRIGHT        (WACOM_HID_UP_WACOMDIGITIZER | 0x0d32)
142#define WACOM_HID_WD_OFFSETBOTTOM       (WACOM_HID_UP_WACOMDIGITIZER | 0x0d33)
143#define WACOM_HID_WD_DATAMODE           (WACOM_HID_UP_WACOMDIGITIZER | 0x1002)
144#define WACOM_HID_WD_DIGITIZERINFO      (WACOM_HID_UP_WACOMDIGITIZER | 0x1013)
145#define WACOM_HID_WD_TOUCH_RING_SETTING (WACOM_HID_UP_WACOMDIGITIZER | 0x1032)
146#define WACOM_HID_UP_G9                 0xff090000
147#define WACOM_HID_G9_PEN                (WACOM_HID_UP_G9 | 0x02)
148#define WACOM_HID_G9_TOUCHSCREEN        (WACOM_HID_UP_G9 | 0x11)
149#define WACOM_HID_UP_G11                0xff110000
150#define WACOM_HID_G11_PEN               (WACOM_HID_UP_G11 | 0x02)
151#define WACOM_HID_G11_TOUCHSCREEN       (WACOM_HID_UP_G11 | 0x11)
152#define WACOM_HID_UP_WACOMTOUCH         0xff000000
153#define WACOM_HID_WT_TOUCHSCREEN        (WACOM_HID_UP_WACOMTOUCH | 0x04)
154#define WACOM_HID_WT_TOUCHPAD           (WACOM_HID_UP_WACOMTOUCH | 0x05)
155#define WACOM_HID_WT_CONTACTMAX         (WACOM_HID_UP_WACOMTOUCH | 0x55)
156#define WACOM_HID_WT_SERIALNUMBER       (WACOM_HID_UP_WACOMTOUCH | 0x5b)
157#define WACOM_HID_WT_X                  (WACOM_HID_UP_WACOMTOUCH | 0x130)
158#define WACOM_HID_WT_Y                  (WACOM_HID_UP_WACOMTOUCH | 0x131)
159#define WACOM_HID_WT_REPORT_VALID       (WACOM_HID_UP_WACOMTOUCH | 0x1d0)
160
161#define WACOM_BATTERY_USAGE(f)	(((f)->hid == HID_DG_BATTERYSTRENGTH) || \
162				 ((f)->hid == WACOM_HID_WD_BATTERY_CHARGING) || \
163				 ((f)->hid == WACOM_HID_WD_BATTERY_LEVEL))
164
165#define WACOM_PAD_FIELD(f)	(((f)->physical == HID_DG_TABLETFUNCTIONKEY) || \
166				 ((f)->physical == WACOM_HID_WD_DIGITIZERFNKEYS) || \
167				 ((f)->physical == WACOM_HID_WD_DIGITIZERINFO))
168
169#define WACOM_PEN_FIELD(f)	(((f)->logical == HID_DG_STYLUS) || \
170				 ((f)->physical == HID_DG_STYLUS) || \
171				 ((f)->physical == HID_DG_PEN) || \
172				 ((f)->application == HID_DG_PEN) || \
173				 ((f)->application == HID_DG_DIGITIZER) || \
174				 ((f)->application == WACOM_HID_WD_PEN) || \
175				 ((f)->application == WACOM_HID_WD_DIGITIZER) || \
176				 ((f)->application == WACOM_HID_G9_PEN) || \
177				 ((f)->application == WACOM_HID_G11_PEN))
178#define WACOM_FINGER_FIELD(f)	(((f)->logical == HID_DG_FINGER) || \
179				 ((f)->physical == HID_DG_FINGER) || \
180				 ((f)->application == HID_DG_TOUCHSCREEN) || \
181				 ((f)->application == WACOM_HID_G9_TOUCHSCREEN) || \
182				 ((f)->application == WACOM_HID_G11_TOUCHSCREEN) || \
183				 ((f)->application == WACOM_HID_WT_TOUCHPAD) || \
184				 ((f)->application == HID_DG_TOUCHPAD))
185
186#define WACOM_DIRECT_DEVICE(f)	(((f)->application == HID_DG_TOUCHSCREEN) || \
187				 ((f)->application == WACOM_HID_WT_TOUCHSCREEN) || \
188				 ((f)->application == HID_DG_PEN) || \
189				 ((f)->application == WACOM_HID_WD_PEN))
190
191enum {
192	PENPARTNER = 0,
193	GRAPHIRE,
194	GRAPHIRE_BT,
195	WACOM_G4,
196	PTU,
197	PL,
198	DTU,
199	DTUS,
200	DTUSX,
201	INTUOS,
202	INTUOS3S,
203	INTUOS3,
204	INTUOS3L,
205	INTUOS4S,
206	INTUOS4,
207	INTUOS4WL,
208	INTUOS4L,
209	INTUOS5S,
210	INTUOS5,
211	INTUOS5L,
212	INTUOSPS,
213	INTUOSPM,
214	INTUOSPL,
215	INTUOSP2_BT,
216	INTUOSP2S_BT,
217	INTUOSHT3_BT,
218	WACOM_21UX2,
219	WACOM_22HD,
220	DTK,
221	WACOM_24HD,
222	WACOM_27QHD,
223	CINTIQ_HYBRID,
224	CINTIQ_COMPANION_2,
225	CINTIQ,
226	WACOM_BEE,
227	WACOM_13HD,
228	WACOM_MO,
229	BAMBOO_PEN,
230	INTUOSHT,
231	INTUOSHT2,
232	BAMBOO_TOUCH,
233	BAMBOO_PT,
234	WACOM_24HDT,
235	WACOM_27QHDT,
236	BAMBOO_PAD,
237	WIRELESS,
238	REMOTE,
239	TABLETPC,   /* add new TPC below */
240	TABLETPCE,
241	TABLETPC2FG,
242	MTSCREEN,
243	MTTPC,
244	MTTPC_B,
245	HID_GENERIC,
246	BOOTLOADER,
247	MAX_TYPE
248};
249
250struct wacom_features {
251	const char *name;
252	int x_max;
253	int y_max;
254	int pressure_max;
255	int distance_max;
256	int type;
257	int x_resolution;
258	int y_resolution;
259	int numbered_buttons;
260	int offset_left;
261	int offset_right;
262	int offset_top;
263	int offset_bottom;
264	int device_type;
265	int x_phy;
266	int y_phy;
267	unsigned unit;
268	int unitExpo;
269	int x_fuzz;
270	int y_fuzz;
271	int pressure_fuzz;
272	int distance_fuzz;
273	int tilt_fuzz;
274	unsigned quirks;
275	unsigned touch_max;
276	int oVid;
277	int oPid;
278	int pktlen;
279	bool check_for_hid_type;
280	int hid_type;
281};
282
283struct wacom_shared {
284	bool stylus_in_proximity;
285	bool touch_down;
286	/* for wireless device to access USB interfaces */
287	unsigned touch_max;
288	int type;
289	struct input_dev *touch_input;
290	struct hid_device *pen;
291	struct hid_device *touch;
292	bool has_mute_touch_switch;
293	bool is_touch_on;
294};
295
296struct hid_data {
297	__s16 inputmode;	/* InputMode HID feature, -1 if non-existent */
298	__s16 inputmode_index;	/* InputMode HID feature index in the report */
299	bool sense_state;
300	bool inrange_state;
301	bool invert_state;
302	bool tipswitch;
303	bool barrelswitch;
304	bool barrelswitch2;
305	bool barrelswitch3;
306	bool serialhi;
307	bool confidence;
308	int x;
309	int y;
310	int pressure;
311	int width;
312	int height;
313	int id;
314	int cc_report;
315	int cc_index;
316	int cc_value_index;
317	int last_slot_field;
318	int num_expected;
319	int num_received;
320	int bat_status;
321	int battery_capacity;
322	int bat_charging;
323	int bat_connected;
324	int ps_connected;
325	bool pad_input_event_flag;
326	unsigned short sequence_number;
 
327};
328
329struct wacom_remote_data {
330	struct {
331		u32 serial;
332		bool connected;
333	} remote[WACOM_MAX_REMOTES];
334};
335
336struct wacom_wac {
337	char name[WACOM_NAME_MAX];
338	char pen_name[WACOM_NAME_MAX];
339	char touch_name[WACOM_NAME_MAX];
340	char pad_name[WACOM_NAME_MAX];
341	unsigned char data[WACOM_PKGLEN_MAX];
342	int tool[2];
343	int id[2];
344	__u64 serial[2];
345	bool probe_complete;
346	bool reporting_data;
347	struct wacom_features features;
348	struct wacom_shared *shared;
349	struct input_dev *pen_input;
350	struct input_dev *touch_input;
351	struct input_dev *pad_input;
352	struct kfifo_rec_ptr_2 *pen_fifo;
353	int pid;
354	int num_contacts_left;
355	u8 bt_features;
356	u8 bt_high_speed;
357	int mode_report;
358	int mode_value;
359	struct hid_data hid_data;
360	bool has_mute_touch_switch;
361	bool is_soft_touch_switch;
362	bool has_mode_change;
363	bool is_direct_mode;
364	bool is_invalid_bt_frame;
365};
366
367#endif
v6.8
  1/* SPDX-License-Identifier: GPL-2.0-or-later */
  2
  3#ifndef WACOM_WAC_H
  4#define WACOM_WAC_H
  5
  6#include <linux/types.h>
  7#include <linux/hid.h>
  8#include <linux/kfifo.h>
  9
 10/* maximum packet length for USB/BT devices */
 11#define WACOM_PKGLEN_MAX	361
 12
 13#define WACOM_NAME_MAX		64
 14#define WACOM_MAX_REMOTES	5
 15#define WACOM_STATUS_UNKNOWN	255
 16#define WACOM_REMOTE_BATTERY_TIMEOUT	21000000000ll
 17#define WACOM_AES_BATTERY_TIMEOUT       1800000
 18
 19/* packet length for individual models */
 20#define WACOM_PKGLEN_BBFUN	 9
 21#define WACOM_PKGLEN_TPC1FG	 5
 22#define WACOM_PKGLEN_TPC1FG_B	10
 23#define WACOM_PKGLEN_TPC2FG	14
 24#define WACOM_PKGLEN_BBTOUCH	20
 25#define WACOM_PKGLEN_BBTOUCH3	64
 26#define WACOM_PKGLEN_BBPEN	10
 27#define WACOM_PKGLEN_WIRELESS	32
 28#define WACOM_PKGLEN_PENABLED	 8
 29#define WACOM_PKGLEN_BPAD_TOUCH	32
 30#define WACOM_PKGLEN_BPAD_TOUCH_USB	64
 31
 32/* wacom data size per MT contact */
 33#define WACOM_BYTES_PER_MT_PACKET	11
 34#define WACOM_BYTES_PER_24HDT_PACKET	14
 35#define WACOM_BYTES_PER_QHDTHID_PACKET	 6
 36
 37/* device IDs */
 38#define STYLUS_DEVICE_ID	0x02
 39#define TOUCH_DEVICE_ID		0x03
 40#define CURSOR_DEVICE_ID	0x06
 41#define ERASER_DEVICE_ID	0x0A
 42#define PAD_DEVICE_ID		0x0F
 43
 44/* wacom data packet report IDs */
 45#define WACOM_REPORT_PENABLED		2
 46#define WACOM_REPORT_PENABLED_BT	3
 47#define WACOM_REPORT_INTUOS_ID1		5
 48#define WACOM_REPORT_INTUOS_ID2		6
 49#define WACOM_REPORT_INTUOSPAD		12
 50#define WACOM_REPORT_INTUOS5PAD		3
 51#define WACOM_REPORT_DTUSPAD		21
 52#define WACOM_REPORT_TPC1FG		6
 53#define WACOM_REPORT_TPC2FG		13
 54#define WACOM_REPORT_TPCMT		13
 55#define WACOM_REPORT_TPCMT2		3
 56#define WACOM_REPORT_TPCHID		15
 57#define WACOM_REPORT_CINTIQ		16
 58#define WACOM_REPORT_CINTIQPAD		17
 59#define WACOM_REPORT_TPCST		16
 60#define WACOM_REPORT_DTUS		17
 61#define WACOM_REPORT_TPC1FGE		18
 62#define WACOM_REPORT_24HDT		1
 63#define WACOM_REPORT_WL			128
 64#define WACOM_REPORT_USB		192
 65#define WACOM_REPORT_BPAD_PEN		3
 66#define WACOM_REPORT_BPAD_TOUCH		16
 67#define WACOM_REPORT_DEVICE_LIST	16
 68#define WACOM_REPORT_INTUOS_PEN		16
 69#define WACOM_REPORT_REMOTE		17
 70#define WACOM_REPORT_INTUOSHT2_ID	8
 71
 72/* wacom command report ids */
 73#define WAC_CMD_WL_LED_CONTROL          0x03
 74#define WAC_CMD_LED_CONTROL             0x20
 75#define WAC_CMD_ICON_START              0x21
 76#define WAC_CMD_ICON_XFER               0x23
 77#define WAC_CMD_ICON_BT_XFER            0x26
 78#define WAC_CMD_DELETE_PAIRING          0x20
 79#define WAC_CMD_LED_CONTROL_GENERIC     0x32
 80#define WAC_CMD_UNPAIR_ALL              0xFF
 81#define WAC_CMD_WL_INTUOSP2             0x82
 82
 83/* device quirks */
 84#define WACOM_QUIRK_BBTOUCH_LOWRES	0x0001
 85#define WACOM_QUIRK_SENSE		0x0002
 86#define WACOM_QUIRK_AESPEN		0x0004
 87#define WACOM_QUIRK_BATTERY		0x0008
 88#define WACOM_QUIRK_TOOLSERIAL		0x0010
 89#define WACOM_QUIRK_PEN_BUTTON3	0x0020
 90
 91/* device types */
 92#define WACOM_DEVICETYPE_NONE           0x0000
 93#define WACOM_DEVICETYPE_PEN            0x0001
 94#define WACOM_DEVICETYPE_TOUCH          0x0002
 95#define WACOM_DEVICETYPE_PAD            0x0004
 96#define WACOM_DEVICETYPE_WL_MONITOR     0x0008
 97#define WACOM_DEVICETYPE_DIRECT         0x0010
 98
 99#define WACOM_POWER_SUPPLY_STATUS_AUTO  -1
100
101#define WACOM_HID_UP_WACOMDIGITIZER     0xff0d0000
102#define WACOM_HID_SP_PAD                0x00040000
103#define WACOM_HID_SP_BUTTON             0x00090000
104#define WACOM_HID_SP_DIGITIZER          0x000d0000
105#define WACOM_HID_SP_DIGITIZERINFO      0x00100000
106#define WACOM_HID_WD_DIGITIZER          (WACOM_HID_UP_WACOMDIGITIZER | 0x01)
107#define WACOM_HID_WD_PEN                (WACOM_HID_UP_WACOMDIGITIZER | 0x02)
108#define WACOM_HID_WD_SENSE              (WACOM_HID_UP_WACOMDIGITIZER | 0x36)
109#define WACOM_HID_WD_DIGITIZERFNKEYS    (WACOM_HID_UP_WACOMDIGITIZER | 0x39)
110#define WACOM_HID_WD_SERIALNUMBER       (WACOM_HID_UP_WACOMDIGITIZER | 0x5b)
111#define WACOM_HID_WD_SERIALHI           (WACOM_HID_UP_WACOMDIGITIZER | 0x5c)
112#define WACOM_HID_WD_BARRELSWITCH3      (WACOM_HID_UP_WACOMDIGITIZER | 0x5d)
113#define WACOM_HID_WD_TOOLTYPE           (WACOM_HID_UP_WACOMDIGITIZER | 0x77)
114#define WACOM_HID_WD_DISTANCE           (WACOM_HID_UP_WACOMDIGITIZER | 0x0132)
115#define WACOM_HID_WD_TOUCHSTRIP         (WACOM_HID_UP_WACOMDIGITIZER | 0x0136)
116#define WACOM_HID_WD_TOUCHSTRIP2        (WACOM_HID_UP_WACOMDIGITIZER | 0x0137)
117#define WACOM_HID_WD_TOUCHRING          (WACOM_HID_UP_WACOMDIGITIZER | 0x0138)
118#define WACOM_HID_WD_TOUCHRINGSTATUS    (WACOM_HID_UP_WACOMDIGITIZER | 0x0139)
119#define WACOM_HID_WD_REPORT_VALID       (WACOM_HID_UP_WACOMDIGITIZER | 0x01d0)
120#define WACOM_HID_WD_SEQUENCENUMBER     (WACOM_HID_UP_WACOMDIGITIZER | 0x0220)
121#define WACOM_HID_WD_ACCELEROMETER_X    (WACOM_HID_UP_WACOMDIGITIZER | 0x0401)
122#define WACOM_HID_WD_ACCELEROMETER_Y    (WACOM_HID_UP_WACOMDIGITIZER | 0x0402)
123#define WACOM_HID_WD_ACCELEROMETER_Z    (WACOM_HID_UP_WACOMDIGITIZER | 0x0403)
124#define WACOM_HID_WD_BATTERY_CHARGING   (WACOM_HID_UP_WACOMDIGITIZER | 0x0404)
125#define WACOM_HID_WD_TOUCHONOFF         (WACOM_HID_UP_WACOMDIGITIZER | 0x0454)
126#define WACOM_HID_WD_BATTERY_LEVEL      (WACOM_HID_UP_WACOMDIGITIZER | 0x043b)
127#define WACOM_HID_WD_EXPRESSKEY00       (WACOM_HID_UP_WACOMDIGITIZER | 0x0910)
128#define WACOM_HID_WD_EXPRESSKEYCAP00    (WACOM_HID_UP_WACOMDIGITIZER | 0x0940)
129#define WACOM_HID_WD_MODE_CHANGE        (WACOM_HID_UP_WACOMDIGITIZER | 0x0980)
130#define WACOM_HID_WD_MUTE_DEVICE        (WACOM_HID_UP_WACOMDIGITIZER | 0x0981)
131#define WACOM_HID_WD_CONTROLPANEL       (WACOM_HID_UP_WACOMDIGITIZER | 0x0982)
132#define WACOM_HID_WD_ONSCREEN_KEYBOARD  (WACOM_HID_UP_WACOMDIGITIZER | 0x0983)
133#define WACOM_HID_WD_BUTTONCONFIG       (WACOM_HID_UP_WACOMDIGITIZER | 0x0986)
134#define WACOM_HID_WD_BUTTONHOME         (WACOM_HID_UP_WACOMDIGITIZER | 0x0990)
135#define WACOM_HID_WD_BUTTONUP           (WACOM_HID_UP_WACOMDIGITIZER | 0x0991)
136#define WACOM_HID_WD_BUTTONDOWN         (WACOM_HID_UP_WACOMDIGITIZER | 0x0992)
137#define WACOM_HID_WD_BUTTONLEFT         (WACOM_HID_UP_WACOMDIGITIZER | 0x0993)
138#define WACOM_HID_WD_BUTTONRIGHT        (WACOM_HID_UP_WACOMDIGITIZER | 0x0994)
139#define WACOM_HID_WD_BUTTONCENTER       (WACOM_HID_UP_WACOMDIGITIZER | 0x0995)
140#define WACOM_HID_WD_FINGERWHEEL        (WACOM_HID_UP_WACOMDIGITIZER | 0x0d03)
141#define WACOM_HID_WD_OFFSETLEFT         (WACOM_HID_UP_WACOMDIGITIZER | 0x0d30)
142#define WACOM_HID_WD_OFFSETTOP          (WACOM_HID_UP_WACOMDIGITIZER | 0x0d31)
143#define WACOM_HID_WD_OFFSETRIGHT        (WACOM_HID_UP_WACOMDIGITIZER | 0x0d32)
144#define WACOM_HID_WD_OFFSETBOTTOM       (WACOM_HID_UP_WACOMDIGITIZER | 0x0d33)
145#define WACOM_HID_WD_DATAMODE           (WACOM_HID_UP_WACOMDIGITIZER | 0x1002)
146#define WACOM_HID_WD_DIGITIZERINFO      (WACOM_HID_UP_WACOMDIGITIZER | 0x1013)
147#define WACOM_HID_WD_TOUCH_RING_SETTING (WACOM_HID_UP_WACOMDIGITIZER | 0x1032)
148#define WACOM_HID_UP_G9                 0xff090000
149#define WACOM_HID_G9_PEN                (WACOM_HID_UP_G9 | 0x02)
150#define WACOM_HID_G9_TOUCHSCREEN        (WACOM_HID_UP_G9 | 0x11)
151#define WACOM_HID_UP_G11                0xff110000
152#define WACOM_HID_G11_PEN               (WACOM_HID_UP_G11 | 0x02)
153#define WACOM_HID_G11_TOUCHSCREEN       (WACOM_HID_UP_G11 | 0x11)
154#define WACOM_HID_UP_WACOMTOUCH         0xff000000
155#define WACOM_HID_WT_TOUCHSCREEN        (WACOM_HID_UP_WACOMTOUCH | 0x04)
156#define WACOM_HID_WT_TOUCHPAD           (WACOM_HID_UP_WACOMTOUCH | 0x05)
157#define WACOM_HID_WT_CONTACTMAX         (WACOM_HID_UP_WACOMTOUCH | 0x55)
158#define WACOM_HID_WT_SERIALNUMBER       (WACOM_HID_UP_WACOMTOUCH | 0x5b)
159#define WACOM_HID_WT_X                  (WACOM_HID_UP_WACOMTOUCH | 0x130)
160#define WACOM_HID_WT_Y                  (WACOM_HID_UP_WACOMTOUCH | 0x131)
161#define WACOM_HID_WT_REPORT_VALID       (WACOM_HID_UP_WACOMTOUCH | 0x1d0)
162
163#define WACOM_BATTERY_USAGE(f)	(((f)->hid == HID_DG_BATTERYSTRENGTH) || \
164				 ((f)->hid == WACOM_HID_WD_BATTERY_CHARGING) || \
165				 ((f)->hid == WACOM_HID_WD_BATTERY_LEVEL))
166
167#define WACOM_PAD_FIELD(f)	(((f)->physical == HID_DG_TABLETFUNCTIONKEY) || \
168				 ((f)->physical == WACOM_HID_WD_DIGITIZERFNKEYS) || \
169				 ((f)->physical == WACOM_HID_WD_DIGITIZERINFO))
170
171#define WACOM_PEN_FIELD(f)	(((f)->logical == HID_DG_STYLUS) || \
172				 ((f)->physical == HID_DG_STYLUS) || \
173				 ((f)->physical == HID_DG_PEN) || \
174				 ((f)->application == HID_DG_PEN) || \
175				 ((f)->application == HID_DG_DIGITIZER) || \
176				 ((f)->application == WACOM_HID_WD_PEN) || \
177				 ((f)->application == WACOM_HID_WD_DIGITIZER) || \
178				 ((f)->application == WACOM_HID_G9_PEN) || \
179				 ((f)->application == WACOM_HID_G11_PEN))
180#define WACOM_FINGER_FIELD(f)	(((f)->logical == HID_DG_FINGER) || \
181				 ((f)->physical == HID_DG_FINGER) || \
182				 ((f)->application == HID_DG_TOUCHSCREEN) || \
183				 ((f)->application == WACOM_HID_G9_TOUCHSCREEN) || \
184				 ((f)->application == WACOM_HID_G11_TOUCHSCREEN) || \
185				 ((f)->application == WACOM_HID_WT_TOUCHPAD) || \
186				 ((f)->application == HID_DG_TOUCHPAD))
187
188#define WACOM_DIRECT_DEVICE(f)	(((f)->application == HID_DG_TOUCHSCREEN) || \
189				 ((f)->application == WACOM_HID_WT_TOUCHSCREEN) || \
190				 ((f)->application == HID_DG_PEN) || \
191				 ((f)->application == WACOM_HID_WD_PEN))
192
193enum {
194	PENPARTNER = 0,
195	GRAPHIRE,
196	GRAPHIRE_BT,
197	WACOM_G4,
198	PTU,
199	PL,
200	DTU,
201	DTUS,
202	DTUSX,
203	INTUOS,
204	INTUOS3S,
205	INTUOS3,
206	INTUOS3L,
207	INTUOS4S,
208	INTUOS4,
209	INTUOS4WL,
210	INTUOS4L,
211	INTUOS5S,
212	INTUOS5,
213	INTUOS5L,
214	INTUOSPS,
215	INTUOSPM,
216	INTUOSPL,
217	INTUOSP2_BT,
218	INTUOSP2S_BT,
219	INTUOSHT3_BT,
220	WACOM_21UX2,
221	WACOM_22HD,
222	DTK,
223	WACOM_24HD,
224	WACOM_27QHD,
225	CINTIQ_HYBRID,
226	CINTIQ_COMPANION_2,
227	CINTIQ,
228	WACOM_BEE,
229	WACOM_13HD,
230	WACOM_MO,
231	BAMBOO_PEN,
232	INTUOSHT,
233	INTUOSHT2,
234	BAMBOO_TOUCH,
235	BAMBOO_PT,
236	WACOM_24HDT,
237	WACOM_27QHDT,
238	BAMBOO_PAD,
239	WIRELESS,
240	REMOTE,
241	TABLETPC,   /* add new TPC below */
242	TABLETPCE,
243	TABLETPC2FG,
244	MTSCREEN,
245	MTTPC,
246	MTTPC_B,
247	HID_GENERIC,
248	BOOTLOADER,
249	MAX_TYPE
250};
251
252struct wacom_features {
253	const char *name;
254	int x_max;
255	int y_max;
256	int pressure_max;
257	int distance_max;
258	int type;
259	int x_resolution;
260	int y_resolution;
261	int numbered_buttons;
262	int offset_left;
263	int offset_right;
264	int offset_top;
265	int offset_bottom;
266	int device_type;
267	int x_phy;
268	int y_phy;
269	unsigned unit;
270	int unitExpo;
271	int x_fuzz;
272	int y_fuzz;
273	int pressure_fuzz;
274	int distance_fuzz;
275	int tilt_fuzz;
276	unsigned quirks;
277	unsigned touch_max;
278	int oVid;
279	int oPid;
280	int pktlen;
281	bool check_for_hid_type;
282	int hid_type;
283};
284
285struct wacom_shared {
286	bool stylus_in_proximity;
287	bool touch_down;
288	/* for wireless device to access USB interfaces */
289	unsigned touch_max;
290	int type;
291	struct input_dev *touch_input;
292	struct hid_device *pen;
293	struct hid_device *touch;
294	bool has_mute_touch_switch;
295	bool is_touch_on;
296};
297
298struct hid_data {
299	__s16 inputmode;	/* InputMode HID feature, -1 if non-existent */
300	__s16 inputmode_index;	/* InputMode HID feature index in the report */
301	bool sense_state;
302	bool inrange_state;
303	bool invert_state;
304	bool tipswitch;
305	bool barrelswitch;
306	bool barrelswitch2;
307	bool barrelswitch3;
308	bool serialhi;
309	bool confidence;
310	int x;
311	int y;
312	int pressure;
313	int width;
314	int height;
315	int id;
316	int cc_report;
317	int cc_index;
318	int cc_value_index;
319	int last_slot_field;
320	int num_expected;
321	int num_received;
322	int bat_status;
323	int battery_capacity;
324	int bat_charging;
325	int bat_connected;
326	int ps_connected;
327	bool pad_input_event_flag;
328	unsigned short sequence_number;
329	ktime_t time_delayed;
330};
331
332struct wacom_remote_work_data {
333	struct {
334		u32 serial;
 
335	} remote[WACOM_MAX_REMOTES];
336};
337
338struct wacom_wac {
339	char name[WACOM_NAME_MAX];
340	char pen_name[WACOM_NAME_MAX];
341	char touch_name[WACOM_NAME_MAX];
342	char pad_name[WACOM_NAME_MAX];
343	unsigned char data[WACOM_PKGLEN_MAX];
344	int tool[2];
345	int id[2];
346	__u64 serial[2];
347	bool probe_complete;
348	bool reporting_data;
349	struct wacom_features features;
350	struct wacom_shared *shared;
351	struct input_dev *pen_input;
352	struct input_dev *touch_input;
353	struct input_dev *pad_input;
354	struct kfifo_rec_ptr_2 *pen_fifo;
355	int pid;
356	int num_contacts_left;
357	u8 bt_features;
358	u8 bt_high_speed;
359	int mode_report;
360	int mode_value;
361	struct hid_data hid_data;
362	bool has_mute_touch_switch;
363	bool is_soft_touch_switch;
364	bool has_mode_change;
365	bool is_direct_mode;
366	bool is_invalid_bt_frame;
367};
368
369#endif