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