wacom_wac.h 5.0 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 19
#define WACOM_NAME_MAX		64

20
/* packet length for individual models */
21
#define WACOM_PKGLEN_BBFUN	 9
22
#define WACOM_PKGLEN_TPC1FG	 5
23
#define WACOM_PKGLEN_TPC1FG_B	10
24
#define WACOM_PKGLEN_TPC2FG	14
25
#define WACOM_PKGLEN_BBTOUCH	20
26
#define WACOM_PKGLEN_BBTOUCH3	64
27
#define WACOM_PKGLEN_BBPEN	10
28
#define WACOM_PKGLEN_WIRELESS	32
29
#define WACOM_PKGLEN_PENABLED	 8
30 31
#define WACOM_PKGLEN_BPAD_TOUCH	32
#define WACOM_PKGLEN_BPAD_TOUCH_USB	64
32 33 34

/* wacom data size per MT contact */
#define WACOM_BYTES_PER_MT_PACKET	11
35
#define WACOM_BYTES_PER_24HDT_PACKET	14
36
#define WACOM_BYTES_PER_QHDTHID_PACKET	 6
37

38
/* device IDs */
39
#define STYLUS_DEVICE_ID	0x02
40
#define TOUCH_DEVICE_ID		0x03
41 42
#define CURSOR_DEVICE_ID	0x06
#define ERASER_DEVICE_ID	0x0A
P
Ping Cheng 已提交
43
#define PAD_DEVICE_ID		0x0F
44

45 46
/* wacom data packet report IDs */
#define WACOM_REPORT_PENABLED		2
47
#define WACOM_REPORT_PENABLED_BT	3
48 49 50
#define WACOM_REPORT_INTUOSREAD		5
#define WACOM_REPORT_INTUOSWRITE	6
#define WACOM_REPORT_INTUOSPAD		12
51
#define WACOM_REPORT_INTUOS5PAD		3
52
#define WACOM_REPORT_DTUSPAD		21
53 54
#define WACOM_REPORT_TPC1FG		6
#define WACOM_REPORT_TPC2FG		13
55
#define WACOM_REPORT_TPCMT		13
56
#define WACOM_REPORT_TPCMT2		3
57
#define WACOM_REPORT_TPCHID		15
58 59
#define WACOM_REPORT_CINTIQ		16
#define WACOM_REPORT_CINTIQPAD		17
60
#define WACOM_REPORT_TPCST		16
61
#define WACOM_REPORT_DTUS		17
62
#define WACOM_REPORT_TPC1FGE		18
63
#define WACOM_REPORT_24HDT		1
64
#define WACOM_REPORT_WL			128
65
#define WACOM_REPORT_USB		192
66 67
#define WACOM_REPORT_BPAD_PEN		3
#define WACOM_REPORT_BPAD_TOUCH		16
68

69
/* device quirks */
70 71
#define WACOM_QUIRK_BBTOUCH_LOWRES	0x0001
#define WACOM_QUIRK_BATTERY		0x0008
72

73 74 75 76
/* device types */
#define WACOM_DEVICETYPE_NONE           0x0000
#define WACOM_DEVICETYPE_PEN            0x0001
#define WACOM_DEVICETYPE_TOUCH          0x0002
77
#define WACOM_DEVICETYPE_PAD            0x0004
78
#define WACOM_DEVICETYPE_WL_MONITOR     0x0008
79

80 81
#define WACOM_VENDORDEFINED_PEN		0xff0d0001

82 83
#define WACOM_PEN_FIELD(f)	(((f)->logical == HID_DG_STYLUS) || \
				 ((f)->physical == HID_DG_STYLUS) || \
84
				 ((f)->physical == HID_DG_PEN) || \
85 86 87
				 ((f)->application == HID_DG_PEN) || \
				 ((f)->application == HID_DG_DIGITIZER) || \
				 ((f)->application == WACOM_VENDORDEFINED_PEN))
88 89 90 91
#define WACOM_FINGER_FIELD(f)	(((f)->logical == HID_DG_FINGER) || \
				 ((f)->physical == HID_DG_FINGER) || \
				 ((f)->application == HID_DG_TOUCHSCREEN))

92 93 94
enum {
	PENPARTNER = 0,
	GRAPHIRE,
95
	GRAPHIRE_BT,
96 97 98
	WACOM_G4,
	PTU,
	PL,
99
	DTU,
100
	DTUS,
P
Ping Cheng 已提交
101
	DTUSX,
102
	INTUOS,
P
Ping Cheng 已提交
103
	INTUOS3S,
104 105
	INTUOS3,
	INTUOS3L,
106 107
	INTUOS4S,
	INTUOS4,
108
	INTUOS4WL,
109
	INTUOS4L,
110 111 112
	INTUOS5S,
	INTUOS5,
	INTUOS5L,
113 114 115
	INTUOSPS,
	INTUOSPM,
	INTUOSPL,
116
	INTUOSHT,
117
	WACOM_21UX2,
118
	WACOM_22HD,
119
	DTK,
120
	WACOM_24HD,
121
	WACOM_27QHD,
122
	CINTIQ_HYBRID,
123
	CINTIQ,
124
	WACOM_BEE,
125
	WACOM_13HD,
126
	WACOM_MO,
P
Ping Cheng 已提交
127 128
	WIRELESS,
	BAMBOO_PT,
129
	WACOM_24HDT,
130
	WACOM_27QHDT,
131
	BAMBOO_PAD,
P
Ping Cheng 已提交
132
	TABLETPC,   /* add new TPC below */
133
	TABLETPCE,
134
	TABLETPC2FG,
135
	MTSCREEN,
136
	MTTPC,
137
	MTTPC_B,
138
	HID_GENERIC,
139 140 141 142
	MAX_TYPE
};

struct wacom_features {
143
	const char *name;
144 145 146 147 148
	int x_max;
	int y_max;
	int pressure_max;
	int distance_max;
	int type;
149 150
	int x_resolution;
	int y_resolution;
151 152
	int x_min;
	int y_min;
153 154 155
	int device_type;
	int x_phy;
	int y_phy;
156 157
	unsigned unit;
	int unitExpo;
158 159 160 161
	int x_fuzz;
	int y_fuzz;
	int pressure_fuzz;
	int distance_fuzz;
162
	unsigned quirks;
163
	unsigned touch_max;
164 165
	int oVid;
	int oPid;
166
	int pktlen;
167 168
	bool check_for_hid_type;
	int hid_type;
169
	int last_slot_field;
170 171
};

172 173
struct wacom_shared {
	bool stylus_in_proximity;
174
	bool touch_down;
175 176 177 178
	/* for wireless device to access USB interfaces */
	unsigned touch_max;
	int type;
	struct input_dev *touch_input;
179 180
	struct hid_device *pen;
	struct hid_device *touch;
181 182
};

183
struct hid_data {
184 185
	__s16 inputmode;	/* InputMode HID feature, -1 if non-existent */
	__s16 inputmode_index;	/* InputMode HID feature index in the report */
186 187 188
	bool inrange_state;
	bool invert_state;
	bool tipswitch;
189 190 191 192 193 194
	int x;
	int y;
	int pressure;
	int width;
	int height;
	int id;
195 196 197 198
	int cc_index;
	int cc_value_index;
	int num_expected;
	int num_received;
199 200
};

201
struct wacom_wac {
202 203
	char pen_name[WACOM_NAME_MAX];
	char touch_name[WACOM_NAME_MAX];
204
	char pad_name[WACOM_NAME_MAX];
205
	char bat_name[WACOM_NAME_MAX];
206
	char ac_name[WACOM_NAME_MAX];
207
	unsigned char data[WACOM_PKGLEN_MAX];
208 209
	int tool[2];
	int id[2];
210
	__u32 serial[2];
211
	bool reporting_data;
212
	struct wacom_features features;
213
	struct wacom_shared *shared;
214 215
	struct input_dev *pen_input;
	struct input_dev *touch_input;
216
	struct input_dev *pad_input;
217 218
	bool pen_registered;
	bool touch_registered;
219
	bool pad_registered;
220
	int pid;
221
	int battery_capacity;
222
	int num_contacts_left;
223
	int bat_charging;
224
	int bat_connected;
225
	int ps_connected;
226 227
	u8 bt_features;
	u8 bt_high_speed;
228
	struct hid_data hid_data;
229 230 231
};

#endif