Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / 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
20 /* packet length for individual models */
21 #define WACOM_PKGLEN_PENPRTN     7
22 #define WACOM_PKGLEN_GRAPHIRE    8
23 #define WACOM_PKGLEN_BBFUN       9
24 #define WACOM_PKGLEN_INTUOS     10
25 #define WACOM_PKGLEN_TPC1FG      5
26 #define WACOM_PKGLEN_TPC1FG_B   10
27 #define WACOM_PKGLEN_TPC2FG     14
28 #define WACOM_PKGLEN_BBTOUCH    20
29 #define WACOM_PKGLEN_BBTOUCH3   64
30 #define WACOM_PKGLEN_BBPEN      10
31 #define WACOM_PKGLEN_WIRELESS   32
32 #define WACOM_PKGLEN_MTOUCH     62
33 #define WACOM_PKGLEN_MTTPC      40
34 #define WACOM_PKGLEN_DTUS       68
35 #define WACOM_PKGLEN_PENABLED    8
36 #define WACOM_PKGLEN_BPAD_TOUCH 32
37 #define WACOM_PKGLEN_BPAD_TOUCH_USB     64
38
39 /* wacom data size per MT contact */
40 #define WACOM_BYTES_PER_MT_PACKET       11
41 #define WACOM_BYTES_PER_24HDT_PACKET    14
42 #define WACOM_BYTES_PER_QHDTHID_PACKET   6
43
44 /* device IDs */
45 #define STYLUS_DEVICE_ID        0x02
46 #define TOUCH_DEVICE_ID         0x03
47 #define CURSOR_DEVICE_ID        0x06
48 #define ERASER_DEVICE_ID        0x0A
49 #define PAD_DEVICE_ID           0x0F
50
51 /* wacom data packet report IDs */
52 #define WACOM_REPORT_PENABLED           2
53 #define WACOM_REPORT_PENABLED_BT        3
54 #define WACOM_REPORT_INTUOSREAD         5
55 #define WACOM_REPORT_INTUOSWRITE        6
56 #define WACOM_REPORT_INTUOSPAD          12
57 #define WACOM_REPORT_INTUOS5PAD         3
58 #define WACOM_REPORT_DTUSPAD            21
59 #define WACOM_REPORT_TPC1FG             6
60 #define WACOM_REPORT_TPC2FG             13
61 #define WACOM_REPORT_TPCMT              13
62 #define WACOM_REPORT_TPCMT2             3
63 #define WACOM_REPORT_TPCHID             15
64 #define WACOM_REPORT_CINTIQ             16
65 #define WACOM_REPORT_CINTIQPAD          17
66 #define WACOM_REPORT_TPCST              16
67 #define WACOM_REPORT_DTUS               17
68 #define WACOM_REPORT_TPC1FGE            18
69 #define WACOM_REPORT_24HDT              1
70 #define WACOM_REPORT_WL                 128
71 #define WACOM_REPORT_USB                192
72 #define WACOM_REPORT_BPAD_PEN           3
73 #define WACOM_REPORT_BPAD_TOUCH         16
74
75 /* device quirks */
76 #define WACOM_QUIRK_BBTOUCH_LOWRES      0x0001
77 #define WACOM_QUIRK_NO_INPUT            0x0002
78 #define WACOM_QUIRK_MONITOR             0x0004
79 #define WACOM_QUIRK_BATTERY             0x0008
80
81 #define WACOM_PEN_FIELD(f)      (((f)->logical == HID_DG_STYLUS) || \
82                                  ((f)->physical == HID_DG_STYLUS) || \
83                                  ((f)->physical == HID_DG_PEN) || \
84                                  ((f)->application == HID_DG_PEN))
85 #define WACOM_FINGER_FIELD(f)   (((f)->logical == HID_DG_FINGER) || \
86                                  ((f)->physical == HID_DG_FINGER) || \
87                                  ((f)->application == HID_DG_TOUCHSCREEN))
88
89 enum {
90         PENPARTNER = 0,
91         GRAPHIRE,
92         GRAPHIRE_BT,
93         WACOM_G4,
94         PTU,
95         PL,
96         DTU,
97         DTUS,
98         DTUSX,
99         INTUOS,
100         INTUOS3S,
101         INTUOS3,
102         INTUOS3L,
103         INTUOS4S,
104         INTUOS4,
105         INTUOS4WL,
106         INTUOS4L,
107         INTUOS5S,
108         INTUOS5,
109         INTUOS5L,
110         INTUOSPS,
111         INTUOSPM,
112         INTUOSPL,
113         INTUOSHT,
114         WACOM_21UX2,
115         WACOM_22HD,
116         DTK,
117         WACOM_24HD,
118         WACOM_27QHD,
119         CINTIQ_HYBRID,
120         CINTIQ,
121         WACOM_BEE,
122         WACOM_13HD,
123         WACOM_MO,
124         WIRELESS,
125         BAMBOO_PT,
126         WACOM_24HDT,
127         WACOM_27QHDT,
128         BAMBOO_PAD,
129         TABLETPC,   /* add new TPC below */
130         TABLETPCE,
131         TABLETPC2FG,
132         MTSCREEN,
133         MTTPC,
134         MTTPC_B,
135         HID_GENERIC,
136         MAX_TYPE
137 };
138
139 struct wacom_features {
140         const char *name;
141         int x_max;
142         int y_max;
143         int pressure_max;
144         int distance_max;
145         int type;
146         int x_resolution;
147         int y_resolution;
148         int x_min;
149         int y_min;
150         int device_type;
151         int x_phy;
152         int y_phy;
153         unsigned unit;
154         int unitExpo;
155         int x_fuzz;
156         int y_fuzz;
157         int pressure_fuzz;
158         int distance_fuzz;
159         unsigned quirks;
160         unsigned touch_max;
161         int oVid;
162         int oPid;
163         int pktlen;
164         bool check_for_hid_type;
165         int hid_type;
166         int last_slot_field;
167 };
168
169 struct wacom_shared {
170         bool stylus_in_proximity;
171         bool touch_down;
172         /* for wireless device to access USB interfaces */
173         unsigned touch_max;
174         int type;
175         struct input_dev *touch_input;
176         struct hid_device *pen;
177         struct hid_device *touch;
178 };
179
180 struct hid_data {
181         __s16 inputmode;        /* InputMode HID feature, -1 if non-existent */
182         __s16 inputmode_index;  /* InputMode HID feature index in the report */
183         bool inrange_state;
184         bool invert_state;
185         bool tipswitch;
186         int x;
187         int y;
188         int pressure;
189         int width;
190         int height;
191         int id;
192 };
193
194 struct wacom_wac {
195         char name[WACOM_NAME_MAX];
196         char pad_name[WACOM_NAME_MAX];
197         char bat_name[WACOM_NAME_MAX];
198         char ac_name[WACOM_NAME_MAX];
199         unsigned char data[WACOM_PKGLEN_MAX];
200         int tool[2];
201         int id[2];
202         __u32 serial[2];
203         bool reporting_data;
204         struct wacom_features features;
205         struct wacom_shared *shared;
206         struct input_dev *input;
207         struct input_dev *pad_input;
208         bool input_registered;
209         bool pad_registered;
210         int pid;
211         int battery_capacity;
212         int num_contacts_left;
213         int bat_charging;
214         int bat_connected;
215         int ps_connected;
216         u8 bt_features;
217         u8 bt_high_speed;
218         struct hid_data hid_data;
219 };
220
221 #endif