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 89enum { 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 139struct 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 169struct 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 180struct 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 194struct 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