wacom_wac.h 11.6 KB
Newer Older
1
/* SPDX-License-Identifier: GPL-2.0-or-later */
2
/*
3
 * drivers/input/tablet/wacom_wac.h
4 5 6 7
 */
#ifndef WACOM_WAC_H
#define WACOM_WAC_H

8
#include <linux/types.h>
9
#include <linux/hid.h>
10
#include <linux/kfifo.h>
11

12 13
/* maximum packet length for USB/BT devices */
#define WACOM_PKGLEN_MAX	361
14

15
#define WACOM_NAME_MAX		64
16 17
#define WACOM_MAX_REMOTES	5
#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 30
#define WACOM_PKGLEN_BPAD_TOUCH	32
#define WACOM_PKGLEN_BPAD_TOUCH_USB	64
31 32 33

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

44 45
/* wacom data packet report IDs */
#define WACOM_REPORT_PENABLED		2
46
#define WACOM_REPORT_PENABLED_BT	3
47 48
#define WACOM_REPORT_INTUOS_ID1		5
#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 53
#define WACOM_REPORT_TPC1FG		6
#define WACOM_REPORT_TPC2FG		13
54
#define WACOM_REPORT_TPCMT		13
55
#define WACOM_REPORT_TPCMT2		3
56
#define WACOM_REPORT_TPCHID		15
57 58
#define WACOM_REPORT_CINTIQ		16
#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 66
#define WACOM_REPORT_BPAD_PEN		3
#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 73 74 75 76 77 78
/* 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
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 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 100
#define WACOM_POWER_SUPPLY_STATUS_AUTO  -1

101
#define WACOM_HID_UP_WACOMDIGITIZER     0xff0d0000
102 103
#define WACOM_HID_SP_PAD                0x00040000
#define WACOM_HID_SP_BUTTON             0x00090000
104 105
#define WACOM_HID_SP_DIGITIZER          0x000d0000
#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 116
#define WACOM_HID_WD_TOUCHSTRIP         (WACOM_HID_UP_WACOMDIGITIZER | 0x0136)
#define WACOM_HID_WD_TOUCHSTRIP2        (WACOM_HID_UP_WACOMDIGITIZER | 0x0137)
117 118
#define WACOM_HID_WD_TOUCHRING          (WACOM_HID_UP_WACOMDIGITIZER | 0x0138)
#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 122 123
#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)
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 132 133
#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)
134 135 136 137 138
#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)
139
#define WACOM_HID_WD_BUTTONCENTER       (WACOM_HID_UP_WACOMDIGITIZER | 0x0995)
140
#define WACOM_HID_WD_FINGERWHEEL        (WACOM_HID_UP_WACOMDIGITIZER | 0x0d03)
141 142 143 144
#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)
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 149 150 151 152 153
#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)
154 155 156 157
#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)
158
#define WACOM_HID_WT_SERIALNUMBER       (WACOM_HID_UP_WACOMTOUCH | 0x5b)
159 160
#define WACOM_HID_WT_X                  (WACOM_HID_UP_WACOMTOUCH | 0x130)
#define WACOM_HID_WT_Y                  (WACOM_HID_UP_WACOMTOUCH | 0x131)
161
#define WACOM_HID_WT_REPORT_VALID       (WACOM_HID_UP_WACOMTOUCH | 0x1d0)
162

163 164 165 166
#define WACOM_BATTERY_USAGE(f)	(((f)->hid == HID_DG_BATTERYSTRENGTH) || \
				 ((f)->hid == WACOM_HID_WD_BATTERY_CHARGING) || \
				 ((f)->hid == WACOM_HID_WD_BATTERY_LEVEL))

167 168 169 170
#define WACOM_PAD_FIELD(f)	(((f)->physical == HID_DG_TABLETFUNCTIONKEY) || \
				 ((f)->physical == WACOM_HID_WD_DIGITIZERFNKEYS) || \
				 ((f)->physical == WACOM_HID_WD_DIGITIZERINFO))

171 172
#define WACOM_PEN_FIELD(f)	(((f)->logical == HID_DG_STYLUS) || \
				 ((f)->physical == HID_DG_STYLUS) || \
173
				 ((f)->physical == HID_DG_PEN) || \
174 175
				 ((f)->application == HID_DG_PEN) || \
				 ((f)->application == HID_DG_DIGITIZER) || \
176
				 ((f)->application == WACOM_HID_WD_PEN) || \
177 178 179
				 ((f)->application == WACOM_HID_WD_DIGITIZER) || \
				 ((f)->application == WACOM_HID_G9_PEN) || \
				 ((f)->application == WACOM_HID_G11_PEN))
180 181
#define WACOM_FINGER_FIELD(f)	(((f)->logical == HID_DG_FINGER) || \
				 ((f)->physical == HID_DG_FINGER) || \
182 183
				 ((f)->application == HID_DG_TOUCHSCREEN) || \
				 ((f)->application == WACOM_HID_G9_TOUCHSCREEN) || \
184 185 186 187 188 189 190 191
				 ((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))
192

193 194 195
enum {
	PENPARTNER = 0,
	GRAPHIRE,
196
	GRAPHIRE_BT,
197 198 199
	WACOM_G4,
	PTU,
	PL,
200
	DTU,
201
	DTUS,
P
Ping Cheng 已提交
202
	DTUSX,
203
	INTUOS,
P
Ping Cheng 已提交
204
	INTUOS3S,
205 206
	INTUOS3,
	INTUOS3L,
207 208
	INTUOS4S,
	INTUOS4,
209
	INTUOS4WL,
210
	INTUOS4L,
211 212 213
	INTUOS5S,
	INTUOS5,
	INTUOS5L,
214 215 216
	INTUOSPS,
	INTUOSPM,
	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 232
	BAMBOO_PEN,
	INTUOSHT,
233
	INTUOSHT2,
234
	BAMBOO_TOUCH,
P
Ping Cheng 已提交
235
	BAMBOO_PT,
236
	WACOM_24HDT,
237
	WACOM_27QHDT,
238
	BAMBOO_PAD,
239
	WIRELESS,
240
	REMOTE,
P
Ping Cheng 已提交
241
	TABLETPC,   /* add new TPC below */
242
	TABLETPCE,
243
	TABLETPC2FG,
244
	MTSCREEN,
245
	MTTPC,
246
	MTTPC_B,
247
	HID_GENERIC,
248 249 250 251
	MAX_TYPE
};

struct wacom_features {
252
	const char *name;
253 254 255 256 257
	int x_max;
	int y_max;
	int pressure_max;
	int distance_max;
	int type;
258 259
	int x_resolution;
	int y_resolution;
260
	int numbered_buttons;
261 262 263 264
	int offset_left;
	int offset_right;
	int offset_top;
	int offset_bottom;
265 266 267
	int device_type;
	int x_phy;
	int y_phy;
268 269
	unsigned unit;
	int unitExpo;
270 271 272 273
	int x_fuzz;
	int y_fuzz;
	int pressure_fuzz;
	int distance_fuzz;
274
	int tilt_fuzz;
275
	unsigned quirks;
276
	unsigned touch_max;
277 278
	int oVid;
	int oPid;
279
	int pktlen;
280 281
	bool check_for_hid_type;
	int hid_type;
282 283
};

284 285
struct wacom_shared {
	bool stylus_in_proximity;
286
	bool touch_down;
287 288 289 290
	/* for wireless device to access USB interfaces */
	unsigned touch_max;
	int type;
	struct input_dev *touch_input;
291 292
	struct hid_device *pen;
	struct hid_device *touch;
293
	bool has_mute_touch_switch;
294
	bool is_touch_on;
295 296
};

297
struct hid_data {
298 299
	__s16 inputmode;	/* InputMode HID feature, -1 if non-existent */
	__s16 inputmode_index;	/* InputMode HID feature index in the report */
300
	bool sense_state;
301 302 303
	bool inrange_state;
	bool invert_state;
	bool tipswitch;
304 305
	bool barrelswitch;
	bool barrelswitch2;
306
	bool barrelswitch3;
307
	bool serialhi;
308
	bool confidence;
309 310 311 312 313 314
	int x;
	int y;
	int pressure;
	int width;
	int height;
	int id;
315
	int cc_report;
316 317
	int cc_index;
	int cc_value_index;
318
	int last_slot_field;
319 320
	int num_expected;
	int num_received;
321
	int bat_status;
322 323 324 325
	int battery_capacity;
	int bat_charging;
	int bat_connected;
	int ps_connected;
326
	bool pad_input_event_flag;
327
	unsigned short sequence_number;
328 329
};

330 331 332 333 334 335 336
struct wacom_remote_data {
	struct {
		u32 serial;
		bool connected;
	} remote[WACOM_MAX_REMOTES];
};

337
struct wacom_wac {
338
	char name[WACOM_NAME_MAX];
339 340
	char pen_name[WACOM_NAME_MAX];
	char touch_name[WACOM_NAME_MAX];
341
	char pad_name[WACOM_NAME_MAX];
342
	unsigned char data[WACOM_PKGLEN_MAX];
343 344
	int tool[2];
	int id[2];
345
	__u64 serial[2];
346
	bool probe_complete;
347
	bool reporting_data;
348
	struct wacom_features features;
349
	struct wacom_shared *shared;
350 351
	struct input_dev *pen_input;
	struct input_dev *touch_input;
352
	struct input_dev *pad_input;
353
	struct kfifo_rec_ptr_2 *pen_fifo;
354
	int pid;
355
	int num_contacts_left;
356 357
	u8 bt_features;
	u8 bt_high_speed;
358 359
	int mode_report;
	int mode_value;
360
	struct hid_data hid_data;
361
	bool has_mute_touch_switch;
362
	bool is_soft_touch_switch;
363 364
	bool has_mode_change;
	bool is_direct_mode;
365
	bool is_invalid_bt_frame;
366 367 368
};

#endif