Merge branches 'for-4.10/asus', 'for-4.10/cp2112', 'for-4.10/i2c-hid-nopower', 'for...
[sfrench/cifs-2.6.git] / drivers / hid / wacom_wac.h
1 /*
2  * drivers/input/tablet/wacom_wac.h
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
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 #define WACOM_MAX_REMOTES       5
20 #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 #define WACOM_PKGLEN_BPAD_TOUCH 32
33 #define WACOM_PKGLEN_BPAD_TOUCH_USB     64
34
35 /* wacom data size per MT contact */
36 #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 #define CURSOR_DEVICE_ID        0x06
44 #define ERASER_DEVICE_ID        0x0A
45 #define PAD_DEVICE_ID           0x0F
46
47 /* wacom data packet report IDs */
48 #define WACOM_REPORT_PENABLED           2
49 #define WACOM_REPORT_PENABLED_BT        3
50 #define WACOM_REPORT_INTUOS_ID1         5
51 #define WACOM_REPORT_INTUOS_ID2         6
52 #define WACOM_REPORT_INTUOSPAD          12
53 #define WACOM_REPORT_INTUOS5PAD         3
54 #define WACOM_REPORT_DTUSPAD            21
55 #define WACOM_REPORT_TPC1FG             6
56 #define WACOM_REPORT_TPC2FG             13
57 #define WACOM_REPORT_TPCMT              13
58 #define WACOM_REPORT_TPCMT2             3
59 #define WACOM_REPORT_TPCHID             15
60 #define WACOM_REPORT_CINTIQ             16
61 #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 #define WACOM_REPORT_BPAD_PEN           3
69 #define WACOM_REPORT_BPAD_TOUCH         16
70 #define WACOM_REPORT_DEVICE_LIST        16
71 #define WACOM_REPORT_INTUOS_PEN         16
72 #define WACOM_REPORT_REMOTE             17
73 #define WACOM_REPORT_INTUOSHT2_ID       8
74
75 /* device quirks */
76 #define WACOM_QUIRK_BBTOUCH_LOWRES      0x0001
77 #define WACOM_QUIRK_SENSE               0x0002
78 #define WACOM_QUIRK_BATTERY             0x0008
79
80 /* device types */
81 #define WACOM_DEVICETYPE_NONE           0x0000
82 #define WACOM_DEVICETYPE_PEN            0x0001
83 #define WACOM_DEVICETYPE_TOUCH          0x0002
84 #define WACOM_DEVICETYPE_PAD            0x0004
85 #define WACOM_DEVICETYPE_WL_MONITOR     0x0008
86 #define WACOM_DEVICETYPE_DIRECT         0x0010
87
88 #define WACOM_HID_UP_WACOMDIGITIZER     0xff0d0000
89 #define WACOM_HID_SP_PAD                0x00040000
90 #define WACOM_HID_SP_BUTTON             0x00090000
91 #define WACOM_HID_SP_DIGITIZER          0x000d0000
92 #define WACOM_HID_SP_DIGITIZERINFO      0x00100000
93 #define WACOM_HID_WD_DIGITIZER          (WACOM_HID_UP_WACOMDIGITIZER | 0x01)
94 #define WACOM_HID_WD_SENSE              (WACOM_HID_UP_WACOMDIGITIZER | 0x36)
95 #define WACOM_HID_WD_DIGITIZERFNKEYS    (WACOM_HID_UP_WACOMDIGITIZER | 0x39)
96 #define WACOM_HID_WD_SERIALHI           (WACOM_HID_UP_WACOMDIGITIZER | 0x5c)
97 #define WACOM_HID_WD_TOOLTYPE           (WACOM_HID_UP_WACOMDIGITIZER | 0x77)
98 #define WACOM_HID_WD_DISTANCE           (WACOM_HID_UP_WACOMDIGITIZER | 0x0132)
99 #define WACOM_HID_WD_TOUCHSTRIP         (WACOM_HID_UP_WACOMDIGITIZER | 0x0136)
100 #define WACOM_HID_WD_TOUCHSTRIP2        (WACOM_HID_UP_WACOMDIGITIZER | 0x0137)
101 #define WACOM_HID_WD_TOUCHRING          (WACOM_HID_UP_WACOMDIGITIZER | 0x0138)
102 #define WACOM_HID_WD_TOUCHRINGSTATUS    (WACOM_HID_UP_WACOMDIGITIZER | 0x0139)
103 #define WACOM_HID_WD_ACCELEROMETER_X    (WACOM_HID_UP_WACOMDIGITIZER | 0x0401)
104 #define WACOM_HID_WD_ACCELEROMETER_Y    (WACOM_HID_UP_WACOMDIGITIZER | 0x0402)
105 #define WACOM_HID_WD_ACCELEROMETER_Z    (WACOM_HID_UP_WACOMDIGITIZER | 0x0403)
106 #define WACOM_HID_WD_BATTERY_CHARGING   (WACOM_HID_UP_WACOMDIGITIZER | 0x0404)
107 #define WACOM_HID_WD_BATTERY_LEVEL      (WACOM_HID_UP_WACOMDIGITIZER | 0x043b)
108 #define WACOM_HID_WD_EXPRESSKEY00       (WACOM_HID_UP_WACOMDIGITIZER | 0x0910)
109 #define WACOM_HID_WD_EXPRESSKEYCAP00    (WACOM_HID_UP_WACOMDIGITIZER | 0x0950)
110 #define WACOM_HID_WD_BUTTONHOME         (WACOM_HID_UP_WACOMDIGITIZER | 0x0990)
111 #define WACOM_HID_WD_BUTTONUP           (WACOM_HID_UP_WACOMDIGITIZER | 0x0991)
112 #define WACOM_HID_WD_BUTTONDOWN         (WACOM_HID_UP_WACOMDIGITIZER | 0x0992)
113 #define WACOM_HID_WD_BUTTONLEFT         (WACOM_HID_UP_WACOMDIGITIZER | 0x0993)
114 #define WACOM_HID_WD_BUTTONRIGHT        (WACOM_HID_UP_WACOMDIGITIZER | 0x0994)
115 #define WACOM_HID_WD_BUTTONCENTER       (WACOM_HID_UP_WACOMDIGITIZER | 0x0995)
116 #define WACOM_HID_WD_TOUCHONOFF         (WACOM_HID_UP_WACOMDIGITIZER | 0x0996)
117 #define WACOM_HID_WD_FINGERWHEEL        (WACOM_HID_UP_WACOMDIGITIZER | 0x0d03)
118 #define WACOM_HID_WD_OFFSETLEFT         (WACOM_HID_UP_WACOMDIGITIZER | 0x0d30)
119 #define WACOM_HID_WD_OFFSETTOP          (WACOM_HID_UP_WACOMDIGITIZER | 0x0d31)
120 #define WACOM_HID_WD_OFFSETRIGHT        (WACOM_HID_UP_WACOMDIGITIZER | 0x0d32)
121 #define WACOM_HID_WD_OFFSETBOTTOM       (WACOM_HID_UP_WACOMDIGITIZER | 0x0d33)
122 #define WACOM_HID_WD_DATAMODE           (WACOM_HID_UP_WACOMDIGITIZER | 0x1002)
123 #define WACOM_HID_WD_DIGITIZERINFO      (WACOM_HID_UP_WACOMDIGITIZER | 0x1013)
124 #define WACOM_HID_UP_G9                 0xff090000
125 #define WACOM_HID_G9_PEN                (WACOM_HID_UP_G9 | 0x02)
126 #define WACOM_HID_G9_TOUCHSCREEN        (WACOM_HID_UP_G9 | 0x11)
127 #define WACOM_HID_UP_G11                0xff110000
128 #define WACOM_HID_G11_PEN               (WACOM_HID_UP_G11 | 0x02)
129 #define WACOM_HID_G11_TOUCHSCREEN       (WACOM_HID_UP_G11 | 0x11)
130
131 #define WACOM_PAD_FIELD(f)      (((f)->physical == HID_DG_TABLETFUNCTIONKEY) || \
132                                  ((f)->physical == WACOM_HID_WD_DIGITIZERFNKEYS) || \
133                                  ((f)->physical == WACOM_HID_WD_DIGITIZERINFO))
134
135 #define WACOM_PEN_FIELD(f)      (((f)->logical == HID_DG_STYLUS) || \
136                                  ((f)->physical == HID_DG_STYLUS) || \
137                                  ((f)->physical == HID_DG_PEN) || \
138                                  ((f)->application == HID_DG_PEN) || \
139                                  ((f)->application == HID_DG_DIGITIZER) || \
140                                  ((f)->application == WACOM_HID_WD_DIGITIZER) || \
141                                  ((f)->application == WACOM_HID_G9_PEN) || \
142                                  ((f)->application == WACOM_HID_G11_PEN))
143 #define WACOM_FINGER_FIELD(f)   (((f)->logical == HID_DG_FINGER) || \
144                                  ((f)->physical == HID_DG_FINGER) || \
145                                  ((f)->application == HID_DG_TOUCHSCREEN) || \
146                                  ((f)->application == WACOM_HID_G9_TOUCHSCREEN) || \
147                                  ((f)->application == WACOM_HID_G11_TOUCHSCREEN))
148
149 enum {
150         PENPARTNER = 0,
151         GRAPHIRE,
152         GRAPHIRE_BT,
153         WACOM_G4,
154         PTU,
155         PL,
156         DTU,
157         DTUS,
158         DTUSX,
159         INTUOS,
160         INTUOS3S,
161         INTUOS3,
162         INTUOS3L,
163         INTUOS4S,
164         INTUOS4,
165         INTUOS4WL,
166         INTUOS4L,
167         INTUOS5S,
168         INTUOS5,
169         INTUOS5L,
170         INTUOSPS,
171         INTUOSPM,
172         INTUOSPL,
173         WACOM_21UX2,
174         WACOM_22HD,
175         DTK,
176         WACOM_24HD,
177         WACOM_27QHD,
178         CINTIQ_HYBRID,
179         CINTIQ_COMPANION_2,
180         CINTIQ,
181         WACOM_BEE,
182         WACOM_13HD,
183         WACOM_MO,
184         BAMBOO_PEN,
185         INTUOSHT,
186         INTUOSHT2,
187         BAMBOO_TOUCH,
188         BAMBOO_PT,
189         WACOM_24HDT,
190         WACOM_27QHDT,
191         BAMBOO_PAD,
192         WIRELESS,
193         REMOTE,
194         TABLETPC,   /* add new TPC below */
195         TABLETPCE,
196         TABLETPC2FG,
197         MTSCREEN,
198         MTTPC,
199         MTTPC_B,
200         HID_GENERIC,
201         MAX_TYPE
202 };
203
204 struct wacom_features {
205         const char *name;
206         int x_max;
207         int y_max;
208         int pressure_max;
209         int distance_max;
210         int type;
211         int x_resolution;
212         int y_resolution;
213         int numbered_buttons;
214         int offset_left;
215         int offset_right;
216         int offset_top;
217         int offset_bottom;
218         int device_type;
219         int x_phy;
220         int y_phy;
221         unsigned unit;
222         int unitExpo;
223         int x_fuzz;
224         int y_fuzz;
225         int pressure_fuzz;
226         int distance_fuzz;
227         int tilt_fuzz;
228         unsigned quirks;
229         unsigned touch_max;
230         int oVid;
231         int oPid;
232         int pktlen;
233         bool check_for_hid_type;
234         int hid_type;
235         bool input_event_flag;
236 };
237
238 struct wacom_shared {
239         bool stylus_in_proximity;
240         bool touch_down;
241         /* for wireless device to access USB interfaces */
242         unsigned touch_max;
243         int type;
244         struct input_dev *touch_input;
245         struct hid_device *pen;
246         struct hid_device *touch;
247 };
248
249 struct hid_data {
250         __s16 inputmode;        /* InputMode HID feature, -1 if non-existent */
251         __s16 inputmode_index;  /* InputMode HID feature index in the report */
252         bool sense_state;
253         bool inrange_state;
254         bool invert_state;
255         bool tipswitch;
256         int x;
257         int y;
258         int pressure;
259         int width;
260         int height;
261         int id;
262         int cc_report;
263         int cc_index;
264         int cc_value_index;
265         int last_slot_field;
266         int num_expected;
267         int num_received;
268         int battery_capacity;
269         int bat_charging;
270         int bat_connected;
271         int ps_connected;
272 };
273
274 struct wacom_remote_data {
275         struct {
276                 u32 serial;
277                 bool connected;
278         } remote[WACOM_MAX_REMOTES];
279 };
280
281 struct wacom_wac {
282         char name[WACOM_NAME_MAX];
283         char pen_name[WACOM_NAME_MAX];
284         char touch_name[WACOM_NAME_MAX];
285         char pad_name[WACOM_NAME_MAX];
286         unsigned char data[WACOM_PKGLEN_MAX];
287         int tool[2];
288         int id[2];
289         __u64 serial[2];
290         bool reporting_data;
291         struct wacom_features features;
292         struct wacom_shared *shared;
293         struct input_dev *pen_input;
294         struct input_dev *touch_input;
295         struct input_dev *pad_input;
296         int pid;
297         int num_contacts_left;
298         u8 bt_features;
299         u8 bt_high_speed;
300         int mode_report;
301         int mode_value;
302         struct hid_data hid_data;
303 };
304
305 #endif