wacom_wac.h 6.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
/* maximum packet length for USB devices */
16
#define WACOM_PKGLEN_MAX	192
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
/* device quirks */
76
#define WACOM_QUIRK_BBTOUCH_LOWRES	0x0001
77
#define WACOM_QUIRK_SENSE		0x0002
78
#define WACOM_QUIRK_BATTERY		0x0008
79

80 81 82 83
/* device types */
#define WACOM_DEVICETYPE_NONE           0x0000
#define WACOM_DEVICETYPE_PEN            0x0001
#define WACOM_DEVICETYPE_TOUCH          0x0002
84
#define WACOM_DEVICETYPE_PAD            0x0004
85
#define WACOM_DEVICETYPE_WL_MONITOR     0x0008
86
#define WACOM_DEVICETYPE_DIRECT         0x0010
87

88
#define WACOM_HID_UP_WACOMDIGITIZER     0xff0d0000
89 90
#define WACOM_HID_SP_DIGITIZER          0x000d0000
#define WACOM_HID_SP_DIGITIZERINFO      0x00100000
91
#define WACOM_HID_WD_DIGITIZER          (WACOM_HID_UP_WACOMDIGITIZER | 0x01)
92
#define WACOM_HID_WD_SENSE              (WACOM_HID_UP_WACOMDIGITIZER | 0x36)
93 94
#define WACOM_HID_WD_SERIALHI           (WACOM_HID_UP_WACOMDIGITIZER | 0x5c)
#define WACOM_HID_WD_TOOLTYPE           (WACOM_HID_UP_WACOMDIGITIZER | 0x77)
95
#define WACOM_HID_WD_DISTANCE           (WACOM_HID_UP_WACOMDIGITIZER | 0x0132)
96
#define WACOM_HID_WD_FINGERWHEEL        (WACOM_HID_UP_WACOMDIGITIZER | 0x0d03)
97
#define WACOM_HID_WD_DATAMODE           (WACOM_HID_UP_WACOMDIGITIZER | 0x1002)
98 99 100 101 102 103
#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)
104

105 106
#define WACOM_PEN_FIELD(f)	(((f)->logical == HID_DG_STYLUS) || \
				 ((f)->physical == HID_DG_STYLUS) || \
107
				 ((f)->physical == HID_DG_PEN) || \
108 109
				 ((f)->application == HID_DG_PEN) || \
				 ((f)->application == HID_DG_DIGITIZER) || \
110 111 112
				 ((f)->application == WACOM_HID_WD_DIGITIZER) || \
				 ((f)->application == WACOM_HID_G9_PEN) || \
				 ((f)->application == WACOM_HID_G11_PEN))
113 114
#define WACOM_FINGER_FIELD(f)	(((f)->logical == HID_DG_FINGER) || \
				 ((f)->physical == HID_DG_FINGER) || \
115 116 117
				 ((f)->application == HID_DG_TOUCHSCREEN) || \
				 ((f)->application == WACOM_HID_G9_TOUCHSCREEN) || \
				 ((f)->application == WACOM_HID_G11_TOUCHSCREEN))
118

119 120 121
enum {
	PENPARTNER = 0,
	GRAPHIRE,
122
	GRAPHIRE_BT,
123 124 125
	WACOM_G4,
	PTU,
	PL,
126
	DTU,
127
	DTUS,
P
Ping Cheng 已提交
128
	DTUSX,
129
	INTUOS,
P
Ping Cheng 已提交
130
	INTUOS3S,
131 132
	INTUOS3,
	INTUOS3L,
133 134
	INTUOS4S,
	INTUOS4,
135
	INTUOS4WL,
136
	INTUOS4L,
137 138 139
	INTUOS5S,
	INTUOS5,
	INTUOS5L,
140 141 142
	INTUOSPS,
	INTUOSPM,
	INTUOSPL,
143
	WACOM_21UX2,
144
	WACOM_22HD,
145
	DTK,
146
	WACOM_24HD,
147
	WACOM_27QHD,
148
	CINTIQ_HYBRID,
149
	CINTIQ_COMPANION_2,
150
	CINTIQ,
151
	WACOM_BEE,
152
	WACOM_13HD,
153
	WACOM_MO,
154 155
	BAMBOO_PEN,
	INTUOSHT,
156
	INTUOSHT2,
157
	BAMBOO_TOUCH,
P
Ping Cheng 已提交
158
	BAMBOO_PT,
159
	WACOM_24HDT,
160
	WACOM_27QHDT,
161
	BAMBOO_PAD,
162
	WIRELESS,
163
	REMOTE,
P
Ping Cheng 已提交
164
	TABLETPC,   /* add new TPC below */
165
	TABLETPCE,
166
	TABLETPC2FG,
167
	MTSCREEN,
168
	MTTPC,
169
	MTTPC_B,
170
	HID_GENERIC,
171 172 173 174
	MAX_TYPE
};

struct wacom_features {
175
	const char *name;
176 177 178 179 180
	int x_max;
	int y_max;
	int pressure_max;
	int distance_max;
	int type;
181 182
	int x_resolution;
	int y_resolution;
183
	int numbered_buttons;
184 185
	int x_min;
	int y_min;
186 187 188
	int device_type;
	int x_phy;
	int y_phy;
189 190
	unsigned unit;
	int unitExpo;
191 192 193 194
	int x_fuzz;
	int y_fuzz;
	int pressure_fuzz;
	int distance_fuzz;
195
	int tilt_fuzz;
196
	unsigned quirks;
197
	unsigned touch_max;
198 199
	int oVid;
	int oPid;
200
	int pktlen;
201 202
	bool check_for_hid_type;
	int hid_type;
203 204
};

205 206
struct wacom_shared {
	bool stylus_in_proximity;
207
	bool touch_down;
208 209 210 211
	/* for wireless device to access USB interfaces */
	unsigned touch_max;
	int type;
	struct input_dev *touch_input;
212 213
	struct hid_device *pen;
	struct hid_device *touch;
214 215
};

216
struct hid_data {
217 218
	__s16 inputmode;	/* InputMode HID feature, -1 if non-existent */
	__s16 inputmode_index;	/* InputMode HID feature index in the report */
219
	bool sense_state;
220 221 222
	bool inrange_state;
	bool invert_state;
	bool tipswitch;
223 224 225 226 227 228
	int x;
	int y;
	int pressure;
	int width;
	int height;
	int id;
229
	int cc_report;
230 231
	int cc_index;
	int cc_value_index;
232
	int last_slot_field;
233 234
	int num_expected;
	int num_received;
235 236
};

237 238 239 240 241 242 243
struct wacom_remote_data {
	struct {
		u32 serial;
		bool connected;
	} remote[WACOM_MAX_REMOTES];
};

244
struct wacom_wac {
245
	char name[WACOM_NAME_MAX];
246 247
	char pen_name[WACOM_NAME_MAX];
	char touch_name[WACOM_NAME_MAX];
248
	char pad_name[WACOM_NAME_MAX];
249
	unsigned char data[WACOM_PKGLEN_MAX];
250 251
	int tool[2];
	int id[2];
252
	__u64 serial[2];
253
	bool reporting_data;
254
	struct wacom_features features;
255
	struct wacom_shared *shared;
256 257
	struct input_dev *pen_input;
	struct input_dev *touch_input;
258
	struct input_dev *pad_input;
259
	int pid;
260
	int num_contacts_left;
261 262
	u8 bt_features;
	u8 bt_high_speed;
263 264
	int mode_report;
	int mode_value;
265
	struct hid_data hid_data;
266 267 268
};

#endif