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