wacom_wac.h 4.7 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 21 22
/* packet length for individual models */
#define WACOM_PKGLEN_PENPRTN	 7
#define WACOM_PKGLEN_GRAPHIRE	 8
23 24
#define WACOM_PKGLEN_BBFUN	 9
#define WACOM_PKGLEN_INTUOS	10
25
#define WACOM_PKGLEN_TPC1FG	 5
26
#define WACOM_PKGLEN_TPC1FG_B	10
27
#define WACOM_PKGLEN_TPC2FG	14
28
#define WACOM_PKGLEN_BBTOUCH	20
29
#define WACOM_PKGLEN_BBTOUCH3	64
30
#define WACOM_PKGLEN_BBPEN	10
31
#define WACOM_PKGLEN_WIRELESS	32
32
#define WACOM_PKGLEN_MTOUCH	62
33
#define WACOM_PKGLEN_MTTPC	40
34
#define WACOM_PKGLEN_DTUS	68
35
#define WACOM_PKGLEN_PENABLED	 8
36 37
#define WACOM_PKGLEN_BPAD_TOUCH	32
#define WACOM_PKGLEN_BPAD_TOUCH_USB	64
38 39 40

/* wacom data size per MT contact */
#define WACOM_BYTES_PER_MT_PACKET	11
41
#define WACOM_BYTES_PER_24HDT_PACKET	14
42
#define WACOM_BYTES_PER_QHDTHID_PACKET	 6
43

44
/* device IDs */
45
#define STYLUS_DEVICE_ID	0x02
46
#define TOUCH_DEVICE_ID		0x03
47 48
#define CURSOR_DEVICE_ID	0x06
#define ERASER_DEVICE_ID	0x0A
P
Ping Cheng 已提交
49
#define PAD_DEVICE_ID		0x0F
50

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

75 76
/* device quirks */
#define WACOM_QUIRK_MULTI_INPUT		0x0001
77
#define WACOM_QUIRK_BBTOUCH_LOWRES	0x0002
78 79
#define WACOM_QUIRK_NO_INPUT		0x0004
#define WACOM_QUIRK_MONITOR		0x0008
80
#define WACOM_QUIRK_BATTERY		0x0010
81

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 88 89
				 ((f)->application == HID_DG_PEN))
#define WACOM_FINGER_FIELD(f)	(((f)->logical == HID_DG_FINGER) || \
				 ((f)->physical == HID_DG_FINGER) || \
				 ((f)->application == HID_DG_TOUCHSCREEN))

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

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

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

181
struct hid_data {
182 183
	__s16 inputmode;	/* InputMode HID feature, -1 if non-existent */
	__s16 inputmode_index;	/* InputMode HID feature index in the report */
184 185 186
	bool inrange_state;
	bool invert_state;
	bool tipswitch;
187 188 189 190 191 192
	int x;
	int y;
	int pressure;
	int width;
	int height;
	int id;
193 194
};

195
struct wacom_wac {
196
	char name[WACOM_NAME_MAX];
197
	char pad_name[WACOM_NAME_MAX];
198
	char bat_name[WACOM_NAME_MAX];
199
	char ac_name[WACOM_NAME_MAX];
200
	unsigned char data[WACOM_PKGLEN_MAX];
201 202
	int tool[2];
	int id[2];
203
	__u32 serial[2];
204
	bool reporting_data;
205
	struct wacom_features features;
206
	struct wacom_shared *shared;
207
	struct input_dev *input;
208
	struct input_dev *pad_input;
209
	bool input_registered;
210
	bool pad_registered;
211
	int pid;
212
	int battery_capacity;
213
	int num_contacts_left;
214 215
	int bat_charging;
	int ps_connected;
216 217
	u8 bt_features;
	u8 bt_high_speed;
218
	struct hid_data hid_data;
219 220 221
};

#endif