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