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