File Index
Files and directories
Sign in
FILE

wacom_wac.h

File preview with syntax highlighting.

linux-6.19.14/drivers/hid/wacom_wac.h C
  1/* SPDX-License-Identifier: GPL-2.0-or-later */
  2
  3#ifndef WACOM_WAC_H
  4#define WACOM_WAC_H
  5
  6#include <linux/types.h>
  7#include <linux/hid.h>
  8#include <linux/kfifo.h>
  9
 10#define WACOM_NAME_MAX		64
 11#define WACOM_MAX_REMOTES	5
 12#define WACOM_STATUS_UNKNOWN	255
 13#define WACOM_REMOTE_BATTERY_TIMEOUT	21000000000ll
 14#define WACOM_AES_BATTERY_TIMEOUT       1800000
 15
 16/* packet length for individual models */
 17#define WACOM_PKGLEN_BBFUN	 9
 18#define WACOM_PKGLEN_TPC1FG	 5
 19#define WACOM_PKGLEN_TPC1FG_B	10
 20#define WACOM_PKGLEN_TPC2FG	14
 21#define WACOM_PKGLEN_BBTOUCH	20
 22#define WACOM_PKGLEN_BBTOUCH3	64
 23#define WACOM_PKGLEN_BBPEN	10
 24#define WACOM_PKGLEN_WIRELESS	32
 25#define WACOM_PKGLEN_PENABLED	 8
 26#define WACOM_PKGLEN_BPAD_TOUCH	32
 27#define WACOM_PKGLEN_BPAD_TOUCH_USB	64
 28
 29/* wacom data size per MT contact */
 30#define WACOM_BYTES_PER_MT_PACKET	11
 31#define WACOM_BYTES_PER_24HDT_PACKET	14
 32#define WACOM_BYTES_PER_QHDTHID_PACKET	 6
 33
 34/* device IDs */
 35#define STYLUS_DEVICE_ID	0x02
 36#define TOUCH_DEVICE_ID		0x03
 37#define CURSOR_DEVICE_ID	0x06
 38#define ERASER_DEVICE_ID	0x0A
 39#define PAD_DEVICE_ID		0x0F
 40
 41/* wacom data packet report IDs */
 42#define WACOM_REPORT_PENABLED		2
 43#define WACOM_REPORT_PENABLED_BT	3
 44#define WACOM_REPORT_INTUOS_ID1		5
 45#define WACOM_REPORT_INTUOS_ID2		6
 46#define WACOM_REPORT_INTUOSPAD		12
 47#define WACOM_REPORT_INTUOS5PAD		3
 48#define WACOM_REPORT_DTUSPAD		21
 49#define WACOM_REPORT_TPC1FG		6
 50#define WACOM_REPORT_TPC2FG		13
 51#define WACOM_REPORT_TPCMT		13
 52#define WACOM_REPORT_TPCMT2		3
 53#define WACOM_REPORT_TPCHID		15
 54#define WACOM_REPORT_CINTIQ		16
 55#define WACOM_REPORT_CINTIQPAD		17
 56#define WACOM_REPORT_TPCST		16
 57#define WACOM_REPORT_DTUS		17
 58#define WACOM_REPORT_TPC1FGE		18
 59#define WACOM_REPORT_24HDT		1
 60#define WACOM_REPORT_WL			128
 61#define WACOM_REPORT_USB		192
 62#define WACOM_REPORT_BPAD_PEN		3
 63#define WACOM_REPORT_BPAD_TOUCH		16
 64#define WACOM_REPORT_DEVICE_LIST	16
 65#define WACOM_REPORT_INTUOS_PEN		16
 66#define WACOM_REPORT_REMOTE		17
 67#define WACOM_REPORT_INTUOSHT2_ID	8
 68
 69/* wacom command report ids */
 70#define WAC_CMD_WL_LED_CONTROL          0x03
 71#define WAC_CMD_LED_CONTROL             0x20
 72#define WAC_CMD_ICON_START              0x21
 73#define WAC_CMD_ICON_XFER               0x23
 74#define WAC_CMD_ICON_BT_XFER            0x26
 75#define WAC_CMD_DELETE_PAIRING          0x20
 76#define WAC_CMD_LED_CONTROL_GENERIC     0x32
 77#define WAC_CMD_UNPAIR_ALL              0xFF
 78#define WAC_CMD_WL_INTUOSP2             0x82
 79
 80/* device quirks */
 81#define WACOM_QUIRK_BBTOUCH_LOWRES	0x0001
 82#define WACOM_QUIRK_SENSE		0x0002
 83#define WACOM_QUIRK_AESPEN		0x0004
 84#define WACOM_QUIRK_BATTERY		0x0008
 85#define WACOM_QUIRK_TOOLSERIAL		0x0010
 86#define WACOM_QUIRK_PEN_BUTTON3	0x0020
 87
 88/* device types */
 89#define WACOM_DEVICETYPE_NONE           0x0000
 90#define WACOM_DEVICETYPE_PEN            0x0001
 91#define WACOM_DEVICETYPE_TOUCH          0x0002
 92#define WACOM_DEVICETYPE_PAD            0x0004
 93#define WACOM_DEVICETYPE_WL_MONITOR     0x0008
 94#define WACOM_DEVICETYPE_DIRECT         0x0010
 95
 96#define WACOM_POWER_SUPPLY_STATUS_AUTO  -1
 97
 98#define WACOM_HID_UP_WACOMDIGITIZER     0xff0d0000
 99#define WACOM_HID_SP_PAD                0x00040000
100#define WACOM_HID_SP_BUTTON             0x00090000
101#define WACOM_HID_SP_DIGITIZER          0x000d0000
102#define WACOM_HID_SP_DIGITIZERINFO      0x00100000
103#define WACOM_HID_WD_DIGITIZER          (WACOM_HID_UP_WACOMDIGITIZER | 0x01)
104#define WACOM_HID_WD_PEN                (WACOM_HID_UP_WACOMDIGITIZER | 0x02)
105#define WACOM_HID_WD_SENSE              (WACOM_HID_UP_WACOMDIGITIZER | 0x36)
106#define WACOM_HID_WD_DIGITIZERFNKEYS    (WACOM_HID_UP_WACOMDIGITIZER | 0x39)
107#define WACOM_HID_WD_SERIALNUMBER       (WACOM_HID_UP_WACOMDIGITIZER | 0x5b)
108#define WACOM_HID_WD_SERIALHI           (WACOM_HID_UP_WACOMDIGITIZER | 0x5c)
109#define WACOM_HID_WD_BARRELSWITCH3      (WACOM_HID_UP_WACOMDIGITIZER | 0x5d)
110#define WACOM_HID_WD_TOOLTYPE           (WACOM_HID_UP_WACOMDIGITIZER | 0x77)
111#define WACOM_HID_WD_DISTANCE           (WACOM_HID_UP_WACOMDIGITIZER | 0x0132)
112#define WACOM_HID_WD_TOUCHSTRIP         (WACOM_HID_UP_WACOMDIGITIZER | 0x0136)
113#define WACOM_HID_WD_TOUCHSTRIP2        (WACOM_HID_UP_WACOMDIGITIZER | 0x0137)
114#define WACOM_HID_WD_TOUCHRING          (WACOM_HID_UP_WACOMDIGITIZER | 0x0138)
115#define WACOM_HID_WD_TOUCHRINGSTATUS    (WACOM_HID_UP_WACOMDIGITIZER | 0x0139)
116#define WACOM_HID_WD_REPORT_VALID       (WACOM_HID_UP_WACOMDIGITIZER | 0x01d0)
117#define WACOM_HID_WD_SEQUENCENUMBER     (WACOM_HID_UP_WACOMDIGITIZER | 0x0220)
118#define WACOM_HID_WD_ACCELEROMETER_X    (WACOM_HID_UP_WACOMDIGITIZER | 0x0401)
119#define WACOM_HID_WD_ACCELEROMETER_Y    (WACOM_HID_UP_WACOMDIGITIZER | 0x0402)
120#define WACOM_HID_WD_ACCELEROMETER_Z    (WACOM_HID_UP_WACOMDIGITIZER | 0x0403)
121#define WACOM_HID_WD_BATTERY_CHARGING   (WACOM_HID_UP_WACOMDIGITIZER | 0x0404)
122#define WACOM_HID_WD_TOUCHONOFF         (WACOM_HID_UP_WACOMDIGITIZER | 0x0454)
123#define WACOM_HID_WD_BATTERY_LEVEL      (WACOM_HID_UP_WACOMDIGITIZER | 0x043b)
124#define WACOM_HID_WD_EXPRESSKEY00       (WACOM_HID_UP_WACOMDIGITIZER | 0x0910)
125#define WACOM_HID_WD_EXPRESSKEYCAP00    (WACOM_HID_UP_WACOMDIGITIZER | 0x0940)
126#define WACOM_HID_WD_MODE_CHANGE        (WACOM_HID_UP_WACOMDIGITIZER | 0x0980)
127#define WACOM_HID_WD_MUTE_DEVICE        (WACOM_HID_UP_WACOMDIGITIZER | 0x0981)
128#define WACOM_HID_WD_CONTROLPANEL       (WACOM_HID_UP_WACOMDIGITIZER | 0x0982)
129#define WACOM_HID_WD_ONSCREEN_KEYBOARD  (WACOM_HID_UP_WACOMDIGITIZER | 0x0983)
130#define WACOM_HID_WD_BUTTONCONFIG       (WACOM_HID_UP_WACOMDIGITIZER | 0x0986)
131#define WACOM_HID_WD_BUTTONHOME         (WACOM_HID_UP_WACOMDIGITIZER | 0x0990)
132#define WACOM_HID_WD_BUTTONUP           (WACOM_HID_UP_WACOMDIGITIZER | 0x0991)
133#define WACOM_HID_WD_BUTTONDOWN         (WACOM_HID_UP_WACOMDIGITIZER | 0x0992)
134#define WACOM_HID_WD_BUTTONLEFT         (WACOM_HID_UP_WACOMDIGITIZER | 0x0993)
135#define WACOM_HID_WD_BUTTONRIGHT        (WACOM_HID_UP_WACOMDIGITIZER | 0x0994)
136#define WACOM_HID_WD_BUTTONCENTER       (WACOM_HID_UP_WACOMDIGITIZER | 0x0995)
137#define WACOM_HID_WD_FINGERWHEEL        (WACOM_HID_UP_WACOMDIGITIZER | 0x0d03)
138#define WACOM_HID_WD_OFFSETLEFT         (WACOM_HID_UP_WACOMDIGITIZER | 0x0d30)
139#define WACOM_HID_WD_OFFSETTOP          (WACOM_HID_UP_WACOMDIGITIZER | 0x0d31)
140#define WACOM_HID_WD_OFFSETRIGHT        (WACOM_HID_UP_WACOMDIGITIZER | 0x0d32)
141#define WACOM_HID_WD_OFFSETBOTTOM       (WACOM_HID_UP_WACOMDIGITIZER | 0x0d33)
142#define WACOM_HID_WD_DATAMODE           (WACOM_HID_UP_WACOMDIGITIZER | 0x1002)
143#define WACOM_HID_WD_DIGITIZERINFO      (WACOM_HID_UP_WACOMDIGITIZER | 0x1013)
144#define WACOM_HID_WD_TOUCH_RING_SETTING (WACOM_HID_UP_WACOMDIGITIZER | 0x1032)
145#define WACOM_HID_UP_G9                 0xff090000
146#define WACOM_HID_G9_PEN                (WACOM_HID_UP_G9 | 0x02)
147#define WACOM_HID_G9_TOUCHSCREEN        (WACOM_HID_UP_G9 | 0x11)
148#define WACOM_HID_UP_G11                0xff110000
149#define WACOM_HID_G11_PEN               (WACOM_HID_UP_G11 | 0x02)
150#define WACOM_HID_G11_TOUCHSCREEN       (WACOM_HID_UP_G11 | 0x11)
151#define WACOM_HID_UP_WACOMTOUCH         0xff000000
152#define WACOM_HID_WT_TOUCHSCREEN        (WACOM_HID_UP_WACOMTOUCH | 0x04)
153#define WACOM_HID_WT_TOUCHPAD           (WACOM_HID_UP_WACOMTOUCH | 0x05)
154#define WACOM_HID_WT_CONTACTMAX         (WACOM_HID_UP_WACOMTOUCH | 0x55)
155#define WACOM_HID_WT_SERIALNUMBER       (WACOM_HID_UP_WACOMTOUCH | 0x5b)
156#define WACOM_HID_WT_X                  (WACOM_HID_UP_WACOMTOUCH | 0x130)
157#define WACOM_HID_WT_Y                  (WACOM_HID_UP_WACOMTOUCH | 0x131)
158#define WACOM_HID_WT_REPORT_VALID       (WACOM_HID_UP_WACOMTOUCH | 0x1d0)
159
160#define WACOM_BATTERY_USAGE(f)	(((f)->hid == HID_DG_BATTERYSTRENGTH) || \
161				 ((f)->hid == WACOM_HID_WD_BATTERY_CHARGING) || \
162				 ((f)->hid == WACOM_HID_WD_BATTERY_LEVEL))
163
164#define WACOM_PAD_FIELD(f)	(((f)->physical == HID_DG_TABLETFUNCTIONKEY) || \
165				 ((f)->physical == WACOM_HID_WD_DIGITIZERFNKEYS) || \
166				 ((f)->physical == WACOM_HID_WD_DIGITIZERINFO))
167
168#define WACOM_PEN_FIELD(f)	(((f)->logical == HID_DG_STYLUS) || \
169				 ((f)->physical == HID_DG_STYLUS) || \
170				 ((f)->physical == HID_DG_PEN) || \
171				 ((f)->application == HID_DG_PEN) || \
172				 ((f)->application == HID_DG_DIGITIZER) || \
173				 ((f)->application == WACOM_HID_WD_PEN) || \
174				 ((f)->application == WACOM_HID_WD_DIGITIZER) || \
175				 ((f)->application == WACOM_HID_G9_PEN) || \
176				 ((f)->application == WACOM_HID_G11_PEN))
177#define WACOM_FINGER_FIELD(f)	(((f)->logical == HID_DG_FINGER) || \
178				 ((f)->physical == HID_DG_FINGER) || \
179				 ((f)->application == HID_DG_TOUCHSCREEN) || \
180				 ((f)->application == WACOM_HID_G9_TOUCHSCREEN) || \
181				 ((f)->application == WACOM_HID_G11_TOUCHSCREEN) || \
182				 ((f)->application == WACOM_HID_WT_TOUCHPAD) || \
183				 ((f)->application == HID_DG_TOUCHPAD))
184
185#define WACOM_DIRECT_DEVICE(f)	(((f)->application == HID_DG_TOUCHSCREEN) || \
186				 ((f)->application == WACOM_HID_WT_TOUCHSCREEN) || \
187				 ((f)->application == HID_DG_PEN) || \
188				 ((f)->application == WACOM_HID_WD_PEN))
189
190enum {
191	PENPARTNER = 0,
192	GRAPHIRE,
193	GRAPHIRE_BT,
194	WACOM_G4,
195	PTU,
196	PL,
197	DTU,
198	DTUS,
199	DTUSX,
200	INTUOS,
201	INTUOS3S,
202	INTUOS3,
203	INTUOS3L,
204	INTUOS4S,
205	INTUOS4,
206	INTUOS4WL,
207	INTUOS4L,
208	INTUOS5S,
209	INTUOS5,
210	INTUOS5L,
211	INTUOSPS,
212	INTUOSPM,
213	INTUOSPL,
214	INTUOSP2_BT,
215	INTUOSP2S_BT,
216	INTUOSHT3_BT,
217	WACOM_21UX2,
218	WACOM_22HD,
219	DTK,
220	WACOM_24HD,
221	WACOM_27QHD,
222	CINTIQ_HYBRID,
223	CINTIQ_COMPANION_2,
224	CINTIQ,
225	WACOM_BEE,
226	WACOM_13HD,
227	WACOM_MO,
228	BAMBOO_PEN,
229	INTUOSHT,
230	INTUOSHT2,
231	BAMBOO_TOUCH,
232	BAMBOO_PT,
233	WACOM_24HDT,
234	WACOM_27QHDT,
235	BAMBOO_PAD,
236	WIRELESS,
237	REMOTE,
238	TABLETPC,   /* add new TPC below */
239	TABLETPCE,
240	TABLETPC2FG,
241	MTSCREEN,
242	MTTPC,
243	MTTPC_B,
244	HID_GENERIC,
245	BOOTLOADER,
246	MAX_TYPE
247};
248
249struct wacom_features {
250	const char *name;
251	int x_max;
252	int y_max;
253	int pressure_max;
254	int distance_max;
255	int type;
256	int x_resolution;
257	int y_resolution;
258	int numbered_buttons;
259	int offset_left;
260	int offset_right;
261	int offset_top;
262	int offset_bottom;
263	int device_type;
264	int x_phy;
265	int y_phy;
266	unsigned unit;
267	int unitExpo;
268	int x_fuzz;
269	int y_fuzz;
270	int pressure_fuzz;
271	int distance_fuzz;
272	int tilt_fuzz;
273	unsigned quirks;
274	unsigned touch_max;
275	int oVid;
276	int oPid;
277	unsigned int pktlen;
278	bool check_for_hid_type;
279	int hid_type;
280};
281
282struct wacom_shared {
283	bool stylus_in_proximity;
284	bool touch_down;
285	/* for wireless device to access USB interfaces */
286	unsigned touch_max;
287	int type;
288	struct input_dev *touch_input;
289	struct hid_device *pen;
290	struct hid_device *touch;
291	bool has_mute_touch_switch;
292	bool is_touch_on;
293};
294
295struct hid_data {
296	__s16 inputmode;	/* InputMode HID feature, -1 if non-existent */
297	__s16 inputmode_index;	/* InputMode HID feature index in the report */
298	bool sense_state;
299	bool inrange_state;
300	bool eraser;
301	bool tipswitch;
302	bool barrelswitch;
303	bool barrelswitch2;
304	bool barrelswitch3;
305	bool serialhi;
306	bool confidence;
307	int x;
308	int y;
309	int width;
310	int height;
311	int id;
312	int ring_value;
313	int ring2_value;
314	int cc_report;
315	int cc_index;
316	int cc_value_index;
317	int last_slot_field;
318	int num_expected;
319	int num_received;
320	int bat_status;
321	int battery_capacity;
322	int bat_charging;
323	int bat_connected;
324	int ps_connected;
325	bool pad_input_event_flag;
326	int sequence_number;
327	ktime_t time_delayed;
328};
329
330struct wacom_remote_work_data {
331	struct {
332		u32 serial;
333	} remote[WACOM_MAX_REMOTES];
334};
335
336struct wacom_wac {
337	char name[WACOM_NAME_MAX];
338	char pen_name[WACOM_NAME_MAX];
339	char touch_name[WACOM_NAME_MAX];
340	char pad_name[WACOM_NAME_MAX];
341	u8 *data;
342	int tool[2];
343	int id[2];
344	__u64 serial[2];
345	bool probe_complete;
346	bool reporting_data;
347	struct wacom_features features;
348	struct wacom_shared *shared;
349	struct input_dev *pen_input;
350	struct input_dev *touch_input;
351	struct input_dev *pad_input;
352	struct kfifo_rec_ptr_2 *pen_fifo;
353	int pid;
354	int num_contacts_left;
355	u8 bt_features;
356	u8 bt_high_speed;
357	u8 absring_count;
358	u8 relring_count;
359	int mode_report;
360	int mode_value;
361	struct hid_data hid_data;
362	bool has_mute_touch_switch;
363	bool is_soft_touch_switch;
364	bool has_mode_change;
365	bool is_direct_mode;
366	bool is_invalid_bt_frame;
367};
368
369#endif
~/ Read-only file preview.