1 /* 2 * drivers/input/tablet/wacom_wac.h 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 */ 9 #ifndef WACOM_WAC_H 10 #define WACOM_WAC_H 11 12 #include <linux/types.h> 13 #include <linux/hid.h> 14 15 /* maximum packet length for USB devices */ 16 #define WACOM_PKGLEN_MAX 192 17 18 #define WACOM_NAME_MAX 64 19 20 /* packet length for individual models */ 21 #define WACOM_PKGLEN_PENPRTN 7 22 #define WACOM_PKGLEN_GRAPHIRE 8 23 #define WACOM_PKGLEN_BBFUN 9 24 #define WACOM_PKGLEN_INTUOS 10 25 #define WACOM_PKGLEN_TPC1FG 5 26 #define WACOM_PKGLEN_TPC1FG_B 10 27 #define WACOM_PKGLEN_TPC2FG 14 28 #define WACOM_PKGLEN_BBTOUCH 20 29 #define WACOM_PKGLEN_BBTOUCH3 64 30 #define WACOM_PKGLEN_BBPEN 10 31 #define WACOM_PKGLEN_WIRELESS 32 32 #define WACOM_PKGLEN_MTOUCH 62 33 #define WACOM_PKGLEN_MTTPC 40 34 #define WACOM_PKGLEN_DTUS 68 35 #define WACOM_PKGLEN_PENABLED 8 36 37 /* wacom data size per MT contact */ 38 #define WACOM_BYTES_PER_MT_PACKET 11 39 #define WACOM_BYTES_PER_24HDT_PACKET 14 40 #define WACOM_BYTES_PER_QHDTHID_PACKET 6 41 42 /* device IDs */ 43 #define STYLUS_DEVICE_ID 0x02 44 #define TOUCH_DEVICE_ID 0x03 45 #define CURSOR_DEVICE_ID 0x06 46 #define ERASER_DEVICE_ID 0x0A 47 #define PAD_DEVICE_ID 0x0F 48 49 /* wacom data packet report IDs */ 50 #define WACOM_REPORT_PENABLED 2 51 #define WACOM_REPORT_PENABLED_BT 3 52 #define WACOM_REPORT_INTUOSREAD 5 53 #define WACOM_REPORT_INTUOSWRITE 6 54 #define WACOM_REPORT_INTUOSPAD 12 55 #define WACOM_REPORT_INTUOS5PAD 3 56 #define WACOM_REPORT_DTUSPAD 21 57 #define WACOM_REPORT_TPC1FG 6 58 #define WACOM_REPORT_TPC2FG 13 59 #define WACOM_REPORT_TPCMT 13 60 #define WACOM_REPORT_TPCMT2 3 61 #define WACOM_REPORT_TPCHID 15 62 #define WACOM_REPORT_CINTIQ 16 63 #define WACOM_REPORT_CINTIQPAD 17 64 #define WACOM_REPORT_TPCST 16 65 #define WACOM_REPORT_DTUS 17 66 #define WACOM_REPORT_TPC1FGE 18 67 #define WACOM_REPORT_24HDT 1 68 #define WACOM_REPORT_WL 128 69 #define WACOM_REPORT_USB 192 70 71 /* device quirks */ 72 #define WACOM_QUIRK_MULTI_INPUT 0x0001 73 #define WACOM_QUIRK_BBTOUCH_LOWRES 0x0002 74 #define WACOM_QUIRK_NO_INPUT 0x0004 75 #define WACOM_QUIRK_MONITOR 0x0008 76 #define WACOM_QUIRK_BATTERY 0x0010 77 78 #define WACOM_PEN_FIELD(f) (((f)->logical == HID_DG_STYLUS) || \ 79 ((f)->physical == HID_DG_STYLUS) || \ 80 ((f)->physical == HID_DG_PEN) || \ 81 ((f)->application == HID_DG_PEN)) 82 #define WACOM_FINGER_FIELD(f) (((f)->logical == HID_DG_FINGER) || \ 83 ((f)->physical == HID_DG_FINGER) || \ 84 ((f)->application == HID_DG_TOUCHSCREEN)) 85 86 enum { 87 PENPARTNER = 0, 88 GRAPHIRE, 89 GRAPHIRE_BT, 90 WACOM_G4, 91 PTU, 92 PL, 93 DTU, 94 DTUS, 95 DTUSX, 96 INTUOS, 97 INTUOS3S, 98 INTUOS3, 99 INTUOS3L, 100 INTUOS4S, 101 INTUOS4, 102 INTUOS4WL, 103 INTUOS4L, 104 INTUOS5S, 105 INTUOS5, 106 INTUOS5L, 107 INTUOSPS, 108 INTUOSPM, 109 INTUOSPL, 110 INTUOSHT, 111 WACOM_21UX2, 112 WACOM_22HD, 113 DTK, 114 WACOM_24HD, 115 WACOM_27QHD, 116 CINTIQ_HYBRID, 117 CINTIQ, 118 WACOM_BEE, 119 WACOM_13HD, 120 WACOM_MO, 121 WIRELESS, 122 BAMBOO_PT, 123 WACOM_24HDT, 124 WACOM_27QHDT, 125 TABLETPC, /* add new TPC below */ 126 TABLETPCE, 127 TABLETPC2FG, 128 MTSCREEN, 129 MTTPC, 130 MTTPC_B, 131 HID_GENERIC, 132 MAX_TYPE 133 }; 134 135 struct wacom_features { 136 const char *name; 137 int x_max; 138 int y_max; 139 int pressure_max; 140 int distance_max; 141 int type; 142 int x_resolution; 143 int y_resolution; 144 int x_min; 145 int y_min; 146 int device_type; 147 int x_phy; 148 int y_phy; 149 unsigned unit; 150 int unitExpo; 151 int x_fuzz; 152 int y_fuzz; 153 int pressure_fuzz; 154 int distance_fuzz; 155 unsigned quirks; 156 unsigned touch_max; 157 int oVid; 158 int oPid; 159 int pktlen; 160 bool check_for_hid_type; 161 int hid_type; 162 int last_slot_field; 163 }; 164 165 struct wacom_shared { 166 bool stylus_in_proximity; 167 bool touch_down; 168 /* for wireless device to access USB interfaces */ 169 unsigned touch_max; 170 int type; 171 struct input_dev *touch_input; 172 }; 173 174 struct hid_data { 175 __s16 inputmode; /* InputMode HID feature, -1 if non-existent */ 176 __s16 inputmode_index; /* InputMode HID feature index in the report */ 177 bool inrange_state; 178 bool invert_state; 179 bool tipswitch; 180 int x; 181 int y; 182 int pressure; 183 int width; 184 int height; 185 int id; 186 }; 187 188 struct wacom_wac { 189 char name[WACOM_NAME_MAX]; 190 char pad_name[WACOM_NAME_MAX]; 191 char bat_name[WACOM_NAME_MAX]; 192 char ac_name[WACOM_NAME_MAX]; 193 unsigned char data[WACOM_PKGLEN_MAX]; 194 int tool[2]; 195 int id[2]; 196 __u32 serial[2]; 197 bool reporting_data; 198 struct wacom_features features; 199 struct wacom_shared *shared; 200 struct input_dev *input; 201 struct input_dev *pad_input; 202 bool input_registered; 203 bool pad_registered; 204 int pid; 205 int battery_capacity; 206 int num_contacts_left; 207 int bat_charging; 208 int ps_connected; 209 u8 bt_features; 210 u8 bt_high_speed; 211 struct hid_data hid_data; 212 }; 213 214 #endif 215