Linux Audio

Check our new training course

Loading...
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
v5.4
  1/* SPDX-License-Identifier: GPL-2.0-or-later */
  2/*
  3 * drivers/input/tablet/wacom_wac.h
  4 */
  5#ifndef WACOM_WAC_H
  6#define WACOM_WAC_H
  7
  8#include <linux/types.h>
  9#include <linux/hid.h>
 10#include <linux/kfifo.h>
 11
 12/* maximum packet length for USB/BT devices */
 13#define WACOM_PKGLEN_MAX	361
 14
 15#define WACOM_NAME_MAX		64
 16#define WACOM_MAX_REMOTES	5
 17#define WACOM_STATUS_UNKNOWN	255
 
 
 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
 90/* device types */
 91#define WACOM_DEVICETYPE_NONE           0x0000
 92#define WACOM_DEVICETYPE_PEN            0x0001
 93#define WACOM_DEVICETYPE_TOUCH          0x0002
 94#define WACOM_DEVICETYPE_PAD            0x0004
 95#define WACOM_DEVICETYPE_WL_MONITOR     0x0008
 96#define WACOM_DEVICETYPE_DIRECT         0x0010
 97
 98#define WACOM_POWER_SUPPLY_STATUS_AUTO  -1
 99
100#define WACOM_HID_UP_WACOMDIGITIZER     0xff0d0000
101#define WACOM_HID_SP_PAD                0x00040000
102#define WACOM_HID_SP_BUTTON             0x00090000
103#define WACOM_HID_SP_DIGITIZER          0x000d0000
104#define WACOM_HID_SP_DIGITIZERINFO      0x00100000
105#define WACOM_HID_WD_DIGITIZER          (WACOM_HID_UP_WACOMDIGITIZER | 0x01)
106#define WACOM_HID_WD_PEN                (WACOM_HID_UP_WACOMDIGITIZER | 0x02)
107#define WACOM_HID_WD_SENSE              (WACOM_HID_UP_WACOMDIGITIZER | 0x36)
108#define WACOM_HID_WD_DIGITIZERFNKEYS    (WACOM_HID_UP_WACOMDIGITIZER | 0x39)
109#define WACOM_HID_WD_SERIALNUMBER       (WACOM_HID_UP_WACOMDIGITIZER | 0x5b)
110#define WACOM_HID_WD_SERIALHI           (WACOM_HID_UP_WACOMDIGITIZER | 0x5c)
 
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_ACCELEROMETER_X    (WACOM_HID_UP_WACOMDIGITIZER | 0x0401)
119#define WACOM_HID_WD_ACCELEROMETER_Y    (WACOM_HID_UP_WACOMDIGITIZER | 0x0402)
120#define WACOM_HID_WD_ACCELEROMETER_Z    (WACOM_HID_UP_WACOMDIGITIZER | 0x0403)
121#define WACOM_HID_WD_BATTERY_CHARGING   (WACOM_HID_UP_WACOMDIGITIZER | 0x0404)
122#define WACOM_HID_WD_TOUCHONOFF         (WACOM_HID_UP_WACOMDIGITIZER | 0x0454)
123#define WACOM_HID_WD_BATTERY_LEVEL      (WACOM_HID_UP_WACOMDIGITIZER | 0x043b)
124#define WACOM_HID_WD_EXPRESSKEY00       (WACOM_HID_UP_WACOMDIGITIZER | 0x0910)
125#define WACOM_HID_WD_EXPRESSKEYCAP00    (WACOM_HID_UP_WACOMDIGITIZER | 0x0950)
126#define WACOM_HID_WD_MODE_CHANGE        (WACOM_HID_UP_WACOMDIGITIZER | 0x0980)
127#define WACOM_HID_WD_MUTE_DEVICE        (WACOM_HID_UP_WACOMDIGITIZER | 0x0981)
128#define WACOM_HID_WD_CONTROLPANEL       (WACOM_HID_UP_WACOMDIGITIZER | 0x0982)
129#define WACOM_HID_WD_ONSCREEN_KEYBOARD  (WACOM_HID_UP_WACOMDIGITIZER | 0x0983)
130#define WACOM_HID_WD_BUTTONCONFIG       (WACOM_HID_UP_WACOMDIGITIZER | 0x0986)
131#define WACOM_HID_WD_BUTTONHOME         (WACOM_HID_UP_WACOMDIGITIZER | 0x0990)
132#define WACOM_HID_WD_BUTTONUP           (WACOM_HID_UP_WACOMDIGITIZER | 0x0991)
133#define WACOM_HID_WD_BUTTONDOWN         (WACOM_HID_UP_WACOMDIGITIZER | 0x0992)
134#define WACOM_HID_WD_BUTTONLEFT         (WACOM_HID_UP_WACOMDIGITIZER | 0x0993)
135#define WACOM_HID_WD_BUTTONRIGHT        (WACOM_HID_UP_WACOMDIGITIZER | 0x0994)
136#define WACOM_HID_WD_BUTTONCENTER       (WACOM_HID_UP_WACOMDIGITIZER | 0x0995)
137#define WACOM_HID_WD_FINGERWHEEL        (WACOM_HID_UP_WACOMDIGITIZER | 0x0d03)
138#define WACOM_HID_WD_OFFSETLEFT         (WACOM_HID_UP_WACOMDIGITIZER | 0x0d30)
139#define WACOM_HID_WD_OFFSETTOP          (WACOM_HID_UP_WACOMDIGITIZER | 0x0d31)
140#define WACOM_HID_WD_OFFSETRIGHT        (WACOM_HID_UP_WACOMDIGITIZER | 0x0d32)
141#define WACOM_HID_WD_OFFSETBOTTOM       (WACOM_HID_UP_WACOMDIGITIZER | 0x0d33)
142#define WACOM_HID_WD_DATAMODE           (WACOM_HID_UP_WACOMDIGITIZER | 0x1002)
143#define WACOM_HID_WD_DIGITIZERINFO      (WACOM_HID_UP_WACOMDIGITIZER | 0x1013)
144#define WACOM_HID_WD_TOUCH_RING_SETTING (WACOM_HID_UP_WACOMDIGITIZER | 0x1032)
145#define WACOM_HID_UP_G9                 0xff090000
146#define WACOM_HID_G9_PEN                (WACOM_HID_UP_G9 | 0x02)
147#define WACOM_HID_G9_TOUCHSCREEN        (WACOM_HID_UP_G9 | 0x11)
148#define WACOM_HID_UP_G11                0xff110000
149#define WACOM_HID_G11_PEN               (WACOM_HID_UP_G11 | 0x02)
150#define WACOM_HID_G11_TOUCHSCREEN       (WACOM_HID_UP_G11 | 0x11)
151#define WACOM_HID_UP_WACOMTOUCH         0xff000000
152#define WACOM_HID_WT_TOUCHSCREEN        (WACOM_HID_UP_WACOMTOUCH | 0x04)
153#define WACOM_HID_WT_TOUCHPAD           (WACOM_HID_UP_WACOMTOUCH | 0x05)
154#define WACOM_HID_WT_CONTACTMAX         (WACOM_HID_UP_WACOMTOUCH | 0x55)
155#define WACOM_HID_WT_SERIALNUMBER       (WACOM_HID_UP_WACOMTOUCH | 0x5b)
156#define WACOM_HID_WT_X                  (WACOM_HID_UP_WACOMTOUCH | 0x130)
157#define WACOM_HID_WT_Y                  (WACOM_HID_UP_WACOMTOUCH | 0x131)
158#define WACOM_HID_WT_REPORT_VALID       (WACOM_HID_UP_WACOMTOUCH | 0x1d0)
159
160#define WACOM_BATTERY_USAGE(f)	(((f)->hid == HID_DG_BATTERYSTRENGTH) || \
161				 ((f)->hid == WACOM_HID_WD_BATTERY_CHARGING) || \
162				 ((f)->hid == WACOM_HID_WD_BATTERY_LEVEL))
163
164#define WACOM_PAD_FIELD(f)	(((f)->physical == HID_DG_TABLETFUNCTIONKEY) || \
165				 ((f)->physical == WACOM_HID_WD_DIGITIZERFNKEYS) || \
166				 ((f)->physical == WACOM_HID_WD_DIGITIZERINFO))
167
168#define WACOM_PEN_FIELD(f)	(((f)->logical == HID_DG_STYLUS) || \
169				 ((f)->physical == HID_DG_STYLUS) || \
170				 ((f)->physical == HID_DG_PEN) || \
171				 ((f)->application == HID_DG_PEN) || \
172				 ((f)->application == HID_DG_DIGITIZER) || \
173				 ((f)->application == WACOM_HID_WD_PEN) || \
174				 ((f)->application == WACOM_HID_WD_DIGITIZER) || \
175				 ((f)->application == WACOM_HID_G9_PEN) || \
176				 ((f)->application == WACOM_HID_G11_PEN))
177#define WACOM_FINGER_FIELD(f)	(((f)->logical == HID_DG_FINGER) || \
178				 ((f)->physical == HID_DG_FINGER) || \
179				 ((f)->application == HID_DG_TOUCHSCREEN) || \
180				 ((f)->application == WACOM_HID_G9_TOUCHSCREEN) || \
181				 ((f)->application == WACOM_HID_G11_TOUCHSCREEN) || \
182				 ((f)->application == WACOM_HID_WT_TOUCHPAD) || \
183				 ((f)->application == HID_DG_TOUCHPAD))
184
185#define WACOM_DIRECT_DEVICE(f)	(((f)->application == HID_DG_TOUCHSCREEN) || \
186				 ((f)->application == WACOM_HID_WT_TOUCHSCREEN) || \
187				 ((f)->application == HID_DG_PEN) || \
188				 ((f)->application == WACOM_HID_WD_PEN))
189
190enum {
191	PENPARTNER = 0,
192	GRAPHIRE,
193	GRAPHIRE_BT,
194	WACOM_G4,
195	PTU,
196	PL,
197	DTU,
198	DTUS,
199	DTUSX,
200	INTUOS,
201	INTUOS3S,
202	INTUOS3,
203	INTUOS3L,
204	INTUOS4S,
205	INTUOS4,
206	INTUOS4WL,
207	INTUOS4L,
208	INTUOS5S,
209	INTUOS5,
210	INTUOS5L,
211	INTUOSPS,
212	INTUOSPM,
213	INTUOSPL,
214	INTUOSP2_BT,
215	INTUOSP2S_BT,
216	INTUOSHT3_BT,
217	WACOM_21UX2,
218	WACOM_22HD,
219	DTK,
220	WACOM_24HD,
221	WACOM_27QHD,
222	CINTIQ_HYBRID,
223	CINTIQ_COMPANION_2,
224	CINTIQ,
225	WACOM_BEE,
226	WACOM_13HD,
227	WACOM_MO,
228	BAMBOO_PEN,
229	INTUOSHT,
230	INTUOSHT2,
231	BAMBOO_TOUCH,
232	BAMBOO_PT,
233	WACOM_24HDT,
234	WACOM_27QHDT,
235	BAMBOO_PAD,
236	WIRELESS,
237	REMOTE,
238	TABLETPC,   /* add new TPC below */
239	TABLETPCE,
240	TABLETPC2FG,
241	MTSCREEN,
242	MTTPC,
243	MTTPC_B,
244	HID_GENERIC,
 
245	MAX_TYPE
246};
247
248struct wacom_features {
249	const char *name;
250	int x_max;
251	int y_max;
252	int pressure_max;
253	int distance_max;
254	int type;
255	int x_resolution;
256	int y_resolution;
257	int numbered_buttons;
258	int offset_left;
259	int offset_right;
260	int offset_top;
261	int offset_bottom;
262	int device_type;
263	int x_phy;
264	int y_phy;
265	unsigned unit;
266	int unitExpo;
267	int x_fuzz;
268	int y_fuzz;
269	int pressure_fuzz;
270	int distance_fuzz;
271	int tilt_fuzz;
272	unsigned quirks;
273	unsigned touch_max;
274	int oVid;
275	int oPid;
276	int pktlen;
277	bool check_for_hid_type;
278	int hid_type;
279};
280
281struct wacom_shared {
282	bool stylus_in_proximity;
283	bool touch_down;
284	/* for wireless device to access USB interfaces */
285	unsigned touch_max;
286	int type;
287	struct input_dev *touch_input;
288	struct hid_device *pen;
289	struct hid_device *touch;
290	bool has_mute_touch_switch;
291	bool is_touch_on;
292};
293
294struct hid_data {
295	__s16 inputmode;	/* InputMode HID feature, -1 if non-existent */
296	__s16 inputmode_index;	/* InputMode HID feature index in the report */
297	bool sense_state;
298	bool inrange_state;
299	bool invert_state;
300	bool tipswitch;
301	bool barrelswitch;
302	bool barrelswitch2;
 
 
 
303	int x;
304	int y;
305	int pressure;
306	int width;
307	int height;
308	int id;
309	int cc_report;
310	int cc_index;
311	int cc_value_index;
312	int last_slot_field;
313	int num_expected;
314	int num_received;
315	int bat_status;
316	int battery_capacity;
317	int bat_charging;
318	int bat_connected;
319	int ps_connected;
320	bool pad_input_event_flag;
 
 
321};
322
323struct wacom_remote_data {
324	struct {
325		u32 serial;
326		bool connected;
327	} remote[WACOM_MAX_REMOTES];
328};
329
330struct wacom_wac {
331	char name[WACOM_NAME_MAX];
332	char pen_name[WACOM_NAME_MAX];
333	char touch_name[WACOM_NAME_MAX];
334	char pad_name[WACOM_NAME_MAX];
335	unsigned char data[WACOM_PKGLEN_MAX];
336	int tool[2];
337	int id[2];
338	__u64 serial[2];
 
339	bool reporting_data;
340	struct wacom_features features;
341	struct wacom_shared *shared;
342	struct input_dev *pen_input;
343	struct input_dev *touch_input;
344	struct input_dev *pad_input;
345	struct kfifo_rec_ptr_2 pen_fifo;
346	int pid;
347	int num_contacts_left;
348	u8 bt_features;
349	u8 bt_high_speed;
350	int mode_report;
351	int mode_value;
352	struct hid_data hid_data;
353	bool has_mute_touch_switch;
 
354	bool has_mode_change;
355	bool is_direct_mode;
356	bool is_invalid_bt_frame;
357};
358
359#endif