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