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