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 #define WACOM_MAX_REMOTES 5 20 #define WACOM_STATUS_UNKNOWN 255 21 22 /* packet length for individual models */ 23 #define WACOM_PKGLEN_BBFUN 9 24 #define WACOM_PKGLEN_TPC1FG 5 25 #define WACOM_PKGLEN_TPC1FG_B 10 26 #define WACOM_PKGLEN_TPC2FG 14 27 #define WACOM_PKGLEN_BBTOUCH 20 28 #define WACOM_PKGLEN_BBTOUCH3 64 29 #define WACOM_PKGLEN_BBPEN 10 30 #define WACOM_PKGLEN_WIRELESS 32 31 #define WACOM_PKGLEN_PENABLED 8 32 #define WACOM_PKGLEN_BPAD_TOUCH 32 33 #define WACOM_PKGLEN_BPAD_TOUCH_USB 64 34 35 /* wacom data size per MT contact */ 36 #define WACOM_BYTES_PER_MT_PACKET 11 37 #define WACOM_BYTES_PER_24HDT_PACKET 14 38 #define WACOM_BYTES_PER_QHDTHID_PACKET 6 39 40 /* device IDs */ 41 #define STYLUS_DEVICE_ID 0x02 42 #define TOUCH_DEVICE_ID 0x03 43 #define CURSOR_DEVICE_ID 0x06 44 #define ERASER_DEVICE_ID 0x0A 45 #define PAD_DEVICE_ID 0x0F 46 47 /* wacom data packet report IDs */ 48 #define WACOM_REPORT_PENABLED 2 49 #define WACOM_REPORT_PENABLED_BT 3 50 #define WACOM_REPORT_INTUOS_ID1 5 51 #define WACOM_REPORT_INTUOS_ID2 6 52 #define WACOM_REPORT_INTUOSPAD 12 53 #define WACOM_REPORT_INTUOS5PAD 3 54 #define WACOM_REPORT_DTUSPAD 21 55 #define WACOM_REPORT_TPC1FG 6 56 #define WACOM_REPORT_TPC2FG 13 57 #define WACOM_REPORT_TPCMT 13 58 #define WACOM_REPORT_TPCMT2 3 59 #define WACOM_REPORT_TPCHID 15 60 #define WACOM_REPORT_CINTIQ 16 61 #define WACOM_REPORT_CINTIQPAD 17 62 #define WACOM_REPORT_TPCST 16 63 #define WACOM_REPORT_DTUS 17 64 #define WACOM_REPORT_TPC1FGE 18 65 #define WACOM_REPORT_24HDT 1 66 #define WACOM_REPORT_WL 128 67 #define WACOM_REPORT_USB 192 68 #define WACOM_REPORT_BPAD_PEN 3 69 #define WACOM_REPORT_BPAD_TOUCH 16 70 #define WACOM_REPORT_DEVICE_LIST 16 71 #define WACOM_REPORT_INTUOS_PEN 16 72 #define WACOM_REPORT_REMOTE 17 73 #define WACOM_REPORT_INTUOSHT2_ID 8 74 75 /* device quirks */ 76 #define WACOM_QUIRK_BBTOUCH_LOWRES 0x0001 77 #define WACOM_QUIRK_BATTERY 0x0008 78 79 /* device types */ 80 #define WACOM_DEVICETYPE_NONE 0x0000 81 #define WACOM_DEVICETYPE_PEN 0x0001 82 #define WACOM_DEVICETYPE_TOUCH 0x0002 83 #define WACOM_DEVICETYPE_PAD 0x0004 84 #define WACOM_DEVICETYPE_WL_MONITOR 0x0008 85 #define WACOM_DEVICETYPE_DIRECT 0x0010 86 87 #define WACOM_VENDORDEFINED_PEN 0xff0d0001 88 #define WACOM_G9_PAGE 0xff090000 89 #define WACOM_G9_DIGITIZER (WACOM_G9_PAGE | 0x02) 90 #define WACOM_G9_TOUCHSCREEN (WACOM_G9_PAGE | 0x11) 91 #define WACOM_G11_PAGE 0xff110000 92 #define WACOM_G11_DIGITIZER (WACOM_G11_PAGE | 0x02) 93 #define WACOM_G11_TOUCHSCREEN (WACOM_G11_PAGE | 0x11) 94 95 #define WACOM_PEN_FIELD(f) (((f)->logical == HID_DG_STYLUS) || \ 96 ((f)->physical == HID_DG_STYLUS) || \ 97 ((f)->physical == HID_DG_PEN) || \ 98 ((f)->application == HID_DG_PEN) || \ 99 ((f)->application == HID_DG_DIGITIZER) || \ 100 ((f)->application == WACOM_VENDORDEFINED_PEN)) 101 #define WACOM_FINGER_FIELD(f) (((f)->logical == HID_DG_FINGER) || \ 102 ((f)->physical == HID_DG_FINGER) || \ 103 ((f)->application == HID_DG_TOUCHSCREEN)) 104 105 enum { 106 PENPARTNER = 0, 107 GRAPHIRE, 108 GRAPHIRE_BT, 109 WACOM_G4, 110 PTU, 111 PL, 112 DTU, 113 DTUS, 114 DTUSX, 115 INTUOS, 116 INTUOS3S, 117 INTUOS3, 118 INTUOS3L, 119 INTUOS4S, 120 INTUOS4, 121 INTUOS4WL, 122 INTUOS4L, 123 INTUOS5S, 124 INTUOS5, 125 INTUOS5L, 126 INTUOSPS, 127 INTUOSPM, 128 INTUOSPL, 129 WACOM_21UX2, 130 WACOM_22HD, 131 DTK, 132 WACOM_24HD, 133 WACOM_27QHD, 134 CINTIQ_HYBRID, 135 CINTIQ_COMPANION_2, 136 CINTIQ, 137 WACOM_BEE, 138 WACOM_13HD, 139 WACOM_MO, 140 BAMBOO_PEN, 141 INTUOSHT, 142 INTUOSHT2, 143 BAMBOO_TOUCH, 144 BAMBOO_PT, 145 WACOM_24HDT, 146 WACOM_27QHDT, 147 BAMBOO_PAD, 148 WIRELESS, 149 REMOTE, 150 TABLETPC, /* add new TPC below */ 151 TABLETPCE, 152 TABLETPC2FG, 153 MTSCREEN, 154 MTTPC, 155 MTTPC_B, 156 HID_GENERIC, 157 MAX_TYPE 158 }; 159 160 struct wacom_features { 161 const char *name; 162 int x_max; 163 int y_max; 164 int pressure_max; 165 int distance_max; 166 int type; 167 int x_resolution; 168 int y_resolution; 169 int numbered_buttons; 170 int x_min; 171 int y_min; 172 int device_type; 173 int x_phy; 174 int y_phy; 175 unsigned unit; 176 int unitExpo; 177 int x_fuzz; 178 int y_fuzz; 179 int pressure_fuzz; 180 int distance_fuzz; 181 int tilt_fuzz; 182 unsigned quirks; 183 unsigned touch_max; 184 int oVid; 185 int oPid; 186 int pktlen; 187 bool check_for_hid_type; 188 int hid_type; 189 }; 190 191 struct wacom_shared { 192 bool stylus_in_proximity; 193 bool touch_down; 194 /* for wireless device to access USB interfaces */ 195 unsigned touch_max; 196 int type; 197 struct input_dev *touch_input; 198 struct hid_device *pen; 199 struct hid_device *touch; 200 }; 201 202 struct hid_data { 203 __s16 inputmode; /* InputMode HID feature, -1 if non-existent */ 204 __s16 inputmode_index; /* InputMode HID feature index in the report */ 205 bool inrange_state; 206 bool invert_state; 207 bool tipswitch; 208 int x; 209 int y; 210 int pressure; 211 int width; 212 int height; 213 int id; 214 int cc_report; 215 int cc_index; 216 int cc_value_index; 217 int last_slot_field; 218 int num_expected; 219 int num_received; 220 }; 221 222 struct wacom_remote_data { 223 struct { 224 u32 serial; 225 bool connected; 226 } remote[WACOM_MAX_REMOTES]; 227 }; 228 229 struct wacom_wac { 230 char name[WACOM_NAME_MAX]; 231 char pen_name[WACOM_NAME_MAX]; 232 char touch_name[WACOM_NAME_MAX]; 233 char pad_name[WACOM_NAME_MAX]; 234 unsigned char data[WACOM_PKGLEN_MAX]; 235 int tool[2]; 236 int id[2]; 237 __u32 serial[2]; 238 bool reporting_data; 239 struct wacom_features features; 240 struct wacom_shared *shared; 241 struct input_dev *pen_input; 242 struct input_dev *touch_input; 243 struct input_dev *pad_input; 244 int pid; 245 int num_contacts_left; 246 u8 bt_features; 247 u8 bt_high_speed; 248 int mode_report; 249 int mode_value; 250 struct hid_data hid_data; 251 }; 252 253 #endif 254