xref: /openbmc/linux/drivers/hid/wacom_wac.h (revision 34d6f206a88c2651d216bd3487ac956a40b2ba8e)
12874c5fdSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
235f47386SChristophe JAILLET 
3471d1714SBenjamin Tissoires #ifndef WACOM_WAC_H
4471d1714SBenjamin Tissoires #define WACOM_WAC_H
5471d1714SBenjamin Tissoires 
6471d1714SBenjamin Tissoires #include <linux/types.h>
7d97a5522SBenjamin Tissoires #include <linux/hid.h>
883417206SJason Gerecke #include <linux/kfifo.h>
9471d1714SBenjamin Tissoires 
104922cd26SJason Gerecke /* maximum packet length for USB/BT devices */
114922cd26SJason Gerecke #define WACOM_PKGLEN_MAX	361
12471d1714SBenjamin Tissoires 
13471d1714SBenjamin Tissoires #define WACOM_NAME_MAX		64
1472b236d6SAaron Skomra #define WACOM_MAX_REMOTES	5
1572b236d6SAaron Skomra #define WACOM_STATUS_UNKNOWN	255
169ac6678bSAaron Armstrong Skomra #define WACOM_REMOTE_BATTERY_TIMEOUT	21000000000ll
17471d1714SBenjamin Tissoires 
18471d1714SBenjamin Tissoires /* packet length for individual models */
19471d1714SBenjamin Tissoires #define WACOM_PKGLEN_BBFUN	 9
20471d1714SBenjamin Tissoires #define WACOM_PKGLEN_TPC1FG	 5
21471d1714SBenjamin Tissoires #define WACOM_PKGLEN_TPC1FG_B	10
22471d1714SBenjamin Tissoires #define WACOM_PKGLEN_TPC2FG	14
23471d1714SBenjamin Tissoires #define WACOM_PKGLEN_BBTOUCH	20
24471d1714SBenjamin Tissoires #define WACOM_PKGLEN_BBTOUCH3	64
25471d1714SBenjamin Tissoires #define WACOM_PKGLEN_BBPEN	10
26471d1714SBenjamin Tissoires #define WACOM_PKGLEN_WIRELESS	32
27471d1714SBenjamin Tissoires #define WACOM_PKGLEN_PENABLED	 8
288c97a765SBenjamin Tissoires #define WACOM_PKGLEN_BPAD_TOUCH	32
298c97a765SBenjamin Tissoires #define WACOM_PKGLEN_BPAD_TOUCH_USB	64
30471d1714SBenjamin Tissoires 
31471d1714SBenjamin Tissoires /* wacom data size per MT contact */
32471d1714SBenjamin Tissoires #define WACOM_BYTES_PER_MT_PACKET	11
33471d1714SBenjamin Tissoires #define WACOM_BYTES_PER_24HDT_PACKET	14
34500d4160SPing Cheng #define WACOM_BYTES_PER_QHDTHID_PACKET	 6
35471d1714SBenjamin Tissoires 
36471d1714SBenjamin Tissoires /* device IDs */
37471d1714SBenjamin Tissoires #define STYLUS_DEVICE_ID	0x02
38471d1714SBenjamin Tissoires #define TOUCH_DEVICE_ID		0x03
39471d1714SBenjamin Tissoires #define CURSOR_DEVICE_ID	0x06
40471d1714SBenjamin Tissoires #define ERASER_DEVICE_ID	0x0A
41471d1714SBenjamin Tissoires #define PAD_DEVICE_ID		0x0F
42471d1714SBenjamin Tissoires 
43471d1714SBenjamin Tissoires /* wacom data packet report IDs */
44471d1714SBenjamin Tissoires #define WACOM_REPORT_PENABLED		2
45387142bbSBenjamin Tissoires #define WACOM_REPORT_PENABLED_BT	3
4606109993SJason Gerecke #define WACOM_REPORT_INTUOS_ID1		5
4706109993SJason Gerecke #define WACOM_REPORT_INTUOS_ID2		6
48471d1714SBenjamin Tissoires #define WACOM_REPORT_INTUOSPAD		12
49471d1714SBenjamin Tissoires #define WACOM_REPORT_INTUOS5PAD		3
50471d1714SBenjamin Tissoires #define WACOM_REPORT_DTUSPAD		21
51471d1714SBenjamin Tissoires #define WACOM_REPORT_TPC1FG		6
52471d1714SBenjamin Tissoires #define WACOM_REPORT_TPC2FG		13
53471d1714SBenjamin Tissoires #define WACOM_REPORT_TPCMT		13
54471d1714SBenjamin Tissoires #define WACOM_REPORT_TPCMT2		3
55471d1714SBenjamin Tissoires #define WACOM_REPORT_TPCHID		15
56500d4160SPing Cheng #define WACOM_REPORT_CINTIQ		16
57500d4160SPing Cheng #define WACOM_REPORT_CINTIQPAD		17
58471d1714SBenjamin Tissoires #define WACOM_REPORT_TPCST		16
59471d1714SBenjamin Tissoires #define WACOM_REPORT_DTUS		17
60471d1714SBenjamin Tissoires #define WACOM_REPORT_TPC1FGE		18
61471d1714SBenjamin Tissoires #define WACOM_REPORT_24HDT		1
62471d1714SBenjamin Tissoires #define WACOM_REPORT_WL			128
63471d1714SBenjamin Tissoires #define WACOM_REPORT_USB		192
648c97a765SBenjamin Tissoires #define WACOM_REPORT_BPAD_PEN		3
658c97a765SBenjamin Tissoires #define WACOM_REPORT_BPAD_TOUCH		16
6672b236d6SAaron Skomra #define WACOM_REPORT_DEVICE_LIST	16
67eda01dabSPing Cheng #define WACOM_REPORT_INTUOS_PEN		16
6872b236d6SAaron Skomra #define WACOM_REPORT_REMOTE		17
690bbfe28aSJason Gerecke #define WACOM_REPORT_INTUOSHT2_ID	8
70471d1714SBenjamin Tissoires 
715ba13c64SJason Gerecke /* wacom command report ids */
725ba13c64SJason Gerecke #define WAC_CMD_WL_LED_CONTROL          0x03
735ba13c64SJason Gerecke #define WAC_CMD_LED_CONTROL             0x20
745ba13c64SJason Gerecke #define WAC_CMD_ICON_START              0x21
755ba13c64SJason Gerecke #define WAC_CMD_ICON_XFER               0x23
765ba13c64SJason Gerecke #define WAC_CMD_ICON_BT_XFER            0x26
775ba13c64SJason Gerecke #define WAC_CMD_DELETE_PAIRING          0x20
7810c55cacSAaron Armstrong Skomra #define WAC_CMD_LED_CONTROL_GENERIC     0x32
795ba13c64SJason Gerecke #define WAC_CMD_UNPAIR_ALL              0xFF
804922cd26SJason Gerecke #define WAC_CMD_WL_INTUOSP2             0x82
815ba13c64SJason Gerecke 
82471d1714SBenjamin Tissoires /* device quirks */
83f3586d2fSPing Cheng #define WACOM_QUIRK_BBTOUCH_LOWRES	0x0001
8461ce346aSJason Gerecke #define WACOM_QUIRK_SENSE		0x0002
8599acedadSJason Gerecke #define WACOM_QUIRK_AESPEN		0x0004
86f3586d2fSPing Cheng #define WACOM_QUIRK_BATTERY		0x0008
8783417206SJason Gerecke #define WACOM_QUIRK_TOOLSERIAL		0x0010
886d09085bSJoshua-Dickens #define WACOM_QUIRK_PEN_BUTTON3	0x0020
89471d1714SBenjamin Tissoires 
90aa86b18cSJason Gerecke /* device types */
91aa86b18cSJason Gerecke #define WACOM_DEVICETYPE_NONE           0x0000
92aa86b18cSJason Gerecke #define WACOM_DEVICETYPE_PEN            0x0001
93aa86b18cSJason Gerecke #define WACOM_DEVICETYPE_TOUCH          0x0002
94862cf553SJason Gerecke #define WACOM_DEVICETYPE_PAD            0x0004
95ccad85ccSJason Gerecke #define WACOM_DEVICETYPE_WL_MONITOR     0x0008
96e5bc8eb1SJason Gerecke #define WACOM_DEVICETYPE_DIRECT         0x0010
97aa86b18cSJason Gerecke 
9816e45989SJason Gerecke #define WACOM_POWER_SUPPLY_STATUS_AUTO  -1
9916e45989SJason Gerecke 
1008de82280SJason Gerecke #define WACOM_HID_UP_WACOMDIGITIZER     0xff0d0000
1015922e613SJason Gerecke #define WACOM_HID_SP_PAD                0x00040000
1025922e613SJason Gerecke #define WACOM_HID_SP_BUTTON             0x00090000
103c9c09587SJason Gerecke #define WACOM_HID_SP_DIGITIZER          0x000d0000
104c9c09587SJason Gerecke #define WACOM_HID_SP_DIGITIZERINFO      0x00100000
1058de82280SJason Gerecke #define WACOM_HID_WD_DIGITIZER          (WACOM_HID_UP_WACOMDIGITIZER | 0x01)
106ac2423c9SAaron Armstrong Skomra #define WACOM_HID_WD_PEN                (WACOM_HID_UP_WACOMDIGITIZER | 0x02)
10761ce346aSJason Gerecke #define WACOM_HID_WD_SENSE              (WACOM_HID_UP_WACOMDIGITIZER | 0x36)
1085922e613SJason Gerecke #define WACOM_HID_WD_DIGITIZERFNKEYS    (WACOM_HID_UP_WACOMDIGITIZER | 0x39)
10999acedadSJason Gerecke #define WACOM_HID_WD_SERIALNUMBER       (WACOM_HID_UP_WACOMDIGITIZER | 0x5b)
110f85c9dc6SJason Gerecke #define WACOM_HID_WD_SERIALHI           (WACOM_HID_UP_WACOMDIGITIZER | 0x5c)
1116d09085bSJoshua-Dickens #define WACOM_HID_WD_BARRELSWITCH3      (WACOM_HID_UP_WACOMDIGITIZER | 0x5d)
112f85c9dc6SJason Gerecke #define WACOM_HID_WD_TOOLTYPE           (WACOM_HID_UP_WACOMDIGITIZER | 0x77)
113b5c921e6SJason Gerecke #define WACOM_HID_WD_DISTANCE           (WACOM_HID_UP_WACOMDIGITIZER | 0x0132)
114bf78adcbSJason Gerecke #define WACOM_HID_WD_TOUCHSTRIP         (WACOM_HID_UP_WACOMDIGITIZER | 0x0136)
115bf78adcbSJason Gerecke #define WACOM_HID_WD_TOUCHSTRIP2        (WACOM_HID_UP_WACOMDIGITIZER | 0x0137)
1165922e613SJason Gerecke #define WACOM_HID_WD_TOUCHRING          (WACOM_HID_UP_WACOMDIGITIZER | 0x0138)
1175922e613SJason Gerecke #define WACOM_HID_WD_TOUCHRINGSTATUS    (WACOM_HID_UP_WACOMDIGITIZER | 0x0139)
118b1f466a9SAaron Armstrong Skomra #define WACOM_HID_WD_REPORT_VALID       (WACOM_HID_UP_WACOMDIGITIZER | 0x01d0)
1196d09085bSJoshua-Dickens #define WACOM_HID_WD_SEQUENCENUMBER     (WACOM_HID_UP_WACOMDIGITIZER | 0x0220)
1205922e613SJason Gerecke #define WACOM_HID_WD_ACCELEROMETER_X    (WACOM_HID_UP_WACOMDIGITIZER | 0x0401)
1215922e613SJason Gerecke #define WACOM_HID_WD_ACCELEROMETER_Y    (WACOM_HID_UP_WACOMDIGITIZER | 0x0402)
1225922e613SJason Gerecke #define WACOM_HID_WD_ACCELEROMETER_Z    (WACOM_HID_UP_WACOMDIGITIZER | 0x0403)
12393aab7faSJason Gerecke #define WACOM_HID_WD_BATTERY_CHARGING   (WACOM_HID_UP_WACOMDIGITIZER | 0x0404)
124d2ec58aeSAaron Armstrong Skomra #define WACOM_HID_WD_TOUCHONOFF         (WACOM_HID_UP_WACOMDIGITIZER | 0x0454)
12593aab7faSJason Gerecke #define WACOM_HID_WD_BATTERY_LEVEL      (WACOM_HID_UP_WACOMDIGITIZER | 0x043b)
1265922e613SJason Gerecke #define WACOM_HID_WD_EXPRESSKEY00       (WACOM_HID_UP_WACOMDIGITIZER | 0x0910)
127424d8237SJason Gerecke #define WACOM_HID_WD_EXPRESSKEYCAP00    (WACOM_HID_UP_WACOMDIGITIZER | 0x0940)
1284082da80SBenjamin Tissoires #define WACOM_HID_WD_MODE_CHANGE        (WACOM_HID_UP_WACOMDIGITIZER | 0x0980)
129d793ff81SPing Cheng #define WACOM_HID_WD_MUTE_DEVICE        (WACOM_HID_UP_WACOMDIGITIZER | 0x0981)
1304eb220cbSPing Cheng #define WACOM_HID_WD_CONTROLPANEL       (WACOM_HID_UP_WACOMDIGITIZER | 0x0982)
1314eb220cbSPing Cheng #define WACOM_HID_WD_ONSCREEN_KEYBOARD  (WACOM_HID_UP_WACOMDIGITIZER | 0x0983)
1324eb220cbSPing Cheng #define WACOM_HID_WD_BUTTONCONFIG       (WACOM_HID_UP_WACOMDIGITIZER | 0x0986)
1335922e613SJason Gerecke #define WACOM_HID_WD_BUTTONHOME         (WACOM_HID_UP_WACOMDIGITIZER | 0x0990)
1345922e613SJason Gerecke #define WACOM_HID_WD_BUTTONUP           (WACOM_HID_UP_WACOMDIGITIZER | 0x0991)
1355922e613SJason Gerecke #define WACOM_HID_WD_BUTTONDOWN         (WACOM_HID_UP_WACOMDIGITIZER | 0x0992)
1365922e613SJason Gerecke #define WACOM_HID_WD_BUTTONLEFT         (WACOM_HID_UP_WACOMDIGITIZER | 0x0993)
1375922e613SJason Gerecke #define WACOM_HID_WD_BUTTONRIGHT        (WACOM_HID_UP_WACOMDIGITIZER | 0x0994)
138bf78adcbSJason Gerecke #define WACOM_HID_WD_BUTTONCENTER       (WACOM_HID_UP_WACOMDIGITIZER | 0x0995)
139929d6d5dSJason Gerecke #define WACOM_HID_WD_FINGERWHEEL        (WACOM_HID_UP_WACOMDIGITIZER | 0x0d03)
140345857bbSJason Gerecke #define WACOM_HID_WD_OFFSETLEFT         (WACOM_HID_UP_WACOMDIGITIZER | 0x0d30)
141345857bbSJason Gerecke #define WACOM_HID_WD_OFFSETTOP          (WACOM_HID_UP_WACOMDIGITIZER | 0x0d31)
142345857bbSJason Gerecke #define WACOM_HID_WD_OFFSETRIGHT        (WACOM_HID_UP_WACOMDIGITIZER | 0x0d32)
143345857bbSJason Gerecke #define WACOM_HID_WD_OFFSETBOTTOM       (WACOM_HID_UP_WACOMDIGITIZER | 0x0d33)
144c9c09587SJason Gerecke #define WACOM_HID_WD_DATAMODE           (WACOM_HID_UP_WACOMDIGITIZER | 0x1002)
1455922e613SJason Gerecke #define WACOM_HID_WD_DIGITIZERINFO      (WACOM_HID_UP_WACOMDIGITIZER | 0x1013)
146d8e98060SAaron Armstrong Skomra #define WACOM_HID_WD_TOUCH_RING_SETTING (WACOM_HID_UP_WACOMDIGITIZER | 0x1032)
1478de82280SJason Gerecke #define WACOM_HID_UP_G9                 0xff090000
1488de82280SJason Gerecke #define WACOM_HID_G9_PEN                (WACOM_HID_UP_G9 | 0x02)
1498de82280SJason Gerecke #define WACOM_HID_G9_TOUCHSCREEN        (WACOM_HID_UP_G9 | 0x11)
1508de82280SJason Gerecke #define WACOM_HID_UP_G11                0xff110000
1518de82280SJason Gerecke #define WACOM_HID_G11_PEN               (WACOM_HID_UP_G11 | 0x02)
1528de82280SJason Gerecke #define WACOM_HID_G11_TOUCHSCREEN       (WACOM_HID_UP_G11 | 0x11)
153ac2423c9SAaron Armstrong Skomra #define WACOM_HID_UP_WACOMTOUCH         0xff000000
154ac2423c9SAaron Armstrong Skomra #define WACOM_HID_WT_TOUCHSCREEN        (WACOM_HID_UP_WACOMTOUCH | 0x04)
155ac2423c9SAaron Armstrong Skomra #define WACOM_HID_WT_TOUCHPAD           (WACOM_HID_UP_WACOMTOUCH | 0x05)
156ac2423c9SAaron Armstrong Skomra #define WACOM_HID_WT_CONTACTMAX         (WACOM_HID_UP_WACOMTOUCH | 0x55)
15799acedadSJason Gerecke #define WACOM_HID_WT_SERIALNUMBER       (WACOM_HID_UP_WACOMTOUCH | 0x5b)
158ac2423c9SAaron Armstrong Skomra #define WACOM_HID_WT_X                  (WACOM_HID_UP_WACOMTOUCH | 0x130)
159ac2423c9SAaron Armstrong Skomra #define WACOM_HID_WT_Y                  (WACOM_HID_UP_WACOMTOUCH | 0x131)
160f4e11d59SAaron Armstrong Skomra #define WACOM_HID_WT_REPORT_VALID       (WACOM_HID_UP_WACOMTOUCH | 0x1d0)
161042628abSJason Gerecke 
1625ac3d4aeSJason Gerecke #define WACOM_BATTERY_USAGE(f)	(((f)->hid == HID_DG_BATTERYSTRENGTH) || \
1635ac3d4aeSJason Gerecke 				 ((f)->hid == WACOM_HID_WD_BATTERY_CHARGING) || \
1645ac3d4aeSJason Gerecke 				 ((f)->hid == WACOM_HID_WD_BATTERY_LEVEL))
1655ac3d4aeSJason Gerecke 
1665922e613SJason Gerecke #define WACOM_PAD_FIELD(f)	(((f)->physical == HID_DG_TABLETFUNCTIONKEY) || \
1675922e613SJason Gerecke 				 ((f)->physical == WACOM_HID_WD_DIGITIZERFNKEYS) || \
1685922e613SJason Gerecke 				 ((f)->physical == WACOM_HID_WD_DIGITIZERINFO))
1695922e613SJason Gerecke 
170d97a5522SBenjamin Tissoires #define WACOM_PEN_FIELD(f)	(((f)->logical == HID_DG_STYLUS) || \
171d97a5522SBenjamin Tissoires 				 ((f)->physical == HID_DG_STYLUS) || \
17261e9e7e4SBenjamin Tissoires 				 ((f)->physical == HID_DG_PEN) || \
173042628abSJason Gerecke 				 ((f)->application == HID_DG_PEN) || \
174042628abSJason Gerecke 				 ((f)->application == HID_DG_DIGITIZER) || \
175885e89f6SJason Gerecke 				 ((f)->application == WACOM_HID_WD_PEN) || \
1761b18b75cSJason Gerecke 				 ((f)->application == WACOM_HID_WD_DIGITIZER) || \
1771b18b75cSJason Gerecke 				 ((f)->application == WACOM_HID_G9_PEN) || \
1781b18b75cSJason Gerecke 				 ((f)->application == WACOM_HID_G11_PEN))
179d97a5522SBenjamin Tissoires #define WACOM_FINGER_FIELD(f)	(((f)->logical == HID_DG_FINGER) || \
180d97a5522SBenjamin Tissoires 				 ((f)->physical == HID_DG_FINGER) || \
1811b18b75cSJason Gerecke 				 ((f)->application == HID_DG_TOUCHSCREEN) || \
1821b18b75cSJason Gerecke 				 ((f)->application == WACOM_HID_G9_TOUCHSCREEN) || \
183ac2423c9SAaron Armstrong Skomra 				 ((f)->application == WACOM_HID_G11_TOUCHSCREEN) || \
184ac2423c9SAaron Armstrong Skomra 				 ((f)->application == WACOM_HID_WT_TOUCHPAD) || \
185ac2423c9SAaron Armstrong Skomra 				 ((f)->application == HID_DG_TOUCHPAD))
186ac2423c9SAaron Armstrong Skomra 
187ac2423c9SAaron Armstrong Skomra #define WACOM_DIRECT_DEVICE(f)	(((f)->application == HID_DG_TOUCHSCREEN) || \
188ac2423c9SAaron Armstrong Skomra 				 ((f)->application == WACOM_HID_WT_TOUCHSCREEN) || \
189ac2423c9SAaron Armstrong Skomra 				 ((f)->application == HID_DG_PEN) || \
190ac2423c9SAaron Armstrong Skomra 				 ((f)->application == WACOM_HID_WD_PEN))
191d97a5522SBenjamin Tissoires 
192471d1714SBenjamin Tissoires enum {
193471d1714SBenjamin Tissoires 	PENPARTNER = 0,
194471d1714SBenjamin Tissoires 	GRAPHIRE,
195387142bbSBenjamin Tissoires 	GRAPHIRE_BT,
196471d1714SBenjamin Tissoires 	WACOM_G4,
197471d1714SBenjamin Tissoires 	PTU,
198471d1714SBenjamin Tissoires 	PL,
199471d1714SBenjamin Tissoires 	DTU,
200471d1714SBenjamin Tissoires 	DTUS,
201fff00bf8SPing Cheng 	DTUSX,
202471d1714SBenjamin Tissoires 	INTUOS,
203471d1714SBenjamin Tissoires 	INTUOS3S,
204471d1714SBenjamin Tissoires 	INTUOS3,
205471d1714SBenjamin Tissoires 	INTUOS3L,
206471d1714SBenjamin Tissoires 	INTUOS4S,
207471d1714SBenjamin Tissoires 	INTUOS4,
20881af7e61SBenjamin Tissoires 	INTUOS4WL,
209471d1714SBenjamin Tissoires 	INTUOS4L,
210471d1714SBenjamin Tissoires 	INTUOS5S,
211471d1714SBenjamin Tissoires 	INTUOS5,
212471d1714SBenjamin Tissoires 	INTUOS5L,
213471d1714SBenjamin Tissoires 	INTUOSPS,
214471d1714SBenjamin Tissoires 	INTUOSPM,
215471d1714SBenjamin Tissoires 	INTUOSPL,
2164922cd26SJason Gerecke 	INTUOSP2_BT,
217912c6aa6SAaron Armstrong Skomra 	INTUOSP2S_BT,
21887046b6cSAaron Armstrong Skomra 	INTUOSHT3_BT,
219471d1714SBenjamin Tissoires 	WACOM_21UX2,
220471d1714SBenjamin Tissoires 	WACOM_22HD,
221471d1714SBenjamin Tissoires 	DTK,
222471d1714SBenjamin Tissoires 	WACOM_24HD,
223500d4160SPing Cheng 	WACOM_27QHD,
224471d1714SBenjamin Tissoires 	CINTIQ_HYBRID,
225f7acb55cSJason Gerecke 	CINTIQ_COMPANION_2,
226471d1714SBenjamin Tissoires 	CINTIQ,
227471d1714SBenjamin Tissoires 	WACOM_BEE,
228471d1714SBenjamin Tissoires 	WACOM_13HD,
229471d1714SBenjamin Tissoires 	WACOM_MO,
2303b164a00SPing Cheng 	BAMBOO_PEN,
2313b164a00SPing Cheng 	INTUOSHT,
232eda01dabSPing Cheng 	INTUOSHT2,
2333b164a00SPing Cheng 	BAMBOO_TOUCH,
234471d1714SBenjamin Tissoires 	BAMBOO_PT,
235471d1714SBenjamin Tissoires 	WACOM_24HDT,
236500d4160SPing Cheng 	WACOM_27QHDT,
2378c97a765SBenjamin Tissoires 	BAMBOO_PAD,
2387adb91bdSPing Cheng 	WIRELESS,
23972b236d6SAaron Skomra 	REMOTE,
240471d1714SBenjamin Tissoires 	TABLETPC,   /* add new TPC below */
241471d1714SBenjamin Tissoires 	TABLETPCE,
242471d1714SBenjamin Tissoires 	TABLETPC2FG,
243471d1714SBenjamin Tissoires 	MTSCREEN,
244471d1714SBenjamin Tissoires 	MTTPC,
245471d1714SBenjamin Tissoires 	MTTPC_B,
2467704ac93SBenjamin Tissoires 	HID_GENERIC,
2471db1f392SJason Gerecke 	BOOTLOADER,
248471d1714SBenjamin Tissoires 	MAX_TYPE
249471d1714SBenjamin Tissoires };
250471d1714SBenjamin Tissoires 
251471d1714SBenjamin Tissoires struct wacom_features {
252471d1714SBenjamin Tissoires 	const char *name;
253471d1714SBenjamin Tissoires 	int x_max;
254471d1714SBenjamin Tissoires 	int y_max;
255471d1714SBenjamin Tissoires 	int pressure_max;
256471d1714SBenjamin Tissoires 	int distance_max;
257471d1714SBenjamin Tissoires 	int type;
258471d1714SBenjamin Tissoires 	int x_resolution;
259471d1714SBenjamin Tissoires 	int y_resolution;
26070ee06c5SAaron Skomra 	int numbered_buttons;
261e779ef23SJason Gerecke 	int offset_left;
262e779ef23SJason Gerecke 	int offset_right;
263e779ef23SJason Gerecke 	int offset_top;
264e779ef23SJason Gerecke 	int offset_bottom;
265471d1714SBenjamin Tissoires 	int device_type;
266471d1714SBenjamin Tissoires 	int x_phy;
267471d1714SBenjamin Tissoires 	int y_phy;
268471d1714SBenjamin Tissoires 	unsigned unit;
269471d1714SBenjamin Tissoires 	int unitExpo;
270471d1714SBenjamin Tissoires 	int x_fuzz;
271471d1714SBenjamin Tissoires 	int y_fuzz;
272471d1714SBenjamin Tissoires 	int pressure_fuzz;
273471d1714SBenjamin Tissoires 	int distance_fuzz;
274bef7e200SJason Gerecke 	int tilt_fuzz;
275471d1714SBenjamin Tissoires 	unsigned quirks;
276471d1714SBenjamin Tissoires 	unsigned touch_max;
277471d1714SBenjamin Tissoires 	int oVid;
278471d1714SBenjamin Tissoires 	int oPid;
279471d1714SBenjamin Tissoires 	int pktlen;
280471d1714SBenjamin Tissoires 	bool check_for_hid_type;
281471d1714SBenjamin Tissoires 	int hid_type;
282471d1714SBenjamin Tissoires };
283471d1714SBenjamin Tissoires 
284471d1714SBenjamin Tissoires struct wacom_shared {
285471d1714SBenjamin Tissoires 	bool stylus_in_proximity;
286471d1714SBenjamin Tissoires 	bool touch_down;
287471d1714SBenjamin Tissoires 	/* for wireless device to access USB interfaces */
288471d1714SBenjamin Tissoires 	unsigned touch_max;
289471d1714SBenjamin Tissoires 	int type;
290471d1714SBenjamin Tissoires 	struct input_dev *touch_input;
291a97ac104SBenjamin Tissoires 	struct hid_device *pen;
292a97ac104SBenjamin Tissoires 	struct hid_device *touch;
293d2ec58aeSAaron Armstrong Skomra 	bool has_mute_touch_switch;
294d793ff81SPing Cheng 	bool is_touch_on;
295471d1714SBenjamin Tissoires };
296471d1714SBenjamin Tissoires 
2977704ac93SBenjamin Tissoires struct hid_data {
2985ae6e89fSBenjamin Tissoires 	__s16 inputmode;	/* InputMode HID feature, -1 if non-existent */
2995ae6e89fSBenjamin Tissoires 	__s16 inputmode_index;	/* InputMode HID feature index in the report */
30061ce346aSJason Gerecke 	bool sense_state;
3017704ac93SBenjamin Tissoires 	bool inrange_state;
3027704ac93SBenjamin Tissoires 	bool invert_state;
3037704ac93SBenjamin Tissoires 	bool tipswitch;
3049e429d56SJason Gerecke 	bool barrelswitch;
3059e429d56SJason Gerecke 	bool barrelswitch2;
3066d09085bSJoshua-Dickens 	bool barrelswitch3;
30746fc466eSPing Cheng 	bool serialhi;
3087fb0413bSJason Gerecke 	bool confidence;
3095ae6e89fSBenjamin Tissoires 	int x;
3105ae6e89fSBenjamin Tissoires 	int y;
3115ae6e89fSBenjamin Tissoires 	int pressure;
3125ae6e89fSBenjamin Tissoires 	int width;
3135ae6e89fSBenjamin Tissoires 	int height;
3145ae6e89fSBenjamin Tissoires 	int id;
315499522c8SJason Gerecke 	int cc_report;
3161b5d514aSJason Gerecke 	int cc_index;
3171b5d514aSJason Gerecke 	int cc_value_index;
318003f50abSJason Gerecke 	int last_slot_field;
3191b5d514aSJason Gerecke 	int num_expected;
3201b5d514aSJason Gerecke 	int num_received;
32116e45989SJason Gerecke 	int bat_status;
32293aab7faSJason Gerecke 	int battery_capacity;
32393aab7faSJason Gerecke 	int bat_charging;
32493aab7faSJason Gerecke 	int bat_connected;
32593aab7faSJason Gerecke 	int ps_connected;
326ed1fa736SPing Cheng 	bool pad_input_event_flag;
327*f7b4ba5fSJason Gerecke 	int sequence_number;
3289a6c0e28SJason Gerecke 	ktime_t time_delayed;
3297704ac93SBenjamin Tissoires };
3307704ac93SBenjamin Tissoires 
33155ab9b2cSAaron Armstrong Skomra struct wacom_remote_work_data {
332e6f2813aSBenjamin Tissoires 	struct {
333e6f2813aSBenjamin Tissoires 		u32 serial;
334e6f2813aSBenjamin Tissoires 	} remote[WACOM_MAX_REMOTES];
335e6f2813aSBenjamin Tissoires };
336e6f2813aSBenjamin Tissoires 
337471d1714SBenjamin Tissoires struct wacom_wac {
3389956953eSBenjamin Tissoires 	char name[WACOM_NAME_MAX];
3392a6cdbddSJason Gerecke 	char pen_name[WACOM_NAME_MAX];
3402a6cdbddSJason Gerecke 	char touch_name[WACOM_NAME_MAX];
341471d1714SBenjamin Tissoires 	char pad_name[WACOM_NAME_MAX];
342471d1714SBenjamin Tissoires 	unsigned char data[WACOM_PKGLEN_MAX];
343471d1714SBenjamin Tissoires 	int tool[2];
344471d1714SBenjamin Tissoires 	int id[2];
345f85c9dc6SJason Gerecke 	__u64 serial[2];
3465bed0128SJason Gerecke 	bool probe_complete;
347b3bd7ef3SPing Cheng 	bool reporting_data;
348471d1714SBenjamin Tissoires 	struct wacom_features features;
349471d1714SBenjamin Tissoires 	struct wacom_shared *shared;
3502a6cdbddSJason Gerecke 	struct input_dev *pen_input;
3512a6cdbddSJason Gerecke 	struct input_dev *touch_input;
352471d1714SBenjamin Tissoires 	struct input_dev *pad_input;
353179e8e47SJason Gerecke 	struct kfifo_rec_ptr_2 *pen_fifo;
354471d1714SBenjamin Tissoires 	int pid;
355471d1714SBenjamin Tissoires 	int num_contacts_left;
356f81a1295SBenjamin Tissoires 	u8 bt_features;
357f81a1295SBenjamin Tissoires 	u8 bt_high_speed;
358326ea2a9SJason Gerecke 	int mode_report;
359326ea2a9SJason Gerecke 	int mode_value;
3607704ac93SBenjamin Tissoires 	struct hid_data hid_data;
361d2ec58aeSAaron Armstrong Skomra 	bool has_mute_touch_switch;
362dc9dc864SPing Cheng 	bool is_soft_touch_switch;
3634082da80SBenjamin Tissoires 	bool has_mode_change;
3644082da80SBenjamin Tissoires 	bool is_direct_mode;
365b1f466a9SAaron Armstrong Skomra 	bool is_invalid_bt_frame;
366471d1714SBenjamin Tissoires };
367471d1714SBenjamin Tissoires 
368471d1714SBenjamin Tissoires #endif
369