GNU Linux-libre 4.4.289-gnu1
[releases.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_INTUOSREAD         5
51 #define WACOM_REPORT_INTUOSWRITE        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
74 /* device quirks */
75 #define WACOM_QUIRK_BBTOUCH_LOWRES      0x0001
76 #define WACOM_QUIRK_BATTERY             0x0008
77
78 /* device types */
79 #define WACOM_DEVICETYPE_NONE           0x0000
80 #define WACOM_DEVICETYPE_PEN            0x0001
81 #define WACOM_DEVICETYPE_TOUCH          0x0002
82 #define WACOM_DEVICETYPE_PAD            0x0004
83 #define WACOM_DEVICETYPE_WL_MONITOR     0x0008
84
85 #define WACOM_VENDORDEFINED_PEN         0xff0d0001
86
87 #define WACOM_PEN_FIELD(f)      (((f)->logical == HID_DG_STYLUS) || \
88                                  ((f)->physical == HID_DG_STYLUS) || \
89                                  ((f)->physical == HID_DG_PEN) || \
90                                  ((f)->application == HID_DG_PEN) || \
91                                  ((f)->application == HID_DG_DIGITIZER) || \
92                                  ((f)->application == WACOM_VENDORDEFINED_PEN))
93 #define WACOM_FINGER_FIELD(f)   (((f)->logical == HID_DG_FINGER) || \
94                                  ((f)->physical == HID_DG_FINGER) || \
95                                  ((f)->application == HID_DG_TOUCHSCREEN))
96
97 enum {
98         PENPARTNER = 0,
99         GRAPHIRE,
100         GRAPHIRE_BT,
101         WACOM_G4,
102         PTU,
103         PL,
104         DTU,
105         DTUS,
106         DTUSX,
107         INTUOS,
108         INTUOS3S,
109         INTUOS3,
110         INTUOS3L,
111         INTUOS4S,
112         INTUOS4,
113         INTUOS4WL,
114         INTUOS4L,
115         INTUOS5S,
116         INTUOS5,
117         INTUOS5L,
118         INTUOSPS,
119         INTUOSPM,
120         INTUOSPL,
121         WACOM_21UX2,
122         WACOM_22HD,
123         DTK,
124         WACOM_24HD,
125         WACOM_27QHD,
126         CINTIQ_HYBRID,
127         CINTIQ_COMPANION_2,
128         CINTIQ,
129         WACOM_BEE,
130         WACOM_13HD,
131         WACOM_MO,
132         BAMBOO_PEN,
133         INTUOSHT,
134         INTUOSHT2,
135         BAMBOO_TOUCH,
136         BAMBOO_PT,
137         WACOM_24HDT,
138         WACOM_27QHDT,
139         BAMBOO_PAD,
140         WIRELESS,
141         REMOTE,
142         TABLETPC,   /* add new TPC below */
143         TABLETPCE,
144         TABLETPC2FG,
145         MTSCREEN,
146         MTTPC,
147         MTTPC_B,
148         HID_GENERIC,
149         MAX_TYPE
150 };
151
152 struct wacom_features {
153         const char *name;
154         int x_max;
155         int y_max;
156         int pressure_max;
157         int distance_max;
158         int type;
159         int x_resolution;
160         int y_resolution;
161         int numbered_buttons;
162         int x_min;
163         int y_min;
164         int device_type;
165         int x_phy;
166         int y_phy;
167         unsigned unit;
168         int unitExpo;
169         int x_fuzz;
170         int y_fuzz;
171         int pressure_fuzz;
172         int distance_fuzz;
173         unsigned quirks;
174         unsigned touch_max;
175         int oVid;
176         int oPid;
177         int pktlen;
178         bool check_for_hid_type;
179         int hid_type;
180         int last_slot_field;
181 };
182
183 struct wacom_shared {
184         bool stylus_in_proximity;
185         bool touch_down;
186         /* for wireless device to access USB interfaces */
187         unsigned touch_max;
188         int type;
189         struct input_dev *touch_input;
190         struct hid_device *pen;
191         struct hid_device *touch;
192 };
193
194 struct hid_data {
195         __s16 inputmode;        /* InputMode HID feature, -1 if non-existent */
196         __s16 inputmode_index;  /* InputMode HID feature index in the report */
197         bool inrange_state;
198         bool invert_state;
199         bool tipswitch;
200         int x;
201         int y;
202         int pressure;
203         int width;
204         int height;
205         int id;
206         int cc_report;
207         int cc_index;
208         int cc_value_index;
209         int num_expected;
210         int num_received;
211 };
212
213 struct wacom_wac {
214         char pen_name[WACOM_NAME_MAX];
215         char touch_name[WACOM_NAME_MAX];
216         char pad_name[WACOM_NAME_MAX];
217         char bat_name[WACOM_NAME_MAX];
218         char ac_name[WACOM_NAME_MAX];
219         unsigned char data[WACOM_PKGLEN_MAX];
220         int tool[2];
221         int id[2];
222         __u32 serial[5];
223         bool reporting_data;
224         struct wacom_features features;
225         struct wacom_shared *shared;
226         struct input_dev *pen_input;
227         struct input_dev *touch_input;
228         struct input_dev *pad_input;
229         bool pen_registered;
230         bool touch_registered;
231         bool pad_registered;
232         int pid;
233         int battery_capacity;
234         int num_contacts_left;
235         int bat_charging;
236         int bat_connected;
237         int ps_connected;
238         u8 bt_features;
239         u8 bt_high_speed;
240         struct hid_data hid_data;
241 };
242
243 #endif