]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - drivers/hid/wacom_wac.h
HID: core: move the dynamic quirks handling in core
[mirror_ubuntu-bionic-kernel.git] / drivers / hid / wacom_wac.h
CommitLineData
3bea733a 1/*
4104d13f 2 * drivers/input/tablet/wacom_wac.h
3bea733a
PC
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 */
9#ifndef WACOM_WAC_H
10#define WACOM_WAC_H
11
51269fe8 12#include <linux/types.h>
d97a5522 13#include <linux/hid.h>
51269fe8 14
4922cd26
JG
15/* maximum packet length for USB/BT devices */
16#define WACOM_PKGLEN_MAX 361
ee54500d 17
57bcfce3 18#define WACOM_NAME_MAX 64
72b236d6
AS
19#define WACOM_MAX_REMOTES 5
20#define WACOM_STATUS_UNKNOWN 255
57bcfce3 21
ee54500d 22/* packet length for individual models */
e33da8a5 23#define WACOM_PKGLEN_BBFUN 9
ee54500d 24#define WACOM_PKGLEN_TPC1FG 5
61616ed0 25#define WACOM_PKGLEN_TPC1FG_B 10
e33da8a5 26#define WACOM_PKGLEN_TPC2FG 14
4a88081e 27#define WACOM_PKGLEN_BBTOUCH 20
4134361a 28#define WACOM_PKGLEN_BBTOUCH3 64
73149ab8 29#define WACOM_PKGLEN_BBPEN 10
d3825d51 30#define WACOM_PKGLEN_WIRELESS 32
d51ddb2b 31#define WACOM_PKGLEN_PENABLED 8
8c97a765
BT
32#define WACOM_PKGLEN_BPAD_TOUCH 32
33#define WACOM_PKGLEN_BPAD_TOUCH_USB 64
1963518b
PC
34
35/* wacom data size per MT contact */
36#define WACOM_BYTES_PER_MT_PACKET 11
b1e4279e 37#define WACOM_BYTES_PER_24HDT_PACKET 14
500d4160 38#define WACOM_BYTES_PER_QHDTHID_PACKET 6
ee54500d 39
ec67bbed 40/* device IDs */
3bea733a 41#define STYLUS_DEVICE_ID 0x02
545f4e99 42#define TOUCH_DEVICE_ID 0x03
3bea733a
PC
43#define CURSOR_DEVICE_ID 0x06
44#define ERASER_DEVICE_ID 0x0A
80d4e8e9 45#define PAD_DEVICE_ID 0x0F
3bea733a 46
cad74700
PC
47/* wacom data packet report IDs */
48#define WACOM_REPORT_PENABLED 2
387142bb 49#define WACOM_REPORT_PENABLED_BT 3
06109993
JG
50#define WACOM_REPORT_INTUOS_ID1 5
51#define WACOM_REPORT_INTUOS_ID2 6
cad74700 52#define WACOM_REPORT_INTUOSPAD 12
f860e581 53#define WACOM_REPORT_INTUOS5PAD 3
497ab1f2 54#define WACOM_REPORT_DTUSPAD 21
cad74700
PC
55#define WACOM_REPORT_TPC1FG 6
56#define WACOM_REPORT_TPC2FG 13
1963518b 57#define WACOM_REPORT_TPCMT 13
d51ddb2b 58#define WACOM_REPORT_TPCMT2 3
31175a83 59#define WACOM_REPORT_TPCHID 15
500d4160
PC
60#define WACOM_REPORT_CINTIQ 16
61#define WACOM_REPORT_CINTIQPAD 17
31175a83 62#define WACOM_REPORT_TPCST 16
497ab1f2 63#define WACOM_REPORT_DTUS 17
ac173837 64#define WACOM_REPORT_TPC1FGE 18
b1e4279e 65#define WACOM_REPORT_24HDT 1
b5fd2a3e 66#define WACOM_REPORT_WL 128
961794a0 67#define WACOM_REPORT_USB 192
8c97a765
BT
68#define WACOM_REPORT_BPAD_PEN 3
69#define WACOM_REPORT_BPAD_TOUCH 16
72b236d6 70#define WACOM_REPORT_DEVICE_LIST 16
eda01dab 71#define WACOM_REPORT_INTUOS_PEN 16
72b236d6 72#define WACOM_REPORT_REMOTE 17
0bbfe28a 73#define WACOM_REPORT_INTUOSHT2_ID 8
cad74700 74
5ba13c64
JG
75/* wacom command report ids */
76#define WAC_CMD_WL_LED_CONTROL 0x03
77#define WAC_CMD_LED_CONTROL 0x20
78#define WAC_CMD_ICON_START 0x21
79#define WAC_CMD_ICON_XFER 0x23
80#define WAC_CMD_ICON_BT_XFER 0x26
81#define WAC_CMD_DELETE_PAIRING 0x20
10c55cac 82#define WAC_CMD_LED_CONTROL_GENERIC 0x32
5ba13c64 83#define WAC_CMD_UNPAIR_ALL 0xFF
4922cd26 84#define WAC_CMD_WL_INTUOSP2 0x82
5ba13c64 85
bc73dd39 86/* device quirks */
f3586d2f 87#define WACOM_QUIRK_BBTOUCH_LOWRES 0x0001
61ce346a 88#define WACOM_QUIRK_SENSE 0x0002
f3586d2f 89#define WACOM_QUIRK_BATTERY 0x0008
bc73dd39 90
aa86b18c
JG
91/* device types */
92#define WACOM_DEVICETYPE_NONE 0x0000
93#define WACOM_DEVICETYPE_PEN 0x0001
94#define WACOM_DEVICETYPE_TOUCH 0x0002
862cf553 95#define WACOM_DEVICETYPE_PAD 0x0004
ccad85cc 96#define WACOM_DEVICETYPE_WL_MONITOR 0x0008
e5bc8eb1 97#define WACOM_DEVICETYPE_DIRECT 0x0010
aa86b18c 98
16e45989
JG
99#define WACOM_POWER_SUPPLY_STATUS_AUTO -1
100
8de82280 101#define WACOM_HID_UP_WACOMDIGITIZER 0xff0d0000
5922e613
JG
102#define WACOM_HID_SP_PAD 0x00040000
103#define WACOM_HID_SP_BUTTON 0x00090000
c9c09587
JG
104#define WACOM_HID_SP_DIGITIZER 0x000d0000
105#define WACOM_HID_SP_DIGITIZERINFO 0x00100000
8de82280 106#define WACOM_HID_WD_DIGITIZER (WACOM_HID_UP_WACOMDIGITIZER | 0x01)
ac2423c9 107#define WACOM_HID_WD_PEN (WACOM_HID_UP_WACOMDIGITIZER | 0x02)
61ce346a 108#define WACOM_HID_WD_SENSE (WACOM_HID_UP_WACOMDIGITIZER | 0x36)
5922e613 109#define WACOM_HID_WD_DIGITIZERFNKEYS (WACOM_HID_UP_WACOMDIGITIZER | 0x39)
f85c9dc6
JG
110#define WACOM_HID_WD_SERIALHI (WACOM_HID_UP_WACOMDIGITIZER | 0x5c)
111#define WACOM_HID_WD_TOOLTYPE (WACOM_HID_UP_WACOMDIGITIZER | 0x77)
b5c921e6 112#define WACOM_HID_WD_DISTANCE (WACOM_HID_UP_WACOMDIGITIZER | 0x0132)
bf78adcb
JG
113#define WACOM_HID_WD_TOUCHSTRIP (WACOM_HID_UP_WACOMDIGITIZER | 0x0136)
114#define WACOM_HID_WD_TOUCHSTRIP2 (WACOM_HID_UP_WACOMDIGITIZER | 0x0137)
5922e613
JG
115#define WACOM_HID_WD_TOUCHRING (WACOM_HID_UP_WACOMDIGITIZER | 0x0138)
116#define WACOM_HID_WD_TOUCHRINGSTATUS (WACOM_HID_UP_WACOMDIGITIZER | 0x0139)
117#define WACOM_HID_WD_ACCELEROMETER_X (WACOM_HID_UP_WACOMDIGITIZER | 0x0401)
118#define WACOM_HID_WD_ACCELEROMETER_Y (WACOM_HID_UP_WACOMDIGITIZER | 0x0402)
119#define WACOM_HID_WD_ACCELEROMETER_Z (WACOM_HID_UP_WACOMDIGITIZER | 0x0403)
93aab7fa 120#define WACOM_HID_WD_BATTERY_CHARGING (WACOM_HID_UP_WACOMDIGITIZER | 0x0404)
d2ec58ae 121#define WACOM_HID_WD_TOUCHONOFF (WACOM_HID_UP_WACOMDIGITIZER | 0x0454)
93aab7fa 122#define WACOM_HID_WD_BATTERY_LEVEL (WACOM_HID_UP_WACOMDIGITIZER | 0x043b)
5922e613 123#define WACOM_HID_WD_EXPRESSKEY00 (WACOM_HID_UP_WACOMDIGITIZER | 0x0910)
bf78adcb 124#define WACOM_HID_WD_EXPRESSKEYCAP00 (WACOM_HID_UP_WACOMDIGITIZER | 0x0950)
4082da80 125#define WACOM_HID_WD_MODE_CHANGE (WACOM_HID_UP_WACOMDIGITIZER | 0x0980)
d793ff81 126#define WACOM_HID_WD_MUTE_DEVICE (WACOM_HID_UP_WACOMDIGITIZER | 0x0981)
4eb220cb
PC
127#define WACOM_HID_WD_CONTROLPANEL (WACOM_HID_UP_WACOMDIGITIZER | 0x0982)
128#define WACOM_HID_WD_ONSCREEN_KEYBOARD (WACOM_HID_UP_WACOMDIGITIZER | 0x0983)
129#define WACOM_HID_WD_BUTTONCONFIG (WACOM_HID_UP_WACOMDIGITIZER | 0x0986)
5922e613
JG
130#define WACOM_HID_WD_BUTTONHOME (WACOM_HID_UP_WACOMDIGITIZER | 0x0990)
131#define WACOM_HID_WD_BUTTONUP (WACOM_HID_UP_WACOMDIGITIZER | 0x0991)
132#define WACOM_HID_WD_BUTTONDOWN (WACOM_HID_UP_WACOMDIGITIZER | 0x0992)
133#define WACOM_HID_WD_BUTTONLEFT (WACOM_HID_UP_WACOMDIGITIZER | 0x0993)
134#define WACOM_HID_WD_BUTTONRIGHT (WACOM_HID_UP_WACOMDIGITIZER | 0x0994)
bf78adcb 135#define WACOM_HID_WD_BUTTONCENTER (WACOM_HID_UP_WACOMDIGITIZER | 0x0995)
929d6d5d 136#define WACOM_HID_WD_FINGERWHEEL (WACOM_HID_UP_WACOMDIGITIZER | 0x0d03)
345857bb
JG
137#define WACOM_HID_WD_OFFSETLEFT (WACOM_HID_UP_WACOMDIGITIZER | 0x0d30)
138#define WACOM_HID_WD_OFFSETTOP (WACOM_HID_UP_WACOMDIGITIZER | 0x0d31)
139#define WACOM_HID_WD_OFFSETRIGHT (WACOM_HID_UP_WACOMDIGITIZER | 0x0d32)
140#define WACOM_HID_WD_OFFSETBOTTOM (WACOM_HID_UP_WACOMDIGITIZER | 0x0d33)
c9c09587 141#define WACOM_HID_WD_DATAMODE (WACOM_HID_UP_WACOMDIGITIZER | 0x1002)
5922e613 142#define WACOM_HID_WD_DIGITIZERINFO (WACOM_HID_UP_WACOMDIGITIZER | 0x1013)
bc335d4c 143#define WACOM_HID_WD_TOUCH_RING_SETTING (WACOM_HID_UP_WACOMDIGITIZER | 0x1032)
8de82280
JG
144#define WACOM_HID_UP_G9 0xff090000
145#define WACOM_HID_G9_PEN (WACOM_HID_UP_G9 | 0x02)
146#define WACOM_HID_G9_TOUCHSCREEN (WACOM_HID_UP_G9 | 0x11)
147#define WACOM_HID_UP_G11 0xff110000
148#define WACOM_HID_G11_PEN (WACOM_HID_UP_G11 | 0x02)
149#define WACOM_HID_G11_TOUCHSCREEN (WACOM_HID_UP_G11 | 0x11)
ac2423c9
AAS
150#define WACOM_HID_UP_WACOMTOUCH 0xff000000
151#define WACOM_HID_WT_TOUCHSCREEN (WACOM_HID_UP_WACOMTOUCH | 0x04)
152#define WACOM_HID_WT_TOUCHPAD (WACOM_HID_UP_WACOMTOUCH | 0x05)
153#define WACOM_HID_WT_CONTACTMAX (WACOM_HID_UP_WACOMTOUCH | 0x55)
154#define WACOM_HID_WT_X (WACOM_HID_UP_WACOMTOUCH | 0x130)
155#define WACOM_HID_WT_Y (WACOM_HID_UP_WACOMTOUCH | 0x131)
042628ab 156
5ac3d4ae
JG
157#define WACOM_BATTERY_USAGE(f) (((f)->hid == HID_DG_BATTERYSTRENGTH) || \
158 ((f)->hid == WACOM_HID_WD_BATTERY_CHARGING) || \
159 ((f)->hid == WACOM_HID_WD_BATTERY_LEVEL))
160
5922e613
JG
161#define WACOM_PAD_FIELD(f) (((f)->physical == HID_DG_TABLETFUNCTIONKEY) || \
162 ((f)->physical == WACOM_HID_WD_DIGITIZERFNKEYS) || \
163 ((f)->physical == WACOM_HID_WD_DIGITIZERINFO))
164
d97a5522
BT
165#define WACOM_PEN_FIELD(f) (((f)->logical == HID_DG_STYLUS) || \
166 ((f)->physical == HID_DG_STYLUS) || \
61e9e7e4 167 ((f)->physical == HID_DG_PEN) || \
042628ab
JG
168 ((f)->application == HID_DG_PEN) || \
169 ((f)->application == HID_DG_DIGITIZER) || \
885e89f6 170 ((f)->application == WACOM_HID_WD_PEN) || \
1b18b75c
JG
171 ((f)->application == WACOM_HID_WD_DIGITIZER) || \
172 ((f)->application == WACOM_HID_G9_PEN) || \
173 ((f)->application == WACOM_HID_G11_PEN))
d97a5522
BT
174#define WACOM_FINGER_FIELD(f) (((f)->logical == HID_DG_FINGER) || \
175 ((f)->physical == HID_DG_FINGER) || \
1b18b75c
JG
176 ((f)->application == HID_DG_TOUCHSCREEN) || \
177 ((f)->application == WACOM_HID_G9_TOUCHSCREEN) || \
ac2423c9
AAS
178 ((f)->application == WACOM_HID_G11_TOUCHSCREEN) || \
179 ((f)->application == WACOM_HID_WT_TOUCHPAD) || \
180 ((f)->application == HID_DG_TOUCHPAD))
181
182#define WACOM_DIRECT_DEVICE(f) (((f)->application == HID_DG_TOUCHSCREEN) || \
183 ((f)->application == WACOM_HID_WT_TOUCHSCREEN) || \
184 ((f)->application == HID_DG_PEN) || \
185 ((f)->application == WACOM_HID_WD_PEN))
d97a5522 186
3bea733a
PC
187enum {
188 PENPARTNER = 0,
189 GRAPHIRE,
387142bb 190 GRAPHIRE_BT,
3bea733a
PC
191 WACOM_G4,
192 PTU,
193 PL,
c8f2edc5 194 DTU,
497ab1f2 195 DTUS,
fff00bf8 196 DTUSX,
3bea733a 197 INTUOS,
8d32e3ae 198 INTUOS3S,
3bea733a
PC
199 INTUOS3,
200 INTUOS3L,
6f660f12
PC
201 INTUOS4S,
202 INTUOS4,
81af7e61 203 INTUOS4WL,
6f660f12 204 INTUOS4L,
9fee6195
JG
205 INTUOS5S,
206 INTUOS5,
207 INTUOS5L,
9a35c411
PC
208 INTUOSPS,
209 INTUOSPM,
210 INTUOSPL,
4922cd26 211 INTUOSP2_BT,
3a4b4aaa 212 WACOM_21UX2,
d838c644 213 WACOM_22HD,
a112e9fd 214 DTK,
d838c644 215 WACOM_24HD,
500d4160 216 WACOM_27QHD,
36d3c510 217 CINTIQ_HYBRID,
f7acb55c 218 CINTIQ_COMPANION_2,
3bea733a 219 CINTIQ,
0e1763f5 220 WACOM_BEE,
56218563 221 WACOM_13HD,
7ecfbfd3 222 WACOM_MO,
3b164a00
PC
223 BAMBOO_PEN,
224 INTUOSHT,
eda01dab 225 INTUOSHT2,
3b164a00 226 BAMBOO_TOUCH,
ea2e6024 227 BAMBOO_PT,
b1e4279e 228 WACOM_24HDT,
500d4160 229 WACOM_27QHDT,
8c97a765 230 BAMBOO_PAD,
7adb91bd 231 WIRELESS,
72b236d6 232 REMOTE,
ea2e6024 233 TABLETPC, /* add new TPC below */
ac173837 234 TABLETPCE,
ec67bbed 235 TABLETPC2FG,
1963518b 236 MTSCREEN,
6afdc289 237 MTTPC,
d51ddb2b 238 MTTPC_B,
7704ac93 239 HID_GENERIC,
3bea733a
PC
240 MAX_TYPE
241};
242
243struct wacom_features {
e33da8a5 244 const char *name;
3bea733a
PC
245 int x_max;
246 int y_max;
247 int pressure_max;
248 int distance_max;
249 int type;
e35fb8c1
PC
250 int x_resolution;
251 int y_resolution;
70ee06c5 252 int numbered_buttons;
e779ef23
JG
253 int offset_left;
254 int offset_right;
255 int offset_top;
256 int offset_bottom;
ec67bbed
PC
257 int device_type;
258 int x_phy;
259 int y_phy;
c669fb2b
BT
260 unsigned unit;
261 int unitExpo;
fed87e65
HR
262 int x_fuzz;
263 int y_fuzz;
264 int pressure_fuzz;
265 int distance_fuzz;
bef7e200 266 int tilt_fuzz;
bc73dd39 267 unsigned quirks;
f393ee2b 268 unsigned touch_max;
aea2bf6a
JG
269 int oVid;
270 int oPid;
80befa93 271 int pktlen;
29b47391
BT
272 bool check_for_hid_type;
273 int hid_type;
3bea733a
PC
274};
275
4492efff
PC
276struct wacom_shared {
277 bool stylus_in_proximity;
a43c7c53 278 bool touch_down;
961794a0
PC
279 /* for wireless device to access USB interfaces */
280 unsigned touch_max;
281 int type;
282 struct input_dev *touch_input;
a97ac104
BT
283 struct hid_device *pen;
284 struct hid_device *touch;
d2ec58ae 285 bool has_mute_touch_switch;
d793ff81 286 bool is_touch_on;
4492efff
PC
287};
288
7704ac93 289struct hid_data {
5ae6e89f
BT
290 __s16 inputmode; /* InputMode HID feature, -1 if non-existent */
291 __s16 inputmode_index; /* InputMode HID feature index in the report */
61ce346a 292 bool sense_state;
7704ac93
BT
293 bool inrange_state;
294 bool invert_state;
295 bool tipswitch;
9e429d56
JG
296 bool barrelswitch;
297 bool barrelswitch2;
5ae6e89f
BT
298 int x;
299 int y;
300 int pressure;
301 int width;
302 int height;
303 int id;
499522c8 304 int cc_report;
1b5d514a
JG
305 int cc_index;
306 int cc_value_index;
003f50ab 307 int last_slot_field;
1b5d514a
JG
308 int num_expected;
309 int num_received;
16e45989 310 int bat_status;
93aab7fa
JG
311 int battery_capacity;
312 int bat_charging;
313 int bat_connected;
314 int ps_connected;
ed1fa736 315 bool pad_input_event_flag;
7704ac93
BT
316};
317
e6f2813a
BT
318struct wacom_remote_data {
319 struct {
320 u32 serial;
321 bool connected;
322 } remote[WACOM_MAX_REMOTES];
323};
324
3bea733a 325struct wacom_wac {
9956953e 326 char name[WACOM_NAME_MAX];
2a6cdbdd
JG
327 char pen_name[WACOM_NAME_MAX];
328 char touch_name[WACOM_NAME_MAX];
d2d13f18 329 char pad_name[WACOM_NAME_MAX];
29b47391 330 unsigned char data[WACOM_PKGLEN_MAX];
4fc19381
PC
331 int tool[2];
332 int id[2];
f85c9dc6 333 __u64 serial[2];
b3bd7ef3 334 bool reporting_data;
e33da8a5 335 struct wacom_features features;
4492efff 336 struct wacom_shared *shared;
2a6cdbdd
JG
337 struct input_dev *pen_input;
338 struct input_dev *touch_input;
d2d13f18 339 struct input_dev *pad_input;
16bf288c 340 int pid;
1963518b 341 int num_contacts_left;
f81a1295
BT
342 u8 bt_features;
343 u8 bt_high_speed;
326ea2a9
JG
344 int mode_report;
345 int mode_value;
7704ac93 346 struct hid_data hid_data;
d2ec58ae 347 bool has_mute_touch_switch;
4082da80
BT
348 bool has_mode_change;
349 bool is_direct_mode;
350
3bea733a
PC
351};
352
353#endif