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