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