]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - drivers/hid/wacom_wac.h
HID: wacom: generic: Add support for height, tilt, and twist usages
[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
ee54500d 15/* maximum packet length for USB devices */
500d4160 16#define WACOM_PKGLEN_MAX 192
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
bc73dd39 75/* device quirks */
f3586d2f 76#define WACOM_QUIRK_BBTOUCH_LOWRES 0x0001
f3586d2f 77#define WACOM_QUIRK_BATTERY 0x0008
bc73dd39 78
aa86b18c
JG
79/* device types */
80#define WACOM_DEVICETYPE_NONE 0x0000
81#define WACOM_DEVICETYPE_PEN 0x0001
82#define WACOM_DEVICETYPE_TOUCH 0x0002
862cf553 83#define WACOM_DEVICETYPE_PAD 0x0004
ccad85cc 84#define WACOM_DEVICETYPE_WL_MONITOR 0x0008
e5bc8eb1 85#define WACOM_DEVICETYPE_DIRECT 0x0010
aa86b18c 86
8de82280
JG
87#define WACOM_HID_UP_WACOMDIGITIZER 0xff0d0000
88#define WACOM_HID_WD_DIGITIZER (WACOM_HID_UP_WACOMDIGITIZER | 0x01)
89#define WACOM_HID_UP_G9 0xff090000
90#define WACOM_HID_G9_PEN (WACOM_HID_UP_G9 | 0x02)
91#define WACOM_HID_G9_TOUCHSCREEN (WACOM_HID_UP_G9 | 0x11)
92#define WACOM_HID_UP_G11 0xff110000
93#define WACOM_HID_G11_PEN (WACOM_HID_UP_G11 | 0x02)
94#define WACOM_HID_G11_TOUCHSCREEN (WACOM_HID_UP_G11 | 0x11)
042628ab 95
d97a5522
BT
96#define WACOM_PEN_FIELD(f) (((f)->logical == HID_DG_STYLUS) || \
97 ((f)->physical == HID_DG_STYLUS) || \
61e9e7e4 98 ((f)->physical == HID_DG_PEN) || \
042628ab
JG
99 ((f)->application == HID_DG_PEN) || \
100 ((f)->application == HID_DG_DIGITIZER) || \
1b18b75c
JG
101 ((f)->application == WACOM_HID_WD_DIGITIZER) || \
102 ((f)->application == WACOM_HID_G9_PEN) || \
103 ((f)->application == WACOM_HID_G11_PEN))
d97a5522
BT
104#define WACOM_FINGER_FIELD(f) (((f)->logical == HID_DG_FINGER) || \
105 ((f)->physical == HID_DG_FINGER) || \
1b18b75c
JG
106 ((f)->application == HID_DG_TOUCHSCREEN) || \
107 ((f)->application == WACOM_HID_G9_TOUCHSCREEN) || \
108 ((f)->application == WACOM_HID_G11_TOUCHSCREEN))
d97a5522 109
3bea733a
PC
110enum {
111 PENPARTNER = 0,
112 GRAPHIRE,
387142bb 113 GRAPHIRE_BT,
3bea733a
PC
114 WACOM_G4,
115 PTU,
116 PL,
c8f2edc5 117 DTU,
497ab1f2 118 DTUS,
fff00bf8 119 DTUSX,
3bea733a 120 INTUOS,
8d32e3ae 121 INTUOS3S,
3bea733a
PC
122 INTUOS3,
123 INTUOS3L,
6f660f12
PC
124 INTUOS4S,
125 INTUOS4,
81af7e61 126 INTUOS4WL,
6f660f12 127 INTUOS4L,
9fee6195
JG
128 INTUOS5S,
129 INTUOS5,
130 INTUOS5L,
9a35c411
PC
131 INTUOSPS,
132 INTUOSPM,
133 INTUOSPL,
3a4b4aaa 134 WACOM_21UX2,
d838c644 135 WACOM_22HD,
a112e9fd 136 DTK,
d838c644 137 WACOM_24HD,
500d4160 138 WACOM_27QHD,
36d3c510 139 CINTIQ_HYBRID,
f7acb55c 140 CINTIQ_COMPANION_2,
3bea733a 141 CINTIQ,
0e1763f5 142 WACOM_BEE,
56218563 143 WACOM_13HD,
7ecfbfd3 144 WACOM_MO,
3b164a00
PC
145 BAMBOO_PEN,
146 INTUOSHT,
eda01dab 147 INTUOSHT2,
3b164a00 148 BAMBOO_TOUCH,
ea2e6024 149 BAMBOO_PT,
b1e4279e 150 WACOM_24HDT,
500d4160 151 WACOM_27QHDT,
8c97a765 152 BAMBOO_PAD,
7adb91bd 153 WIRELESS,
72b236d6 154 REMOTE,
ea2e6024 155 TABLETPC, /* add new TPC below */
ac173837 156 TABLETPCE,
ec67bbed 157 TABLETPC2FG,
1963518b 158 MTSCREEN,
6afdc289 159 MTTPC,
d51ddb2b 160 MTTPC_B,
7704ac93 161 HID_GENERIC,
3bea733a
PC
162 MAX_TYPE
163};
164
165struct wacom_features {
e33da8a5 166 const char *name;
3bea733a
PC
167 int x_max;
168 int y_max;
169 int pressure_max;
170 int distance_max;
171 int type;
e35fb8c1
PC
172 int x_resolution;
173 int y_resolution;
70ee06c5 174 int numbered_buttons;
ac414da3
PC
175 int x_min;
176 int y_min;
ec67bbed
PC
177 int device_type;
178 int x_phy;
179 int y_phy;
c669fb2b
BT
180 unsigned unit;
181 int unitExpo;
fed87e65
HR
182 int x_fuzz;
183 int y_fuzz;
184 int pressure_fuzz;
185 int distance_fuzz;
bef7e200 186 int tilt_fuzz;
bc73dd39 187 unsigned quirks;
f393ee2b 188 unsigned touch_max;
aea2bf6a
JG
189 int oVid;
190 int oPid;
80befa93 191 int pktlen;
29b47391
BT
192 bool check_for_hid_type;
193 int hid_type;
3bea733a
PC
194};
195
4492efff
PC
196struct wacom_shared {
197 bool stylus_in_proximity;
a43c7c53 198 bool touch_down;
961794a0
PC
199 /* for wireless device to access USB interfaces */
200 unsigned touch_max;
201 int type;
202 struct input_dev *touch_input;
a97ac104
BT
203 struct hid_device *pen;
204 struct hid_device *touch;
4492efff
PC
205};
206
7704ac93 207struct hid_data {
5ae6e89f
BT
208 __s16 inputmode; /* InputMode HID feature, -1 if non-existent */
209 __s16 inputmode_index; /* InputMode HID feature index in the report */
7704ac93
BT
210 bool inrange_state;
211 bool invert_state;
212 bool tipswitch;
5ae6e89f
BT
213 int x;
214 int y;
215 int pressure;
216 int width;
217 int height;
218 int id;
499522c8 219 int cc_report;
1b5d514a
JG
220 int cc_index;
221 int cc_value_index;
003f50ab 222 int last_slot_field;
1b5d514a
JG
223 int num_expected;
224 int num_received;
7704ac93
BT
225};
226
e6f2813a
BT
227struct wacom_remote_data {
228 struct {
229 u32 serial;
230 bool connected;
231 } remote[WACOM_MAX_REMOTES];
232};
233
3bea733a 234struct wacom_wac {
9956953e 235 char name[WACOM_NAME_MAX];
2a6cdbdd
JG
236 char pen_name[WACOM_NAME_MAX];
237 char touch_name[WACOM_NAME_MAX];
d2d13f18 238 char pad_name[WACOM_NAME_MAX];
29b47391 239 unsigned char data[WACOM_PKGLEN_MAX];
4fc19381
PC
240 int tool[2];
241 int id[2];
83e6b40e 242 __u32 serial[2];
b3bd7ef3 243 bool reporting_data;
e33da8a5 244 struct wacom_features features;
4492efff 245 struct wacom_shared *shared;
2a6cdbdd
JG
246 struct input_dev *pen_input;
247 struct input_dev *touch_input;
d2d13f18 248 struct input_dev *pad_input;
16bf288c 249 int pid;
1963518b 250 int num_contacts_left;
f81a1295
BT
251 u8 bt_features;
252 u8 bt_high_speed;
326ea2a9
JG
253 int mode_report;
254 int mode_value;
7704ac93 255 struct hid_data hid_data;
3bea733a
PC
256};
257
258#endif