wacom_wac.h 10.6 KB
Newer Older
1
/*
2
 * drivers/input/tablet/wacom_wac.h
3 4 5 6 7 8 9 10 11
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 */
#ifndef WACOM_WAC_H
#define WACOM_WAC_H

12
#include <linux/types.h>
13
#include <linux/hid.h>
14

15 16
/* maximum packet length for USB/BT devices */
#define WACOM_PKGLEN_MAX	361
17

18
#define WACOM_NAME_MAX		64
19 20
#define WACOM_MAX_REMOTES	5
#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 33
#define WACOM_PKGLEN_BPAD_TOUCH	32
#define WACOM_PKGLEN_BPAD_TOUCH_USB	64
34 35 36

/* wacom data size per MT contact */
#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 44
#define CURSOR_DEVICE_ID	0x06
#define ERASER_DEVICE_ID	0x0A
P
Ping Cheng 已提交
45
#define PAD_DEVICE_ID		0x0F
46

47 48
/* wacom data packet report IDs */
#define WACOM_REPORT_PENABLED		2
49
#define WACOM_REPORT_PENABLED_BT	3
50 51
#define WACOM_REPORT_INTUOS_ID1		5
#define WACOM_REPORT_INTUOS_ID2		6
52
#define WACOM_REPORT_INTUOSPAD		12
53
#define WACOM_REPORT_INTUOS5PAD		3
54
#define WACOM_REPORT_DTUSPAD		21
55 56
#define WACOM_REPORT_TPC1FG		6
#define WACOM_REPORT_TPC2FG		13
57
#define WACOM_REPORT_TPCMT		13
58
#define WACOM_REPORT_TPCMT2		3
59
#define WACOM_REPORT_TPCHID		15
60 61
#define WACOM_REPORT_CINTIQ		16
#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 69
#define WACOM_REPORT_BPAD_PEN		3
#define WACOM_REPORT_BPAD_TOUCH		16
70
#define WACOM_REPORT_DEVICE_LIST	16
71
#define WACOM_REPORT_INTUOS_PEN		16
72
#define WACOM_REPORT_REMOTE		17
73
#define WACOM_REPORT_INTUOSHT2_ID	8
74

75 76 77 78 79 80 81
/* wacom command report ids */
#define WAC_CMD_WL_LED_CONTROL          0x03
#define WAC_CMD_LED_CONTROL             0x20
#define WAC_CMD_ICON_START              0x21
#define WAC_CMD_ICON_XFER               0x23
#define WAC_CMD_ICON_BT_XFER            0x26
#define WAC_CMD_DELETE_PAIRING          0x20
82
#define WAC_CMD_LED_CONTROL_GENERIC     0x32
83
#define WAC_CMD_UNPAIR_ALL              0xFF
84
#define WAC_CMD_WL_INTUOSP2             0x82
85

86
/* device quirks */
87
#define WACOM_QUIRK_BBTOUCH_LOWRES	0x0001
88
#define WACOM_QUIRK_SENSE		0x0002
89
#define WACOM_QUIRK_BATTERY		0x0008
90

91 92 93 94
/* device types */
#define WACOM_DEVICETYPE_NONE           0x0000
#define WACOM_DEVICETYPE_PEN            0x0001
#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_HID_UP_WACOMDIGITIZER     0xff0d0000
100 101
#define WACOM_HID_SP_PAD                0x00040000
#define WACOM_HID_SP_BUTTON             0x00090000
102 103
#define WACOM_HID_SP_DIGITIZER          0x000d0000
#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 109
#define WACOM_HID_WD_SERIALHI           (WACOM_HID_UP_WACOMDIGITIZER | 0x5c)
#define WACOM_HID_WD_TOOLTYPE           (WACOM_HID_UP_WACOMDIGITIZER | 0x77)
110
#define WACOM_HID_WD_DISTANCE           (WACOM_HID_UP_WACOMDIGITIZER | 0x0132)
111 112
#define WACOM_HID_WD_TOUCHSTRIP         (WACOM_HID_UP_WACOMDIGITIZER | 0x0136)
#define WACOM_HID_WD_TOUCHSTRIP2        (WACOM_HID_UP_WACOMDIGITIZER | 0x0137)
113 114 115 116 117
#define WACOM_HID_WD_TOUCHRING          (WACOM_HID_UP_WACOMDIGITIZER | 0x0138)
#define WACOM_HID_WD_TOUCHRINGSTATUS    (WACOM_HID_UP_WACOMDIGITIZER | 0x0139)
#define WACOM_HID_WD_ACCELEROMETER_X    (WACOM_HID_UP_WACOMDIGITIZER | 0x0401)
#define WACOM_HID_WD_ACCELEROMETER_Y    (WACOM_HID_UP_WACOMDIGITIZER | 0x0402)
#define WACOM_HID_WD_ACCELEROMETER_Z    (WACOM_HID_UP_WACOMDIGITIZER | 0x0403)
118
#define WACOM_HID_WD_BATTERY_CHARGING   (WACOM_HID_UP_WACOMDIGITIZER | 0x0404)
119
#define WACOM_HID_WD_TOUCHONOFF         (WACOM_HID_UP_WACOMDIGITIZER | 0x0454)
120
#define WACOM_HID_WD_BATTERY_LEVEL      (WACOM_HID_UP_WACOMDIGITIZER | 0x043b)
121
#define WACOM_HID_WD_EXPRESSKEY00       (WACOM_HID_UP_WACOMDIGITIZER | 0x0910)
122
#define WACOM_HID_WD_EXPRESSKEYCAP00    (WACOM_HID_UP_WACOMDIGITIZER | 0x0950)
123
#define WACOM_HID_WD_MODE_CHANGE        (WACOM_HID_UP_WACOMDIGITIZER | 0x0980)
124
#define WACOM_HID_WD_MUTE_DEVICE        (WACOM_HID_UP_WACOMDIGITIZER | 0x0981)
125 126 127
#define WACOM_HID_WD_CONTROLPANEL       (WACOM_HID_UP_WACOMDIGITIZER | 0x0982)
#define WACOM_HID_WD_ONSCREEN_KEYBOARD  (WACOM_HID_UP_WACOMDIGITIZER | 0x0983)
#define WACOM_HID_WD_BUTTONCONFIG       (WACOM_HID_UP_WACOMDIGITIZER | 0x0986)
128 129 130 131 132
#define WACOM_HID_WD_BUTTONHOME         (WACOM_HID_UP_WACOMDIGITIZER | 0x0990)
#define WACOM_HID_WD_BUTTONUP           (WACOM_HID_UP_WACOMDIGITIZER | 0x0991)
#define WACOM_HID_WD_BUTTONDOWN         (WACOM_HID_UP_WACOMDIGITIZER | 0x0992)
#define WACOM_HID_WD_BUTTONLEFT         (WACOM_HID_UP_WACOMDIGITIZER | 0x0993)
#define WACOM_HID_WD_BUTTONRIGHT        (WACOM_HID_UP_WACOMDIGITIZER | 0x0994)
133
#define WACOM_HID_WD_BUTTONCENTER       (WACOM_HID_UP_WACOMDIGITIZER | 0x0995)
134
#define WACOM_HID_WD_FINGERWHEEL        (WACOM_HID_UP_WACOMDIGITIZER | 0x0d03)
135 136 137 138
#define WACOM_HID_WD_OFFSETLEFT         (WACOM_HID_UP_WACOMDIGITIZER | 0x0d30)
#define WACOM_HID_WD_OFFSETTOP          (WACOM_HID_UP_WACOMDIGITIZER | 0x0d31)
#define WACOM_HID_WD_OFFSETRIGHT        (WACOM_HID_UP_WACOMDIGITIZER | 0x0d32)
#define WACOM_HID_WD_OFFSETBOTTOM       (WACOM_HID_UP_WACOMDIGITIZER | 0x0d33)
139
#define WACOM_HID_WD_DATAMODE           (WACOM_HID_UP_WACOMDIGITIZER | 0x1002)
140
#define WACOM_HID_WD_DIGITIZERINFO      (WACOM_HID_UP_WACOMDIGITIZER | 0x1013)
141 142 143 144 145 146
#define WACOM_HID_UP_G9                 0xff090000
#define WACOM_HID_G9_PEN                (WACOM_HID_UP_G9 | 0x02)
#define WACOM_HID_G9_TOUCHSCREEN        (WACOM_HID_UP_G9 | 0x11)
#define WACOM_HID_UP_G11                0xff110000
#define WACOM_HID_G11_PEN               (WACOM_HID_UP_G11 | 0x02)
#define WACOM_HID_G11_TOUCHSCREEN       (WACOM_HID_UP_G11 | 0x11)
147 148 149 150 151 152
#define WACOM_HID_UP_WACOMTOUCH         0xff000000
#define WACOM_HID_WT_TOUCHSCREEN        (WACOM_HID_UP_WACOMTOUCH | 0x04)
#define WACOM_HID_WT_TOUCHPAD           (WACOM_HID_UP_WACOMTOUCH | 0x05)
#define WACOM_HID_WT_CONTACTMAX         (WACOM_HID_UP_WACOMTOUCH | 0x55)
#define WACOM_HID_WT_X                  (WACOM_HID_UP_WACOMTOUCH | 0x130)
#define WACOM_HID_WT_Y                  (WACOM_HID_UP_WACOMTOUCH | 0x131)
153

154 155 156 157
#define WACOM_PAD_FIELD(f)	(((f)->physical == HID_DG_TABLETFUNCTIONKEY) || \
				 ((f)->physical == WACOM_HID_WD_DIGITIZERFNKEYS) || \
				 ((f)->physical == WACOM_HID_WD_DIGITIZERINFO))

158 159
#define WACOM_PEN_FIELD(f)	(((f)->logical == HID_DG_STYLUS) || \
				 ((f)->physical == HID_DG_STYLUS) || \
160
				 ((f)->physical == HID_DG_PEN) || \
161 162
				 ((f)->application == HID_DG_PEN) || \
				 ((f)->application == HID_DG_DIGITIZER) || \
163 164 165
				 ((f)->application == WACOM_HID_WD_DIGITIZER) || \
				 ((f)->application == WACOM_HID_G9_PEN) || \
				 ((f)->application == WACOM_HID_G11_PEN))
166 167
#define WACOM_FINGER_FIELD(f)	(((f)->logical == HID_DG_FINGER) || \
				 ((f)->physical == HID_DG_FINGER) || \
168 169
				 ((f)->application == HID_DG_TOUCHSCREEN) || \
				 ((f)->application == WACOM_HID_G9_TOUCHSCREEN) || \
170 171 172 173 174 175 176 177
				 ((f)->application == WACOM_HID_G11_TOUCHSCREEN) || \
				 ((f)->application == WACOM_HID_WT_TOUCHPAD) || \
				 ((f)->application == HID_DG_TOUCHPAD))

#define WACOM_DIRECT_DEVICE(f)	(((f)->application == HID_DG_TOUCHSCREEN) || \
				 ((f)->application == WACOM_HID_WT_TOUCHSCREEN) || \
				 ((f)->application == HID_DG_PEN) || \
				 ((f)->application == WACOM_HID_WD_PEN))
178

179 180 181
enum {
	PENPARTNER = 0,
	GRAPHIRE,
182
	GRAPHIRE_BT,
183 184 185
	WACOM_G4,
	PTU,
	PL,
186
	DTU,
187
	DTUS,
P
Ping Cheng 已提交
188
	DTUSX,
189
	INTUOS,
P
Ping Cheng 已提交
190
	INTUOS3S,
191 192
	INTUOS3,
	INTUOS3L,
193 194
	INTUOS4S,
	INTUOS4,
195
	INTUOS4WL,
196
	INTUOS4L,
197 198 199
	INTUOS5S,
	INTUOS5,
	INTUOS5L,
200 201 202
	INTUOSPS,
	INTUOSPM,
	INTUOSPL,
203
	INTUOSP2_BT,
204
	WACOM_21UX2,
205
	WACOM_22HD,
206
	DTK,
207
	WACOM_24HD,
208
	WACOM_27QHD,
209
	CINTIQ_HYBRID,
210
	CINTIQ_COMPANION_2,
211
	CINTIQ,
212
	WACOM_BEE,
213
	WACOM_13HD,
214
	WACOM_MO,
215 216
	BAMBOO_PEN,
	INTUOSHT,
217
	INTUOSHT2,
218
	BAMBOO_TOUCH,
P
Ping Cheng 已提交
219
	BAMBOO_PT,
220
	WACOM_24HDT,
221
	WACOM_27QHDT,
222
	BAMBOO_PAD,
223
	WIRELESS,
224
	REMOTE,
P
Ping Cheng 已提交
225
	TABLETPC,   /* add new TPC below */
226
	TABLETPCE,
227
	TABLETPC2FG,
228
	MTSCREEN,
229
	MTTPC,
230
	MTTPC_B,
231
	HID_GENERIC,
232 233 234 235
	MAX_TYPE
};

struct wacom_features {
236
	const char *name;
237 238 239 240 241
	int x_max;
	int y_max;
	int pressure_max;
	int distance_max;
	int type;
242 243
	int x_resolution;
	int y_resolution;
244
	int numbered_buttons;
245 246 247 248
	int offset_left;
	int offset_right;
	int offset_top;
	int offset_bottom;
249 250 251
	int device_type;
	int x_phy;
	int y_phy;
252 253
	unsigned unit;
	int unitExpo;
254 255 256 257
	int x_fuzz;
	int y_fuzz;
	int pressure_fuzz;
	int distance_fuzz;
258
	int tilt_fuzz;
259
	unsigned quirks;
260
	unsigned touch_max;
261 262
	int oVid;
	int oPid;
263
	int pktlen;
264 265
	bool check_for_hid_type;
	int hid_type;
266 267
};

268 269
struct wacom_shared {
	bool stylus_in_proximity;
270
	bool touch_down;
271 272 273 274
	/* for wireless device to access USB interfaces */
	unsigned touch_max;
	int type;
	struct input_dev *touch_input;
275 276
	struct hid_device *pen;
	struct hid_device *touch;
277
	bool has_mute_touch_switch;
278
	bool is_touch_on;
279 280
};

281
struct hid_data {
282 283
	__s16 inputmode;	/* InputMode HID feature, -1 if non-existent */
	__s16 inputmode_index;	/* InputMode HID feature index in the report */
284
	bool sense_state;
285 286 287
	bool inrange_state;
	bool invert_state;
	bool tipswitch;
288 289 290 291 292 293
	int x;
	int y;
	int pressure;
	int width;
	int height;
	int id;
294
	int cc_report;
295 296
	int cc_index;
	int cc_value_index;
297
	int last_slot_field;
298 299
	int num_expected;
	int num_received;
300 301 302 303
	int battery_capacity;
	int bat_charging;
	int bat_connected;
	int ps_connected;
304
	bool pad_input_event_flag;
305 306
};

307 308 309 310 311 312 313
struct wacom_remote_data {
	struct {
		u32 serial;
		bool connected;
	} remote[WACOM_MAX_REMOTES];
};

314
struct wacom_wac {
315
	char name[WACOM_NAME_MAX];
316 317
	char pen_name[WACOM_NAME_MAX];
	char touch_name[WACOM_NAME_MAX];
318
	char pad_name[WACOM_NAME_MAX];
319
	unsigned char data[WACOM_PKGLEN_MAX];
320 321
	int tool[2];
	int id[2];
322
	__u64 serial[2];
323
	bool reporting_data;
324
	struct wacom_features features;
325
	struct wacom_shared *shared;
326 327
	struct input_dev *pen_input;
	struct input_dev *touch_input;
328
	struct input_dev *pad_input;
329
	int pid;
330
	int num_contacts_left;
331 332
	u8 bt_features;
	u8 bt_high_speed;
333 334
	int mode_report;
	int mode_value;
335
	struct hid_data hid_data;
336
	bool has_mute_touch_switch;
337 338 339
	bool has_mode_change;
	bool is_direct_mode;

340 341 342
};

#endif