wacom_wac.h 5.2 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 52
#define WACOM_REPORT_INTUOSREAD		5
#define WACOM_REPORT_INTUOSWRITE	6
#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 71
#define WACOM_REPORT_DEVICE_LIST	16
#define WACOM_REPORT_REMOTE		17
72

73
/* device quirks */
74 75
#define WACOM_QUIRK_BBTOUCH_LOWRES	0x0001
#define WACOM_QUIRK_BATTERY		0x0008
76

77 78 79 80
/* device types */
#define WACOM_DEVICETYPE_NONE           0x0000
#define WACOM_DEVICETYPE_PEN            0x0001
#define WACOM_DEVICETYPE_TOUCH          0x0002
81
#define WACOM_DEVICETYPE_PAD            0x0004
82
#define WACOM_DEVICETYPE_WL_MONITOR     0x0008
83

84 85
#define WACOM_VENDORDEFINED_PEN		0xff0d0001

86 87
#define WACOM_PEN_FIELD(f)	(((f)->logical == HID_DG_STYLUS) || \
				 ((f)->physical == HID_DG_STYLUS) || \
88
				 ((f)->physical == HID_DG_PEN) || \
89 90 91
				 ((f)->application == HID_DG_PEN) || \
				 ((f)->application == HID_DG_DIGITIZER) || \
				 ((f)->application == WACOM_VENDORDEFINED_PEN))
92 93 94 95
#define WACOM_FINGER_FIELD(f)	(((f)->logical == HID_DG_FINGER) || \
				 ((f)->physical == HID_DG_FINGER) || \
				 ((f)->application == HID_DG_TOUCHSCREEN))

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

struct wacom_features {
150
	const char *name;
151 152 153 154 155
	int x_max;
	int y_max;
	int pressure_max;
	int distance_max;
	int type;
156 157
	int x_resolution;
	int y_resolution;
158
	int numbered_buttons;
159 160
	int x_min;
	int y_min;
161 162 163
	int device_type;
	int x_phy;
	int y_phy;
164 165
	unsigned unit;
	int unitExpo;
166 167 168 169
	int x_fuzz;
	int y_fuzz;
	int pressure_fuzz;
	int distance_fuzz;
170
	unsigned quirks;
171
	unsigned touch_max;
172 173
	int oVid;
	int oPid;
174
	int pktlen;
175 176
	bool check_for_hid_type;
	int hid_type;
177
	int last_slot_field;
178 179
};

180 181
struct wacom_shared {
	bool stylus_in_proximity;
182
	bool touch_down;
183 184 185 186
	/* for wireless device to access USB interfaces */
	unsigned touch_max;
	int type;
	struct input_dev *touch_input;
187 188
	struct hid_device *pen;
	struct hid_device *touch;
189 190
};

191
struct hid_data {
192 193
	__s16 inputmode;	/* InputMode HID feature, -1 if non-existent */
	__s16 inputmode_index;	/* InputMode HID feature index in the report */
194 195 196
	bool inrange_state;
	bool invert_state;
	bool tipswitch;
197 198 199 200 201 202
	int x;
	int y;
	int pressure;
	int width;
	int height;
	int id;
203 204 205 206
	int cc_index;
	int cc_value_index;
	int num_expected;
	int num_received;
207 208
};

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

#endif