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