373 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2 3#ifndef WACOM_WAC_H4#define WACOM_WAC_H5 6#include <linux/types.h>7#include <linux/hid.h>8#include <linux/kfifo.h>9 10/* maximum packet length for USB/BT devices */11#define WACOM_PKGLEN_MAX 36112 13#define WACOM_NAME_MAX 6414#define WACOM_MAX_REMOTES 515#define WACOM_STATUS_UNKNOWN 25516#define WACOM_REMOTE_BATTERY_TIMEOUT 21000000000ll17#define WACOM_AES_BATTERY_TIMEOUT 180000018 19/* packet length for individual models */20#define WACOM_PKGLEN_BBFUN 921#define WACOM_PKGLEN_TPC1FG 522#define WACOM_PKGLEN_TPC1FG_B 1023#define WACOM_PKGLEN_TPC2FG 1424#define WACOM_PKGLEN_BBTOUCH 2025#define WACOM_PKGLEN_BBTOUCH3 6426#define WACOM_PKGLEN_BBPEN 1027#define WACOM_PKGLEN_WIRELESS 3228#define WACOM_PKGLEN_PENABLED 829#define WACOM_PKGLEN_BPAD_TOUCH 3230#define WACOM_PKGLEN_BPAD_TOUCH_USB 6431 32/* wacom data size per MT contact */33#define WACOM_BYTES_PER_MT_PACKET 1134#define WACOM_BYTES_PER_24HDT_PACKET 1435#define WACOM_BYTES_PER_QHDTHID_PACKET 636 37/* device IDs */38#define STYLUS_DEVICE_ID 0x0239#define TOUCH_DEVICE_ID 0x0340#define CURSOR_DEVICE_ID 0x0641#define ERASER_DEVICE_ID 0x0A42#define PAD_DEVICE_ID 0x0F43 44/* wacom data packet report IDs */45#define WACOM_REPORT_PENABLED 246#define WACOM_REPORT_PENABLED_BT 347#define WACOM_REPORT_INTUOS_ID1 548#define WACOM_REPORT_INTUOS_ID2 649#define WACOM_REPORT_INTUOSPAD 1250#define WACOM_REPORT_INTUOS5PAD 351#define WACOM_REPORT_DTUSPAD 2152#define WACOM_REPORT_TPC1FG 653#define WACOM_REPORT_TPC2FG 1354#define WACOM_REPORT_TPCMT 1355#define WACOM_REPORT_TPCMT2 356#define WACOM_REPORT_TPCHID 1557#define WACOM_REPORT_CINTIQ 1658#define WACOM_REPORT_CINTIQPAD 1759#define WACOM_REPORT_TPCST 1660#define WACOM_REPORT_DTUS 1761#define WACOM_REPORT_TPC1FGE 1862#define WACOM_REPORT_24HDT 163#define WACOM_REPORT_WL 12864#define WACOM_REPORT_USB 19265#define WACOM_REPORT_BPAD_PEN 366#define WACOM_REPORT_BPAD_TOUCH 1667#define WACOM_REPORT_DEVICE_LIST 1668#define WACOM_REPORT_INTUOS_PEN 1669#define WACOM_REPORT_REMOTE 1770#define WACOM_REPORT_INTUOSHT2_ID 871 72/* wacom command report ids */73#define WAC_CMD_WL_LED_CONTROL 0x0374#define WAC_CMD_LED_CONTROL 0x2075#define WAC_CMD_ICON_START 0x2176#define WAC_CMD_ICON_XFER 0x2377#define WAC_CMD_ICON_BT_XFER 0x2678#define WAC_CMD_DELETE_PAIRING 0x2079#define WAC_CMD_LED_CONTROL_GENERIC 0x3280#define WAC_CMD_UNPAIR_ALL 0xFF81#define WAC_CMD_WL_INTUOSP2 0x8282 83/* device quirks */84#define WACOM_QUIRK_BBTOUCH_LOWRES 0x000185#define WACOM_QUIRK_SENSE 0x000286#define WACOM_QUIRK_AESPEN 0x000487#define WACOM_QUIRK_BATTERY 0x000888#define WACOM_QUIRK_TOOLSERIAL 0x001089#define WACOM_QUIRK_PEN_BUTTON3 0x002090 91/* device types */92#define WACOM_DEVICETYPE_NONE 0x000093#define WACOM_DEVICETYPE_PEN 0x000194#define WACOM_DEVICETYPE_TOUCH 0x000295#define WACOM_DEVICETYPE_PAD 0x000496#define WACOM_DEVICETYPE_WL_MONITOR 0x000897#define WACOM_DEVICETYPE_DIRECT 0x001098 99#define WACOM_POWER_SUPPLY_STATUS_AUTO -1100 101#define WACOM_HID_UP_WACOMDIGITIZER 0xff0d0000102#define WACOM_HID_SP_PAD 0x00040000103#define WACOM_HID_SP_BUTTON 0x00090000104#define WACOM_HID_SP_DIGITIZER 0x000d0000105#define WACOM_HID_SP_DIGITIZERINFO 0x00100000106#define WACOM_HID_WD_DIGITIZER (WACOM_HID_UP_WACOMDIGITIZER | 0x01)107#define WACOM_HID_WD_PEN (WACOM_HID_UP_WACOMDIGITIZER | 0x02)108#define WACOM_HID_WD_SENSE (WACOM_HID_UP_WACOMDIGITIZER | 0x36)109#define WACOM_HID_WD_DIGITIZERFNKEYS (WACOM_HID_UP_WACOMDIGITIZER | 0x39)110#define WACOM_HID_WD_SERIALNUMBER (WACOM_HID_UP_WACOMDIGITIZER | 0x5b)111#define WACOM_HID_WD_SERIALHI (WACOM_HID_UP_WACOMDIGITIZER | 0x5c)112#define WACOM_HID_WD_BARRELSWITCH3 (WACOM_HID_UP_WACOMDIGITIZER | 0x5d)113#define WACOM_HID_WD_TOOLTYPE (WACOM_HID_UP_WACOMDIGITIZER | 0x77)114#define WACOM_HID_WD_DISTANCE (WACOM_HID_UP_WACOMDIGITIZER | 0x0132)115#define WACOM_HID_WD_TOUCHSTRIP (WACOM_HID_UP_WACOMDIGITIZER | 0x0136)116#define WACOM_HID_WD_TOUCHSTRIP2 (WACOM_HID_UP_WACOMDIGITIZER | 0x0137)117#define WACOM_HID_WD_TOUCHRING (WACOM_HID_UP_WACOMDIGITIZER | 0x0138)118#define WACOM_HID_WD_TOUCHRINGSTATUS (WACOM_HID_UP_WACOMDIGITIZER | 0x0139)119#define WACOM_HID_WD_REPORT_VALID (WACOM_HID_UP_WACOMDIGITIZER | 0x01d0)120#define WACOM_HID_WD_SEQUENCENUMBER (WACOM_HID_UP_WACOMDIGITIZER | 0x0220)121#define WACOM_HID_WD_ACCELEROMETER_X (WACOM_HID_UP_WACOMDIGITIZER | 0x0401)122#define WACOM_HID_WD_ACCELEROMETER_Y (WACOM_HID_UP_WACOMDIGITIZER | 0x0402)123#define WACOM_HID_WD_ACCELEROMETER_Z (WACOM_HID_UP_WACOMDIGITIZER | 0x0403)124#define WACOM_HID_WD_BATTERY_CHARGING (WACOM_HID_UP_WACOMDIGITIZER | 0x0404)125#define WACOM_HID_WD_TOUCHONOFF (WACOM_HID_UP_WACOMDIGITIZER | 0x0454)126#define WACOM_HID_WD_BATTERY_LEVEL (WACOM_HID_UP_WACOMDIGITIZER | 0x043b)127#define WACOM_HID_WD_EXPRESSKEY00 (WACOM_HID_UP_WACOMDIGITIZER | 0x0910)128#define WACOM_HID_WD_EXPRESSKEYCAP00 (WACOM_HID_UP_WACOMDIGITIZER | 0x0940)129#define WACOM_HID_WD_MODE_CHANGE (WACOM_HID_UP_WACOMDIGITIZER | 0x0980)130#define WACOM_HID_WD_MUTE_DEVICE (WACOM_HID_UP_WACOMDIGITIZER | 0x0981)131#define WACOM_HID_WD_CONTROLPANEL (WACOM_HID_UP_WACOMDIGITIZER | 0x0982)132#define WACOM_HID_WD_ONSCREEN_KEYBOARD (WACOM_HID_UP_WACOMDIGITIZER | 0x0983)133#define WACOM_HID_WD_BUTTONCONFIG (WACOM_HID_UP_WACOMDIGITIZER | 0x0986)134#define WACOM_HID_WD_BUTTONHOME (WACOM_HID_UP_WACOMDIGITIZER | 0x0990)135#define WACOM_HID_WD_BUTTONUP (WACOM_HID_UP_WACOMDIGITIZER | 0x0991)136#define WACOM_HID_WD_BUTTONDOWN (WACOM_HID_UP_WACOMDIGITIZER | 0x0992)137#define WACOM_HID_WD_BUTTONLEFT (WACOM_HID_UP_WACOMDIGITIZER | 0x0993)138#define WACOM_HID_WD_BUTTONRIGHT (WACOM_HID_UP_WACOMDIGITIZER | 0x0994)139#define WACOM_HID_WD_BUTTONCENTER (WACOM_HID_UP_WACOMDIGITIZER | 0x0995)140#define WACOM_HID_WD_FINGERWHEEL (WACOM_HID_UP_WACOMDIGITIZER | 0x0d03)141#define WACOM_HID_WD_OFFSETLEFT (WACOM_HID_UP_WACOMDIGITIZER | 0x0d30)142#define WACOM_HID_WD_OFFSETTOP (WACOM_HID_UP_WACOMDIGITIZER | 0x0d31)143#define WACOM_HID_WD_OFFSETRIGHT (WACOM_HID_UP_WACOMDIGITIZER | 0x0d32)144#define WACOM_HID_WD_OFFSETBOTTOM (WACOM_HID_UP_WACOMDIGITIZER | 0x0d33)145#define WACOM_HID_WD_DATAMODE (WACOM_HID_UP_WACOMDIGITIZER | 0x1002)146#define WACOM_HID_WD_DIGITIZERINFO (WACOM_HID_UP_WACOMDIGITIZER | 0x1013)147#define WACOM_HID_WD_TOUCH_RING_SETTING (WACOM_HID_UP_WACOMDIGITIZER | 0x1032)148#define WACOM_HID_UP_G9 0xff090000149#define WACOM_HID_G9_PEN (WACOM_HID_UP_G9 | 0x02)150#define WACOM_HID_G9_TOUCHSCREEN (WACOM_HID_UP_G9 | 0x11)151#define WACOM_HID_UP_G11 0xff110000152#define WACOM_HID_G11_PEN (WACOM_HID_UP_G11 | 0x02)153#define WACOM_HID_G11_TOUCHSCREEN (WACOM_HID_UP_G11 | 0x11)154#define WACOM_HID_UP_WACOMTOUCH 0xff000000155#define WACOM_HID_WT_TOUCHSCREEN (WACOM_HID_UP_WACOMTOUCH | 0x04)156#define WACOM_HID_WT_TOUCHPAD (WACOM_HID_UP_WACOMTOUCH | 0x05)157#define WACOM_HID_WT_CONTACTMAX (WACOM_HID_UP_WACOMTOUCH | 0x55)158#define WACOM_HID_WT_SERIALNUMBER (WACOM_HID_UP_WACOMTOUCH | 0x5b)159#define WACOM_HID_WT_X (WACOM_HID_UP_WACOMTOUCH | 0x130)160#define WACOM_HID_WT_Y (WACOM_HID_UP_WACOMTOUCH | 0x131)161#define WACOM_HID_WT_REPORT_VALID (WACOM_HID_UP_WACOMTOUCH | 0x1d0)162 163#define WACOM_BATTERY_USAGE(f) (((f)->hid == HID_DG_BATTERYSTRENGTH) || \164 ((f)->hid == WACOM_HID_WD_BATTERY_CHARGING) || \165 ((f)->hid == WACOM_HID_WD_BATTERY_LEVEL))166 167#define WACOM_PAD_FIELD(f) (((f)->physical == HID_DG_TABLETFUNCTIONKEY) || \168 ((f)->physical == WACOM_HID_WD_DIGITIZERFNKEYS) || \169 ((f)->physical == WACOM_HID_WD_DIGITIZERINFO))170 171#define WACOM_PEN_FIELD(f) (((f)->logical == HID_DG_STYLUS) || \172 ((f)->physical == HID_DG_STYLUS) || \173 ((f)->physical == HID_DG_PEN) || \174 ((f)->application == HID_DG_PEN) || \175 ((f)->application == HID_DG_DIGITIZER) || \176 ((f)->application == WACOM_HID_WD_PEN) || \177 ((f)->application == WACOM_HID_WD_DIGITIZER) || \178 ((f)->application == WACOM_HID_G9_PEN) || \179 ((f)->application == WACOM_HID_G11_PEN))180#define WACOM_FINGER_FIELD(f) (((f)->logical == HID_DG_FINGER) || \181 ((f)->physical == HID_DG_FINGER) || \182 ((f)->application == HID_DG_TOUCHSCREEN) || \183 ((f)->application == WACOM_HID_G9_TOUCHSCREEN) || \184 ((f)->application == WACOM_HID_G11_TOUCHSCREEN) || \185 ((f)->application == WACOM_HID_WT_TOUCHPAD) || \186 ((f)->application == HID_DG_TOUCHPAD))187 188#define WACOM_DIRECT_DEVICE(f) (((f)->application == HID_DG_TOUCHSCREEN) || \189 ((f)->application == WACOM_HID_WT_TOUCHSCREEN) || \190 ((f)->application == HID_DG_PEN) || \191 ((f)->application == WACOM_HID_WD_PEN))192 193enum {194 PENPARTNER = 0,195 GRAPHIRE,196 GRAPHIRE_BT,197 WACOM_G4,198 PTU,199 PL,200 DTU,201 DTUS,202 DTUSX,203 INTUOS,204 INTUOS3S,205 INTUOS3,206 INTUOS3L,207 INTUOS4S,208 INTUOS4,209 INTUOS4WL,210 INTUOS4L,211 INTUOS5S,212 INTUOS5,213 INTUOS5L,214 INTUOSPS,215 INTUOSPM,216 INTUOSPL,217 INTUOSP2_BT,218 INTUOSP2S_BT,219 INTUOSHT3_BT,220 WACOM_21UX2,221 WACOM_22HD,222 DTK,223 WACOM_24HD,224 WACOM_27QHD,225 CINTIQ_HYBRID,226 CINTIQ_COMPANION_2,227 CINTIQ,228 WACOM_BEE,229 WACOM_13HD,230 WACOM_MO,231 BAMBOO_PEN,232 INTUOSHT,233 INTUOSHT2,234 BAMBOO_TOUCH,235 BAMBOO_PT,236 WACOM_24HDT,237 WACOM_27QHDT,238 BAMBOO_PAD,239 WIRELESS,240 REMOTE,241 TABLETPC, /* add new TPC below */242 TABLETPCE,243 TABLETPC2FG,244 MTSCREEN,245 MTTPC,246 MTTPC_B,247 HID_GENERIC,248 BOOTLOADER,249 MAX_TYPE250};251 252struct wacom_features {253 const char *name;254 int x_max;255 int y_max;256 int pressure_max;257 int distance_max;258 int type;259 int x_resolution;260 int y_resolution;261 int numbered_buttons;262 int offset_left;263 int offset_right;264 int offset_top;265 int offset_bottom;266 int device_type;267 int x_phy;268 int y_phy;269 unsigned unit;270 int unitExpo;271 int x_fuzz;272 int y_fuzz;273 int pressure_fuzz;274 int distance_fuzz;275 int tilt_fuzz;276 unsigned quirks;277 unsigned touch_max;278 int oVid;279 int oPid;280 int pktlen;281 bool check_for_hid_type;282 int hid_type;283};284 285struct wacom_shared {286 bool stylus_in_proximity;287 bool touch_down;288 /* for wireless device to access USB interfaces */289 unsigned touch_max;290 int type;291 struct input_dev *touch_input;292 struct hid_device *pen;293 struct hid_device *touch;294 bool has_mute_touch_switch;295 bool is_touch_on;296};297 298struct hid_data {299 __s16 inputmode; /* InputMode HID feature, -1 if non-existent */300 __s16 inputmode_index; /* InputMode HID feature index in the report */301 bool sense_state;302 bool inrange_state;303 bool invert_state;304 bool tipswitch;305 bool barrelswitch;306 bool barrelswitch2;307 bool barrelswitch3;308 bool serialhi;309 bool confidence;310 int x;311 int y;312 int width;313 int height;314 int id;315 int ring_value;316 int ring2_value;317 int cc_report;318 int cc_index;319 int cc_value_index;320 int last_slot_field;321 int num_expected;322 int num_received;323 int bat_status;324 int battery_capacity;325 int bat_charging;326 int bat_connected;327 int ps_connected;328 bool pad_input_event_flag;329 int sequence_number;330 ktime_t time_delayed;331};332 333struct wacom_remote_work_data {334 struct {335 u32 serial;336 } remote[WACOM_MAX_REMOTES];337};338 339struct wacom_wac {340 char name[WACOM_NAME_MAX];341 char pen_name[WACOM_NAME_MAX];342 char touch_name[WACOM_NAME_MAX];343 char pad_name[WACOM_NAME_MAX];344 unsigned char data[WACOM_PKGLEN_MAX];345 int tool[2];346 int id[2];347 __u64 serial[2];348 bool probe_complete;349 bool reporting_data;350 struct wacom_features features;351 struct wacom_shared *shared;352 struct input_dev *pen_input;353 struct input_dev *touch_input;354 struct input_dev *pad_input;355 struct kfifo_rec_ptr_2 *pen_fifo;356 int pid;357 int num_contacts_left;358 u8 bt_features;359 u8 bt_high_speed;360 u8 absring_count;361 u8 relring_count;362 int mode_report;363 int mode_value;364 struct hid_data hid_data;365 bool has_mute_touch_switch;366 bool is_soft_touch_switch;367 bool has_mode_change;368 bool is_direct_mode;369 bool is_invalid_bt_frame;370};371 372#endif373