Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * drivers/input/tablet/wacom_wac.h
0004  */
0005 #ifndef WACOM_WAC_H
0006 #define WACOM_WAC_H
0007 
0008 #include <linux/types.h>
0009 #include <linux/hid.h>
0010 #include <linux/kfifo.h>
0011 
0012 /* maximum packet length for USB/BT devices */
0013 #define WACOM_PKGLEN_MAX    361
0014 
0015 #define WACOM_NAME_MAX      64
0016 #define WACOM_MAX_REMOTES   5
0017 #define WACOM_STATUS_UNKNOWN    255
0018 
0019 /* packet length for individual models */
0020 #define WACOM_PKGLEN_BBFUN   9
0021 #define WACOM_PKGLEN_TPC1FG  5
0022 #define WACOM_PKGLEN_TPC1FG_B   10
0023 #define WACOM_PKGLEN_TPC2FG 14
0024 #define WACOM_PKGLEN_BBTOUCH    20
0025 #define WACOM_PKGLEN_BBTOUCH3   64
0026 #define WACOM_PKGLEN_BBPEN  10
0027 #define WACOM_PKGLEN_WIRELESS   32
0028 #define WACOM_PKGLEN_PENABLED    8
0029 #define WACOM_PKGLEN_BPAD_TOUCH 32
0030 #define WACOM_PKGLEN_BPAD_TOUCH_USB 64
0031 
0032 /* wacom data size per MT contact */
0033 #define WACOM_BYTES_PER_MT_PACKET   11
0034 #define WACOM_BYTES_PER_24HDT_PACKET    14
0035 #define WACOM_BYTES_PER_QHDTHID_PACKET   6
0036 
0037 /* device IDs */
0038 #define STYLUS_DEVICE_ID    0x02
0039 #define TOUCH_DEVICE_ID     0x03
0040 #define CURSOR_DEVICE_ID    0x06
0041 #define ERASER_DEVICE_ID    0x0A
0042 #define PAD_DEVICE_ID       0x0F
0043 
0044 /* wacom data packet report IDs */
0045 #define WACOM_REPORT_PENABLED       2
0046 #define WACOM_REPORT_PENABLED_BT    3
0047 #define WACOM_REPORT_INTUOS_ID1     5
0048 #define WACOM_REPORT_INTUOS_ID2     6
0049 #define WACOM_REPORT_INTUOSPAD      12
0050 #define WACOM_REPORT_INTUOS5PAD     3
0051 #define WACOM_REPORT_DTUSPAD        21
0052 #define WACOM_REPORT_TPC1FG     6
0053 #define WACOM_REPORT_TPC2FG     13
0054 #define WACOM_REPORT_TPCMT      13
0055 #define WACOM_REPORT_TPCMT2     3
0056 #define WACOM_REPORT_TPCHID     15
0057 #define WACOM_REPORT_CINTIQ     16
0058 #define WACOM_REPORT_CINTIQPAD      17
0059 #define WACOM_REPORT_TPCST      16
0060 #define WACOM_REPORT_DTUS       17
0061 #define WACOM_REPORT_TPC1FGE        18
0062 #define WACOM_REPORT_24HDT      1
0063 #define WACOM_REPORT_WL         128
0064 #define WACOM_REPORT_USB        192
0065 #define WACOM_REPORT_BPAD_PEN       3
0066 #define WACOM_REPORT_BPAD_TOUCH     16
0067 #define WACOM_REPORT_DEVICE_LIST    16
0068 #define WACOM_REPORT_INTUOS_PEN     16
0069 #define WACOM_REPORT_REMOTE     17
0070 #define WACOM_REPORT_INTUOSHT2_ID   8
0071 
0072 /* wacom command report ids */
0073 #define WAC_CMD_WL_LED_CONTROL          0x03
0074 #define WAC_CMD_LED_CONTROL             0x20
0075 #define WAC_CMD_ICON_START              0x21
0076 #define WAC_CMD_ICON_XFER               0x23
0077 #define WAC_CMD_ICON_BT_XFER            0x26
0078 #define WAC_CMD_DELETE_PAIRING          0x20
0079 #define WAC_CMD_LED_CONTROL_GENERIC     0x32
0080 #define WAC_CMD_UNPAIR_ALL              0xFF
0081 #define WAC_CMD_WL_INTUOSP2             0x82
0082 
0083 /* device quirks */
0084 #define WACOM_QUIRK_BBTOUCH_LOWRES  0x0001
0085 #define WACOM_QUIRK_SENSE       0x0002
0086 #define WACOM_QUIRK_AESPEN      0x0004
0087 #define WACOM_QUIRK_BATTERY     0x0008
0088 #define WACOM_QUIRK_TOOLSERIAL      0x0010
0089 #define WACOM_QUIRK_PEN_BUTTON3 0x0020
0090 
0091 /* device types */
0092 #define WACOM_DEVICETYPE_NONE           0x0000
0093 #define WACOM_DEVICETYPE_PEN            0x0001
0094 #define WACOM_DEVICETYPE_TOUCH          0x0002
0095 #define WACOM_DEVICETYPE_PAD            0x0004
0096 #define WACOM_DEVICETYPE_WL_MONITOR     0x0008
0097 #define WACOM_DEVICETYPE_DIRECT         0x0010
0098 
0099 #define WACOM_POWER_SUPPLY_STATUS_AUTO  -1
0100 
0101 #define WACOM_HID_UP_WACOMDIGITIZER     0xff0d0000
0102 #define WACOM_HID_SP_PAD                0x00040000
0103 #define WACOM_HID_SP_BUTTON             0x00090000
0104 #define WACOM_HID_SP_DIGITIZER          0x000d0000
0105 #define WACOM_HID_SP_DIGITIZERINFO      0x00100000
0106 #define WACOM_HID_WD_DIGITIZER          (WACOM_HID_UP_WACOMDIGITIZER | 0x01)
0107 #define WACOM_HID_WD_PEN                (WACOM_HID_UP_WACOMDIGITIZER | 0x02)
0108 #define WACOM_HID_WD_SENSE              (WACOM_HID_UP_WACOMDIGITIZER | 0x36)
0109 #define WACOM_HID_WD_DIGITIZERFNKEYS    (WACOM_HID_UP_WACOMDIGITIZER | 0x39)
0110 #define WACOM_HID_WD_SERIALNUMBER       (WACOM_HID_UP_WACOMDIGITIZER | 0x5b)
0111 #define WACOM_HID_WD_SERIALHI           (WACOM_HID_UP_WACOMDIGITIZER | 0x5c)
0112 #define WACOM_HID_WD_BARRELSWITCH3      (WACOM_HID_UP_WACOMDIGITIZER | 0x5d)
0113 #define WACOM_HID_WD_TOOLTYPE           (WACOM_HID_UP_WACOMDIGITIZER | 0x77)
0114 #define WACOM_HID_WD_DISTANCE           (WACOM_HID_UP_WACOMDIGITIZER | 0x0132)
0115 #define WACOM_HID_WD_TOUCHSTRIP         (WACOM_HID_UP_WACOMDIGITIZER | 0x0136)
0116 #define WACOM_HID_WD_TOUCHSTRIP2        (WACOM_HID_UP_WACOMDIGITIZER | 0x0137)
0117 #define WACOM_HID_WD_TOUCHRING          (WACOM_HID_UP_WACOMDIGITIZER | 0x0138)
0118 #define WACOM_HID_WD_TOUCHRINGSTATUS    (WACOM_HID_UP_WACOMDIGITIZER | 0x0139)
0119 #define WACOM_HID_WD_REPORT_VALID       (WACOM_HID_UP_WACOMDIGITIZER | 0x01d0)
0120 #define WACOM_HID_WD_SEQUENCENUMBER     (WACOM_HID_UP_WACOMDIGITIZER | 0x0220)
0121 #define WACOM_HID_WD_ACCELEROMETER_X    (WACOM_HID_UP_WACOMDIGITIZER | 0x0401)
0122 #define WACOM_HID_WD_ACCELEROMETER_Y    (WACOM_HID_UP_WACOMDIGITIZER | 0x0402)
0123 #define WACOM_HID_WD_ACCELEROMETER_Z    (WACOM_HID_UP_WACOMDIGITIZER | 0x0403)
0124 #define WACOM_HID_WD_BATTERY_CHARGING   (WACOM_HID_UP_WACOMDIGITIZER | 0x0404)
0125 #define WACOM_HID_WD_TOUCHONOFF         (WACOM_HID_UP_WACOMDIGITIZER | 0x0454)
0126 #define WACOM_HID_WD_BATTERY_LEVEL      (WACOM_HID_UP_WACOMDIGITIZER | 0x043b)
0127 #define WACOM_HID_WD_EXPRESSKEY00       (WACOM_HID_UP_WACOMDIGITIZER | 0x0910)
0128 #define WACOM_HID_WD_EXPRESSKEYCAP00    (WACOM_HID_UP_WACOMDIGITIZER | 0x0940)
0129 #define WACOM_HID_WD_MODE_CHANGE        (WACOM_HID_UP_WACOMDIGITIZER | 0x0980)
0130 #define WACOM_HID_WD_MUTE_DEVICE        (WACOM_HID_UP_WACOMDIGITIZER | 0x0981)
0131 #define WACOM_HID_WD_CONTROLPANEL       (WACOM_HID_UP_WACOMDIGITIZER | 0x0982)
0132 #define WACOM_HID_WD_ONSCREEN_KEYBOARD  (WACOM_HID_UP_WACOMDIGITIZER | 0x0983)
0133 #define WACOM_HID_WD_BUTTONCONFIG       (WACOM_HID_UP_WACOMDIGITIZER | 0x0986)
0134 #define WACOM_HID_WD_BUTTONHOME         (WACOM_HID_UP_WACOMDIGITIZER | 0x0990)
0135 #define WACOM_HID_WD_BUTTONUP           (WACOM_HID_UP_WACOMDIGITIZER | 0x0991)
0136 #define WACOM_HID_WD_BUTTONDOWN         (WACOM_HID_UP_WACOMDIGITIZER | 0x0992)
0137 #define WACOM_HID_WD_BUTTONLEFT         (WACOM_HID_UP_WACOMDIGITIZER | 0x0993)
0138 #define WACOM_HID_WD_BUTTONRIGHT        (WACOM_HID_UP_WACOMDIGITIZER | 0x0994)
0139 #define WACOM_HID_WD_BUTTONCENTER       (WACOM_HID_UP_WACOMDIGITIZER | 0x0995)
0140 #define WACOM_HID_WD_FINGERWHEEL        (WACOM_HID_UP_WACOMDIGITIZER | 0x0d03)
0141 #define WACOM_HID_WD_OFFSETLEFT         (WACOM_HID_UP_WACOMDIGITIZER | 0x0d30)
0142 #define WACOM_HID_WD_OFFSETTOP          (WACOM_HID_UP_WACOMDIGITIZER | 0x0d31)
0143 #define WACOM_HID_WD_OFFSETRIGHT        (WACOM_HID_UP_WACOMDIGITIZER | 0x0d32)
0144 #define WACOM_HID_WD_OFFSETBOTTOM       (WACOM_HID_UP_WACOMDIGITIZER | 0x0d33)
0145 #define WACOM_HID_WD_DATAMODE           (WACOM_HID_UP_WACOMDIGITIZER | 0x1002)
0146 #define WACOM_HID_WD_DIGITIZERINFO      (WACOM_HID_UP_WACOMDIGITIZER | 0x1013)
0147 #define WACOM_HID_WD_TOUCH_RING_SETTING (WACOM_HID_UP_WACOMDIGITIZER | 0x1032)
0148 #define WACOM_HID_UP_G9                 0xff090000
0149 #define WACOM_HID_G9_PEN                (WACOM_HID_UP_G9 | 0x02)
0150 #define WACOM_HID_G9_TOUCHSCREEN        (WACOM_HID_UP_G9 | 0x11)
0151 #define WACOM_HID_UP_G11                0xff110000
0152 #define WACOM_HID_G11_PEN               (WACOM_HID_UP_G11 | 0x02)
0153 #define WACOM_HID_G11_TOUCHSCREEN       (WACOM_HID_UP_G11 | 0x11)
0154 #define WACOM_HID_UP_WACOMTOUCH         0xff000000
0155 #define WACOM_HID_WT_TOUCHSCREEN        (WACOM_HID_UP_WACOMTOUCH | 0x04)
0156 #define WACOM_HID_WT_TOUCHPAD           (WACOM_HID_UP_WACOMTOUCH | 0x05)
0157 #define WACOM_HID_WT_CONTACTMAX         (WACOM_HID_UP_WACOMTOUCH | 0x55)
0158 #define WACOM_HID_WT_SERIALNUMBER       (WACOM_HID_UP_WACOMTOUCH | 0x5b)
0159 #define WACOM_HID_WT_X                  (WACOM_HID_UP_WACOMTOUCH | 0x130)
0160 #define WACOM_HID_WT_Y                  (WACOM_HID_UP_WACOMTOUCH | 0x131)
0161 #define WACOM_HID_WT_REPORT_VALID       (WACOM_HID_UP_WACOMTOUCH | 0x1d0)
0162 
0163 #define WACOM_BATTERY_USAGE(f)  (((f)->hid == HID_DG_BATTERYSTRENGTH) || \
0164                  ((f)->hid == WACOM_HID_WD_BATTERY_CHARGING) || \
0165                  ((f)->hid == WACOM_HID_WD_BATTERY_LEVEL))
0166 
0167 #define WACOM_PAD_FIELD(f)  (((f)->physical == HID_DG_TABLETFUNCTIONKEY) || \
0168                  ((f)->physical == WACOM_HID_WD_DIGITIZERFNKEYS) || \
0169                  ((f)->physical == WACOM_HID_WD_DIGITIZERINFO))
0170 
0171 #define WACOM_PEN_FIELD(f)  (((f)->logical == HID_DG_STYLUS) || \
0172                  ((f)->physical == HID_DG_STYLUS) || \
0173                  ((f)->physical == HID_DG_PEN) || \
0174                  ((f)->application == HID_DG_PEN) || \
0175                  ((f)->application == HID_DG_DIGITIZER) || \
0176                  ((f)->application == WACOM_HID_WD_PEN) || \
0177                  ((f)->application == WACOM_HID_WD_DIGITIZER) || \
0178                  ((f)->application == WACOM_HID_G9_PEN) || \
0179                  ((f)->application == WACOM_HID_G11_PEN))
0180 #define WACOM_FINGER_FIELD(f)   (((f)->logical == HID_DG_FINGER) || \
0181                  ((f)->physical == HID_DG_FINGER) || \
0182                  ((f)->application == HID_DG_TOUCHSCREEN) || \
0183                  ((f)->application == WACOM_HID_G9_TOUCHSCREEN) || \
0184                  ((f)->application == WACOM_HID_G11_TOUCHSCREEN) || \
0185                  ((f)->application == WACOM_HID_WT_TOUCHPAD) || \
0186                  ((f)->application == HID_DG_TOUCHPAD))
0187 
0188 #define WACOM_DIRECT_DEVICE(f)  (((f)->application == HID_DG_TOUCHSCREEN) || \
0189                  ((f)->application == WACOM_HID_WT_TOUCHSCREEN) || \
0190                  ((f)->application == HID_DG_PEN) || \
0191                  ((f)->application == WACOM_HID_WD_PEN))
0192 
0193 enum {
0194     PENPARTNER = 0,
0195     GRAPHIRE,
0196     GRAPHIRE_BT,
0197     WACOM_G4,
0198     PTU,
0199     PL,
0200     DTU,
0201     DTUS,
0202     DTUSX,
0203     INTUOS,
0204     INTUOS3S,
0205     INTUOS3,
0206     INTUOS3L,
0207     INTUOS4S,
0208     INTUOS4,
0209     INTUOS4WL,
0210     INTUOS4L,
0211     INTUOS5S,
0212     INTUOS5,
0213     INTUOS5L,
0214     INTUOSPS,
0215     INTUOSPM,
0216     INTUOSPL,
0217     INTUOSP2_BT,
0218     INTUOSP2S_BT,
0219     INTUOSHT3_BT,
0220     WACOM_21UX2,
0221     WACOM_22HD,
0222     DTK,
0223     WACOM_24HD,
0224     WACOM_27QHD,
0225     CINTIQ_HYBRID,
0226     CINTIQ_COMPANION_2,
0227     CINTIQ,
0228     WACOM_BEE,
0229     WACOM_13HD,
0230     WACOM_MO,
0231     BAMBOO_PEN,
0232     INTUOSHT,
0233     INTUOSHT2,
0234     BAMBOO_TOUCH,
0235     BAMBOO_PT,
0236     WACOM_24HDT,
0237     WACOM_27QHDT,
0238     BAMBOO_PAD,
0239     WIRELESS,
0240     REMOTE,
0241     TABLETPC,   /* add new TPC below */
0242     TABLETPCE,
0243     TABLETPC2FG,
0244     MTSCREEN,
0245     MTTPC,
0246     MTTPC_B,
0247     HID_GENERIC,
0248     MAX_TYPE
0249 };
0250 
0251 struct wacom_features {
0252     const char *name;
0253     int x_max;
0254     int y_max;
0255     int pressure_max;
0256     int distance_max;
0257     int type;
0258     int x_resolution;
0259     int y_resolution;
0260     int numbered_buttons;
0261     int offset_left;
0262     int offset_right;
0263     int offset_top;
0264     int offset_bottom;
0265     int device_type;
0266     int x_phy;
0267     int y_phy;
0268     unsigned unit;
0269     int unitExpo;
0270     int x_fuzz;
0271     int y_fuzz;
0272     int pressure_fuzz;
0273     int distance_fuzz;
0274     int tilt_fuzz;
0275     unsigned quirks;
0276     unsigned touch_max;
0277     int oVid;
0278     int oPid;
0279     int pktlen;
0280     bool check_for_hid_type;
0281     int hid_type;
0282 };
0283 
0284 struct wacom_shared {
0285     bool stylus_in_proximity;
0286     bool touch_down;
0287     /* for wireless device to access USB interfaces */
0288     unsigned touch_max;
0289     int type;
0290     struct input_dev *touch_input;
0291     struct hid_device *pen;
0292     struct hid_device *touch;
0293     bool has_mute_touch_switch;
0294     bool is_touch_on;
0295 };
0296 
0297 struct hid_data {
0298     __s16 inputmode;    /* InputMode HID feature, -1 if non-existent */
0299     __s16 inputmode_index;  /* InputMode HID feature index in the report */
0300     bool sense_state;
0301     bool inrange_state;
0302     bool invert_state;
0303     bool tipswitch;
0304     bool barrelswitch;
0305     bool barrelswitch2;
0306     bool barrelswitch3;
0307     bool serialhi;
0308     bool confidence;
0309     int x;
0310     int y;
0311     int pressure;
0312     int width;
0313     int height;
0314     int id;
0315     int cc_report;
0316     int cc_index;
0317     int cc_value_index;
0318     int last_slot_field;
0319     int num_expected;
0320     int num_received;
0321     int bat_status;
0322     int battery_capacity;
0323     int bat_charging;
0324     int bat_connected;
0325     int ps_connected;
0326     bool pad_input_event_flag;
0327     unsigned short sequence_number;
0328 };
0329 
0330 struct wacom_remote_data {
0331     struct {
0332         u32 serial;
0333         bool connected;
0334     } remote[WACOM_MAX_REMOTES];
0335 };
0336 
0337 struct wacom_wac {
0338     char name[WACOM_NAME_MAX];
0339     char pen_name[WACOM_NAME_MAX];
0340     char touch_name[WACOM_NAME_MAX];
0341     char pad_name[WACOM_NAME_MAX];
0342     unsigned char data[WACOM_PKGLEN_MAX];
0343     int tool[2];
0344     int id[2];
0345     __u64 serial[2];
0346     bool probe_complete;
0347     bool reporting_data;
0348     struct wacom_features features;
0349     struct wacom_shared *shared;
0350     struct input_dev *pen_input;
0351     struct input_dev *touch_input;
0352     struct input_dev *pad_input;
0353     struct kfifo_rec_ptr_2 *pen_fifo;
0354     int pid;
0355     int num_contacts_left;
0356     u8 bt_features;
0357     u8 bt_high_speed;
0358     int mode_report;
0359     int mode_value;
0360     struct hid_data hid_data;
0361     bool has_mute_touch_switch;
0362     bool is_soft_touch_switch;
0363     bool has_mode_change;
0364     bool is_direct_mode;
0365     bool is_invalid_bt_frame;
0366 };
0367 
0368 #endif