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