679
static void wacom_tpc_finger_in(struct wacom_wac *wacom, char *data, int idx)
681
struct input_dev *input = wacom->input;
682
int finger = idx + 1;
683
int x = le16_to_cpup((__le16 *)&data[finger * 2]) & 0x7fff;
684
int y = le16_to_cpup((__le16 *)&data[4 + finger * 2]) & 0x7fff;
687
* Work around input core suppressing "duplicate" events since
688
* we are abusing ABS_X/ABS_Y to transmit multi-finger data.
689
* This should go away once we switch to true multitouch
692
if (wacom->last_finger != finger) {
693
if (x == input_abs_get_val(input, ABS_X))
696
if (y == input_abs_get_val(input, ABS_Y))
700
input_report_abs(input, ABS_X, x);
701
input_report_abs(input, ABS_Y, y);
702
input_report_abs(input, ABS_MISC, wacom->id[0]);
703
input_report_key(input, wacom->tool[finger], 1);
705
input_report_key(input, BTN_TOUCH, 1);
706
input_event(input, EV_MSC, MSC_SERIAL, finger);
709
wacom->last_finger = finger;
712
static void wacom_tpc_touch_out(struct wacom_wac *wacom, int idx)
714
struct input_dev *input = wacom->input;
715
int finger = idx + 1;
717
input_report_abs(input, ABS_X, 0);
718
input_report_abs(input, ABS_Y, 0);
719
input_report_abs(input, ABS_MISC, 0);
720
input_report_key(input, wacom->tool[finger], 0);
722
input_report_key(input, BTN_TOUCH, 0);
723
input_event(input, EV_MSC, MSC_SERIAL, finger);
727
static void wacom_tpc_touch_in(struct wacom_wac *wacom, size_t len)
729
char *data = wacom->data;
730
struct input_dev *input = wacom->input;
732
wacom->tool[1] = BTN_TOOL_DOUBLETAP;
733
wacom->id[0] = TOUCH_DEVICE_ID;
734
wacom->tool[2] = BTN_TOOL_TRIPLETAP;
736
if (len != WACOM_PKGLEN_TPC1FG) {
740
case WACOM_REPORT_TPC1FG:
741
input_report_abs(input, ABS_X, le16_to_cpup((__le16 *)&data[2]));
742
input_report_abs(input, ABS_Y, le16_to_cpup((__le16 *)&data[4]));
743
input_report_abs(input, ABS_PRESSURE, le16_to_cpup((__le16 *)&data[6]));
744
input_report_key(input, BTN_TOUCH, le16_to_cpup((__le16 *)&data[6]));
745
input_report_abs(input, ABS_MISC, wacom->id[0]);
746
input_report_key(input, wacom->tool[1], 1);
750
case WACOM_REPORT_TPC2FG:
752
wacom_tpc_finger_in(wacom, data, 0);
753
else if (wacom->id[1] & 0x01)
754
wacom_tpc_touch_out(wacom, 0);
757
wacom_tpc_finger_in(wacom, data, 1);
758
else if (wacom->id[1] & 0x02)
759
wacom_tpc_touch_out(wacom, 1);
763
input_report_abs(input, ABS_X, get_unaligned_le16(&data[1]));
764
input_report_abs(input, ABS_Y, get_unaligned_le16(&data[3]));
765
input_report_key(input, BTN_TOUCH, 1);
766
input_report_abs(input, ABS_MISC, wacom->id[1]);
767
input_report_key(input, wacom->tool[1], 1);
772
static int wacom_tpc_irq(struct wacom_wac *wacom, size_t len)
774
struct wacom_features *features = &wacom->features;
775
char *data = wacom->data;
776
struct input_dev *input = wacom->input;
777
int prox = 0, pressure;
780
dbg("wacom_tpc_irq: received report #%d", data[0]);
782
if (len == WACOM_PKGLEN_TPC1FG || /* single touch */
783
data[0] == WACOM_REPORT_TPC1FG || /* single touch */
784
data[0] == WACOM_REPORT_TPC2FG) { /* 2FG touch */
786
if (wacom->shared->stylus_in_proximity) {
787
if (wacom->id[1] & 0x01)
788
wacom_tpc_touch_out(wacom, 0);
790
if (wacom->id[1] & 0x02)
791
wacom_tpc_touch_out(wacom, 1);
797
if (len == WACOM_PKGLEN_TPC1FG) { /* with touch */
686
static int wacom_tpc_mt_touch(struct wacom_wac *wacom)
688
struct input_dev *input = wacom->input;
689
unsigned char *data = wacom->data;
690
int contact_with_no_pen_down_count = 0;
693
for (i = 0; i < 2; i++) {
694
int p = data[1] & (1 << i);
695
bool touch = p && !wacom->shared->stylus_in_proximity;
697
input_mt_slot(input, i);
698
input_mt_report_slot_state(input, MT_TOOL_FINGER, touch);
700
int x = le16_to_cpup((__le16 *)&data[i * 2 + 2]) & 0x7fff;
701
int y = le16_to_cpup((__le16 *)&data[i * 2 + 6]) & 0x7fff;
703
input_report_abs(input, ABS_MT_POSITION_X, x);
704
input_report_abs(input, ABS_MT_POSITION_Y, y);
705
contact_with_no_pen_down_count++;
709
/* keep touch state for pen event */
710
wacom->shared->touch_down = (contact_with_no_pen_down_count > 0);
712
input_mt_report_pointer_emulation(input, true);
717
static int wacom_tpc_single_touch(struct wacom_wac *wacom, size_t len)
719
char *data = wacom->data;
720
struct input_dev *input = wacom->input;
724
if (!wacom->shared->stylus_in_proximity) {
725
if (len == WACOM_PKGLEN_TPC1FG) {
798
726
prox = data[0] & 0x01;
799
} else { /* with capacity */
800
if (data[0] == WACOM_REPORT_TPC1FG)
802
prox = data[1] & 0x01;
805
prox = data[1] & 0x03;
810
wacom->last_finger = 1;
811
wacom_tpc_touch_in(wacom, len);
813
if (data[0] == WACOM_REPORT_TPC2FG) {
815
if (wacom->id[1] & 0x01)
816
wacom_tpc_touch_out(wacom, 0);
818
if (wacom->id[1] & 0x02)
819
wacom_tpc_touch_out(wacom, 1);
821
/* one finger touch */
822
wacom_tpc_touch_out(wacom, 0);
826
/* keep prox bit to send proper out-prox event */
828
} else if (data[0] == WACOM_REPORT_PENABLED) { /* Penabled */
829
prox = data[1] & 0x20;
831
if (!wacom->shared->stylus_in_proximity) { /* first in prox */
832
/* Going into proximity select tool */
833
wacom->tool[0] = (data[1] & 0x0c) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN;
834
if (wacom->tool[0] == BTN_TOOL_PEN)
835
wacom->id[0] = STYLUS_DEVICE_ID;
837
wacom->id[0] = ERASER_DEVICE_ID;
839
wacom->shared->stylus_in_proximity = true;
727
x = get_unaligned_le16(&data[1]);
728
y = get_unaligned_le16(&data[3]);
729
} else { /* with capacity */
730
prox = data[1] & 0x01;
731
x = le16_to_cpup((__le16 *)&data[2]);
732
y = le16_to_cpup((__le16 *)&data[4]);
735
/* force touch out when pen is in prox */
739
input_report_abs(input, ABS_X, x);
740
input_report_abs(input, ABS_Y, y);
742
input_report_key(input, BTN_TOUCH, prox);
744
/* keep touch state for pen events */
745
wacom->shared->touch_down = prox;
750
static int wacom_tpc_pen(struct wacom_wac *wacom)
752
struct wacom_features *features = &wacom->features;
753
char *data = wacom->data;
754
struct input_dev *input = wacom->input;
756
bool prox = data[1] & 0x20;
758
if (!wacom->shared->stylus_in_proximity) /* first in prox */
759
/* Going into proximity select tool */
760
wacom->tool[0] = (data[1] & 0x0c) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN;
762
/* keep pen state for touch events */
763
wacom->shared->stylus_in_proximity = prox;
765
/* send pen events only when touch is up or forced out */
766
if (!wacom->shared->touch_down) {
841
767
input_report_key(input, BTN_STYLUS, data[1] & 0x02);
842
768
input_report_key(input, BTN_STYLUS2, data[1] & 0x10);
843
769
input_report_abs(input, ABS_X, le16_to_cpup((__le16 *)&data[2]));
1302
1244
static const struct wacom_features wacom_features_0x00 =
1303
{ "Wacom Penpartner", WACOM_PKGLEN_PENPRTN, 5040, 3780, 255, 0, PENPARTNER };
1245
{ "Wacom Penpartner", WACOM_PKGLEN_PENPRTN, 5040, 3780, 255,
1246
0, PENPARTNER, WACOM_PENPRTN_RES, WACOM_PENPRTN_RES };
1304
1247
static const struct wacom_features wacom_features_0x10 =
1305
{ "Wacom Graphire", WACOM_PKGLEN_GRAPHIRE, 10206, 7422, 511, 63, GRAPHIRE };
1248
{ "Wacom Graphire", WACOM_PKGLEN_GRAPHIRE, 10206, 7422, 511,
1249
63, GRAPHIRE, WACOM_GRAPHIRE_RES, WACOM_GRAPHIRE_RES };
1306
1250
static const struct wacom_features wacom_features_0x11 =
1307
{ "Wacom Graphire2 4x5", WACOM_PKGLEN_GRAPHIRE, 10206, 7422, 511, 63, GRAPHIRE };
1251
{ "Wacom Graphire2 4x5", WACOM_PKGLEN_GRAPHIRE, 10206, 7422, 511,
1252
63, GRAPHIRE, WACOM_GRAPHIRE_RES, WACOM_GRAPHIRE_RES };
1308
1253
static const struct wacom_features wacom_features_0x12 =
1309
{ "Wacom Graphire2 5x7", WACOM_PKGLEN_GRAPHIRE, 13918, 10206, 511, 63, GRAPHIRE };
1254
{ "Wacom Graphire2 5x7", WACOM_PKGLEN_GRAPHIRE, 13918, 10206, 511,
1255
63, GRAPHIRE, WACOM_GRAPHIRE_RES, WACOM_GRAPHIRE_RES };
1310
1256
static const struct wacom_features wacom_features_0x13 =
1311
{ "Wacom Graphire3", WACOM_PKGLEN_GRAPHIRE, 10208, 7424, 511, 63, GRAPHIRE };
1257
{ "Wacom Graphire3", WACOM_PKGLEN_GRAPHIRE, 10208, 7424, 511,
1258
63, GRAPHIRE, WACOM_GRAPHIRE_RES, WACOM_GRAPHIRE_RES };
1312
1259
static const struct wacom_features wacom_features_0x14 =
1313
{ "Wacom Graphire3 6x8", WACOM_PKGLEN_GRAPHIRE, 16704, 12064, 511, 63, GRAPHIRE };
1260
{ "Wacom Graphire3 6x8", WACOM_PKGLEN_GRAPHIRE, 16704, 12064, 511,
1261
63, GRAPHIRE, WACOM_GRAPHIRE_RES, WACOM_GRAPHIRE_RES };
1314
1262
static const struct wacom_features wacom_features_0x15 =
1315
{ "Wacom Graphire4 4x5", WACOM_PKGLEN_GRAPHIRE, 10208, 7424, 511, 63, WACOM_G4 };
1263
{ "Wacom Graphire4 4x5", WACOM_PKGLEN_GRAPHIRE, 10208, 7424, 511,
1264
63, WACOM_G4, WACOM_GRAPHIRE_RES, WACOM_GRAPHIRE_RES };
1316
1265
static const struct wacom_features wacom_features_0x16 =
1317
{ "Wacom Graphire4 6x8", WACOM_PKGLEN_GRAPHIRE, 16704, 12064, 511, 63, WACOM_G4 };
1266
{ "Wacom Graphire4 6x8", WACOM_PKGLEN_GRAPHIRE, 16704, 12064, 511,
1267
63, WACOM_G4, WACOM_GRAPHIRE_RES, WACOM_GRAPHIRE_RES };
1318
1268
static const struct wacom_features wacom_features_0x17 =
1319
{ "Wacom BambooFun 4x5", WACOM_PKGLEN_BBFUN, 14760, 9225, 511, 63, WACOM_MO };
1269
{ "Wacom BambooFun 4x5", WACOM_PKGLEN_BBFUN, 14760, 9225, 511,
1270
63, WACOM_MO, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1320
1271
static const struct wacom_features wacom_features_0x18 =
1321
{ "Wacom BambooFun 6x8", WACOM_PKGLEN_BBFUN, 21648, 13530, 511, 63, WACOM_MO };
1272
{ "Wacom BambooFun 6x8", WACOM_PKGLEN_BBFUN, 21648, 13530, 511,
1273
63, WACOM_MO, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1322
1274
static const struct wacom_features wacom_features_0x19 =
1323
{ "Wacom Bamboo1 Medium", WACOM_PKGLEN_GRAPHIRE, 16704, 12064, 511, 63, GRAPHIRE };
1275
{ "Wacom Bamboo1 Medium", WACOM_PKGLEN_GRAPHIRE, 16704, 12064, 511,
1276
63, GRAPHIRE, WACOM_GRAPHIRE_RES, WACOM_GRAPHIRE_RES };
1324
1277
static const struct wacom_features wacom_features_0x60 =
1325
{ "Wacom Volito", WACOM_PKGLEN_GRAPHIRE, 5104, 3712, 511, 63, GRAPHIRE };
1278
{ "Wacom Volito", WACOM_PKGLEN_GRAPHIRE, 5104, 3712, 511,
1279
63, GRAPHIRE, WACOM_VOLITO_RES, WACOM_VOLITO_RES };
1326
1280
static const struct wacom_features wacom_features_0x61 =
1327
{ "Wacom PenStation2", WACOM_PKGLEN_GRAPHIRE, 3250, 2320, 255, 63, GRAPHIRE };
1281
{ "Wacom PenStation2", WACOM_PKGLEN_GRAPHIRE, 3250, 2320, 255,
1282
63, GRAPHIRE, WACOM_VOLITO_RES, WACOM_VOLITO_RES };
1328
1283
static const struct wacom_features wacom_features_0x62 =
1329
{ "Wacom Volito2 4x5", WACOM_PKGLEN_GRAPHIRE, 5104, 3712, 511, 63, GRAPHIRE };
1284
{ "Wacom Volito2 4x5", WACOM_PKGLEN_GRAPHIRE, 5104, 3712, 511,
1285
63, GRAPHIRE, WACOM_VOLITO_RES, WACOM_VOLITO_RES };
1330
1286
static const struct wacom_features wacom_features_0x63 =
1331
{ "Wacom Volito2 2x3", WACOM_PKGLEN_GRAPHIRE, 3248, 2320, 511, 63, GRAPHIRE };
1287
{ "Wacom Volito2 2x3", WACOM_PKGLEN_GRAPHIRE, 3248, 2320, 511,
1288
63, GRAPHIRE, WACOM_VOLITO_RES, WACOM_VOLITO_RES };
1332
1289
static const struct wacom_features wacom_features_0x64 =
1333
{ "Wacom PenPartner2", WACOM_PKGLEN_GRAPHIRE, 3250, 2320, 511, 63, GRAPHIRE };
1290
{ "Wacom PenPartner2", WACOM_PKGLEN_GRAPHIRE, 3250, 2320, 511,
1291
63, GRAPHIRE, WACOM_VOLITO_RES, WACOM_VOLITO_RES };
1334
1292
static const struct wacom_features wacom_features_0x65 =
1335
{ "Wacom Bamboo", WACOM_PKGLEN_BBFUN, 14760, 9225, 511, 63, WACOM_MO };
1293
{ "Wacom Bamboo", WACOM_PKGLEN_BBFUN, 14760, 9225, 511,
1294
63, WACOM_MO, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1336
1295
static const struct wacom_features wacom_features_0x69 =
1337
{ "Wacom Bamboo1", WACOM_PKGLEN_GRAPHIRE, 5104, 3712, 511, 63, GRAPHIRE };
1296
{ "Wacom Bamboo1", WACOM_PKGLEN_GRAPHIRE, 5104, 3712, 511,
1297
63, GRAPHIRE, WACOM_PENPRTN_RES, WACOM_PENPRTN_RES };
1338
1298
static const struct wacom_features wacom_features_0x20 =
1339
{ "Wacom Intuos 4x5", WACOM_PKGLEN_INTUOS, 12700, 10600, 1023, 31, INTUOS };
1299
{ "Wacom Intuos 4x5", WACOM_PKGLEN_INTUOS, 12700, 10600, 1023,
1300
31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1340
1301
static const struct wacom_features wacom_features_0x21 =
1341
{ "Wacom Intuos 6x8", WACOM_PKGLEN_INTUOS, 20320, 16240, 1023, 31, INTUOS };
1302
{ "Wacom Intuos 6x8", WACOM_PKGLEN_INTUOS, 20320, 16240, 1023,
1303
31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1342
1304
static const struct wacom_features wacom_features_0x22 =
1343
{ "Wacom Intuos 9x12", WACOM_PKGLEN_INTUOS, 30480, 24060, 1023, 31, INTUOS };
1305
{ "Wacom Intuos 9x12", WACOM_PKGLEN_INTUOS, 30480, 24060, 1023,
1306
31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1344
1307
static const struct wacom_features wacom_features_0x23 =
1345
{ "Wacom Intuos 12x12", WACOM_PKGLEN_INTUOS, 30480, 31680, 1023, 31, INTUOS };
1308
{ "Wacom Intuos 12x12", WACOM_PKGLEN_INTUOS, 30480, 31680, 1023,
1309
31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1346
1310
static const struct wacom_features wacom_features_0x24 =
1347
{ "Wacom Intuos 12x18", WACOM_PKGLEN_INTUOS, 45720, 31680, 1023, 31, INTUOS };
1311
{ "Wacom Intuos 12x18", WACOM_PKGLEN_INTUOS, 45720, 31680, 1023,
1312
31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1348
1313
static const struct wacom_features wacom_features_0x30 =
1349
{ "Wacom PL400", WACOM_PKGLEN_GRAPHIRE, 5408, 4056, 255, 0, PL };
1314
{ "Wacom PL400", WACOM_PKGLEN_GRAPHIRE, 5408, 4056, 255,
1315
0, PL, WACOM_PL_RES, WACOM_PL_RES };
1350
1316
static const struct wacom_features wacom_features_0x31 =
1351
{ "Wacom PL500", WACOM_PKGLEN_GRAPHIRE, 6144, 4608, 255, 0, PL };
1317
{ "Wacom PL500", WACOM_PKGLEN_GRAPHIRE, 6144, 4608, 255,
1318
0, PL, WACOM_PL_RES, WACOM_PL_RES };
1352
1319
static const struct wacom_features wacom_features_0x32 =
1353
{ "Wacom PL600", WACOM_PKGLEN_GRAPHIRE, 6126, 4604, 255, 0, PL };
1320
{ "Wacom PL600", WACOM_PKGLEN_GRAPHIRE, 6126, 4604, 255,
1321
0, PL, WACOM_PL_RES, WACOM_PL_RES };
1354
1322
static const struct wacom_features wacom_features_0x33 =
1355
{ "Wacom PL600SX", WACOM_PKGLEN_GRAPHIRE, 6260, 5016, 255, 0, PL };
1323
{ "Wacom PL600SX", WACOM_PKGLEN_GRAPHIRE, 6260, 5016, 255,
1324
0, PL, WACOM_PL_RES, WACOM_PL_RES };
1356
1325
static const struct wacom_features wacom_features_0x34 =
1357
{ "Wacom PL550", WACOM_PKGLEN_GRAPHIRE, 6144, 4608, 511, 0, PL };
1326
{ "Wacom PL550", WACOM_PKGLEN_GRAPHIRE, 6144, 4608, 511,
1327
0, PL, WACOM_PL_RES, WACOM_PL_RES };
1358
1328
static const struct wacom_features wacom_features_0x35 =
1359
{ "Wacom PL800", WACOM_PKGLEN_GRAPHIRE, 7220, 5780, 511, 0, PL };
1329
{ "Wacom PL800", WACOM_PKGLEN_GRAPHIRE, 7220, 5780, 511,
1330
0, PL, WACOM_PL_RES, WACOM_PL_RES };
1360
1331
static const struct wacom_features wacom_features_0x37 =
1361
{ "Wacom PL700", WACOM_PKGLEN_GRAPHIRE, 6758, 5406, 511, 0, PL };
1332
{ "Wacom PL700", WACOM_PKGLEN_GRAPHIRE, 6758, 5406, 511,
1333
0, PL, WACOM_PL_RES, WACOM_PL_RES };
1362
1334
static const struct wacom_features wacom_features_0x38 =
1363
{ "Wacom PL510", WACOM_PKGLEN_GRAPHIRE, 6282, 4762, 511, 0, PL };
1335
{ "Wacom PL510", WACOM_PKGLEN_GRAPHIRE, 6282, 4762, 511,
1336
0, PL, WACOM_PL_RES, WACOM_PL_RES };
1364
1337
static const struct wacom_features wacom_features_0x39 =
1365
{ "Wacom DTU710", WACOM_PKGLEN_GRAPHIRE, 34080, 27660, 511, 0, PL };
1338
{ "Wacom DTU710", WACOM_PKGLEN_GRAPHIRE, 34080, 27660, 511,
1339
0, PL, WACOM_PL_RES, WACOM_PL_RES };
1366
1340
static const struct wacom_features wacom_features_0xC4 =
1367
{ "Wacom DTF521", WACOM_PKGLEN_GRAPHIRE, 6282, 4762, 511, 0, PL };
1341
{ "Wacom DTF521", WACOM_PKGLEN_GRAPHIRE, 6282, 4762, 511,
1342
0, PL, WACOM_PL_RES, WACOM_PL_RES };
1368
1343
static const struct wacom_features wacom_features_0xC0 =
1369
{ "Wacom DTF720", WACOM_PKGLEN_GRAPHIRE, 6858, 5506, 511, 0, PL };
1344
{ "Wacom DTF720", WACOM_PKGLEN_GRAPHIRE, 6858, 5506, 511,
1345
0, PL, WACOM_PL_RES, WACOM_PL_RES };
1370
1346
static const struct wacom_features wacom_features_0xC2 =
1371
{ "Wacom DTF720a", WACOM_PKGLEN_GRAPHIRE, 6858, 5506, 511, 0, PL };
1347
{ "Wacom DTF720a", WACOM_PKGLEN_GRAPHIRE, 6858, 5506, 511,
1348
0, PL, WACOM_PL_RES, WACOM_PL_RES };
1372
1349
static const struct wacom_features wacom_features_0x03 =
1373
{ "Wacom Cintiq Partner", WACOM_PKGLEN_GRAPHIRE, 20480, 15360, 511, 0, PTU };
1350
{ "Wacom Cintiq Partner", WACOM_PKGLEN_GRAPHIRE, 20480, 15360, 511,
1351
0, PTU, WACOM_PL_RES, WACOM_PL_RES };
1374
1352
static const struct wacom_features wacom_features_0x41 =
1375
{ "Wacom Intuos2 4x5", WACOM_PKGLEN_INTUOS, 12700, 10600, 1023, 31, INTUOS };
1353
{ "Wacom Intuos2 4x5", WACOM_PKGLEN_INTUOS, 12700, 10600, 1023,
1354
31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1376
1355
static const struct wacom_features wacom_features_0x42 =
1377
{ "Wacom Intuos2 6x8", WACOM_PKGLEN_INTUOS, 20320, 16240, 1023, 31, INTUOS };
1356
{ "Wacom Intuos2 6x8", WACOM_PKGLEN_INTUOS, 20320, 16240, 1023,
1357
31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1378
1358
static const struct wacom_features wacom_features_0x43 =
1379
{ "Wacom Intuos2 9x12", WACOM_PKGLEN_INTUOS, 30480, 24060, 1023, 31, INTUOS };
1359
{ "Wacom Intuos2 9x12", WACOM_PKGLEN_INTUOS, 30480, 24060, 1023,
1360
31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1380
1361
static const struct wacom_features wacom_features_0x44 =
1381
{ "Wacom Intuos2 12x12", WACOM_PKGLEN_INTUOS, 30480, 31680, 1023, 31, INTUOS };
1362
{ "Wacom Intuos2 12x12", WACOM_PKGLEN_INTUOS, 30480, 31680, 1023,
1363
31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1382
1364
static const struct wacom_features wacom_features_0x45 =
1383
{ "Wacom Intuos2 12x18", WACOM_PKGLEN_INTUOS, 45720, 31680, 1023, 31, INTUOS };
1365
{ "Wacom Intuos2 12x18", WACOM_PKGLEN_INTUOS, 45720, 31680, 1023,
1366
31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1384
1367
static const struct wacom_features wacom_features_0xB0 =
1385
{ "Wacom Intuos3 4x5", WACOM_PKGLEN_INTUOS, 25400, 20320, 1023, 63, INTUOS3S };
1368
{ "Wacom Intuos3 4x5", WACOM_PKGLEN_INTUOS, 25400, 20320, 1023,
1369
63, INTUOS3S, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1386
1370
static const struct wacom_features wacom_features_0xB1 =
1387
{ "Wacom Intuos3 6x8", WACOM_PKGLEN_INTUOS, 40640, 30480, 1023, 63, INTUOS3 };
1371
{ "Wacom Intuos3 6x8", WACOM_PKGLEN_INTUOS, 40640, 30480, 1023,
1372
63, INTUOS3, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1388
1373
static const struct wacom_features wacom_features_0xB2 =
1389
{ "Wacom Intuos3 9x12", WACOM_PKGLEN_INTUOS, 60960, 45720, 1023, 63, INTUOS3 };
1374
{ "Wacom Intuos3 9x12", WACOM_PKGLEN_INTUOS, 60960, 45720, 1023,
1375
63, INTUOS3, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1390
1376
static const struct wacom_features wacom_features_0xB3 =
1391
{ "Wacom Intuos3 12x12", WACOM_PKGLEN_INTUOS, 60960, 60960, 1023, 63, INTUOS3L };
1377
{ "Wacom Intuos3 12x12", WACOM_PKGLEN_INTUOS, 60960, 60960, 1023,
1378
63, INTUOS3L, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1392
1379
static const struct wacom_features wacom_features_0xB4 =
1393
{ "Wacom Intuos3 12x19", WACOM_PKGLEN_INTUOS, 97536, 60960, 1023, 63, INTUOS3L };
1380
{ "Wacom Intuos3 12x19", WACOM_PKGLEN_INTUOS, 97536, 60960, 1023,
1381
63, INTUOS3L, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1394
1382
static const struct wacom_features wacom_features_0xB5 =
1395
{ "Wacom Intuos3 6x11", WACOM_PKGLEN_INTUOS, 54204, 31750, 1023, 63, INTUOS3 };
1383
{ "Wacom Intuos3 6x11", WACOM_PKGLEN_INTUOS, 54204, 31750, 1023,
1384
63, INTUOS3, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1396
1385
static const struct wacom_features wacom_features_0xB7 =
1397
{ "Wacom Intuos3 4x6", WACOM_PKGLEN_INTUOS, 31496, 19685, 1023, 63, INTUOS3S };
1386
{ "Wacom Intuos3 4x6", WACOM_PKGLEN_INTUOS, 31496, 19685, 1023,
1387
63, INTUOS3S, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1398
1388
static const struct wacom_features wacom_features_0xB8 =
1399
{ "Wacom Intuos4 4x6", WACOM_PKGLEN_INTUOS, 31496, 19685, 2047, 63, INTUOS4S };
1389
{ "Wacom Intuos4 4x6", WACOM_PKGLEN_INTUOS, 31496, 19685, 2047,
1390
63, INTUOS4S, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1400
1391
static const struct wacom_features wacom_features_0xB9 =
1401
{ "Wacom Intuos4 6x9", WACOM_PKGLEN_INTUOS, 44704, 27940, 2047, 63, INTUOS4 };
1392
{ "Wacom Intuos4 6x9", WACOM_PKGLEN_INTUOS, 44704, 27940, 2047,
1393
63, INTUOS4, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1402
1394
static const struct wacom_features wacom_features_0xBA =
1403
{ "Wacom Intuos4 8x13", WACOM_PKGLEN_INTUOS, 65024, 40640, 2047, 63, INTUOS4L };
1395
{ "Wacom Intuos4 8x13", WACOM_PKGLEN_INTUOS, 65024, 40640, 2047,
1396
63, INTUOS4L, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1404
1397
static const struct wacom_features wacom_features_0xBB =
1405
{ "Wacom Intuos4 12x19", WACOM_PKGLEN_INTUOS, 97536, 60960, 2047, 63, INTUOS4L };
1398
{ "Wacom Intuos4 12x19", WACOM_PKGLEN_INTUOS, 97536, 60960, 2047,
1399
63, INTUOS4L, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1406
1400
static const struct wacom_features wacom_features_0xBC =
1407
{ "Wacom Intuos4 WL", WACOM_PKGLEN_INTUOS, 40840, 25400, 2047, 63, INTUOS4 };
1401
{ "Wacom Intuos4 WL", WACOM_PKGLEN_INTUOS, 40840, 25400, 2047,
1402
63, INTUOS4, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1408
1403
static const struct wacom_features wacom_features_0x3F =
1409
{ "Wacom Cintiq 21UX", WACOM_PKGLEN_INTUOS, 87200, 65600, 1023, 63, CINTIQ };
1404
{ "Wacom Cintiq 21UX", WACOM_PKGLEN_INTUOS, 87200, 65600, 1023,
1405
63, CINTIQ, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1410
1406
static const struct wacom_features wacom_features_0xC5 =
1411
{ "Wacom Cintiq 20WSX", WACOM_PKGLEN_INTUOS, 86680, 54180, 1023, 63, WACOM_BEE };
1407
{ "Wacom Cintiq 20WSX", WACOM_PKGLEN_INTUOS, 86680, 54180, 1023,
1408
63, WACOM_BEE, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1412
1409
static const struct wacom_features wacom_features_0xC6 =
1413
{ "Wacom Cintiq 12WX", WACOM_PKGLEN_INTUOS, 53020, 33440, 1023, 63, WACOM_BEE };
1410
{ "Wacom Cintiq 12WX", WACOM_PKGLEN_INTUOS, 53020, 33440, 1023,
1411
63, WACOM_BEE, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1414
1412
static const struct wacom_features wacom_features_0xC7 =
1415
{ "Wacom DTU1931", WACOM_PKGLEN_GRAPHIRE, 37832, 30305, 511, 0, PL };
1413
{ "Wacom DTU1931", WACOM_PKGLEN_GRAPHIRE, 37832, 30305, 511,
1414
0, PL, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1416
1415
static const struct wacom_features wacom_features_0xCE =
1417
{ "Wacom DTU2231", WACOM_PKGLEN_GRAPHIRE, 47864, 27011, 511, 0, DTU };
1416
{ "Wacom DTU2231", WACOM_PKGLEN_GRAPHIRE, 47864, 27011, 511,
1417
0, DTU, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1418
1418
static const struct wacom_features wacom_features_0xF0 =
1419
{ "Wacom DTU1631", WACOM_PKGLEN_GRAPHIRE, 34623, 19553, 511, 0, DTU };
1419
{ "Wacom DTU1631", WACOM_PKGLEN_GRAPHIRE, 34623, 19553, 511,
1420
0, DTU, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1420
1421
static const struct wacom_features wacom_features_0xCC =
1421
{ "Wacom Cintiq 21UX2", WACOM_PKGLEN_INTUOS, 87200, 65600, 2047, 63, WACOM_21UX2 };
1422
{ "Wacom Cintiq 21UX2", WACOM_PKGLEN_INTUOS, 87200, 65600, 2047,
1423
63, WACOM_21UX2, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
1422
1424
static const struct wacom_features wacom_features_0x90 =
1423
{ "Wacom ISDv4 90", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255, 0, TABLETPC };
1425
{ "Wacom ISDv4 90", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255,
1426
0, TABLETPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1424
1427
static const struct wacom_features wacom_features_0x93 =
1425
{ "Wacom ISDv4 93", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255, 0, TABLETPC };
1428
{ "Wacom ISDv4 93", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255,
1429
0, TABLETPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1426
1430
static const struct wacom_features wacom_features_0x9A =
1427
{ "Wacom ISDv4 9A", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255, 0, TABLETPC };
1431
{ "Wacom ISDv4 9A", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255,
1432
0, TABLETPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1428
1433
static const struct wacom_features wacom_features_0x9F =
1429
{ "Wacom ISDv4 9F", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255, 0, TABLETPC };
1434
{ "Wacom ISDv4 9F", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255,
1435
0, TABLETPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1430
1436
static const struct wacom_features wacom_features_0xE2 =
1431
{ "Wacom ISDv4 E2", WACOM_PKGLEN_TPC2FG, 26202, 16325, 255, 0, TABLETPC2FG };
1437
{ "Wacom ISDv4 E2", WACOM_PKGLEN_TPC2FG, 26202, 16325, 255,
1438
0, TABLETPC2FG, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1432
1439
static const struct wacom_features wacom_features_0xE3 =
1433
{ "Wacom ISDv4 E3", WACOM_PKGLEN_TPC2FG, 26202, 16325, 255, 0, TABLETPC2FG };
1440
{ "Wacom ISDv4 E3", WACOM_PKGLEN_TPC2FG, 26202, 16325, 255,
1441
0, TABLETPC2FG, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1442
static const struct wacom_features wacom_features_0xE6 =
1443
{ "Wacom ISDv4 E6", WACOM_PKGLEN_TPC2FG, 27760, 15694, 255,
1444
0, TABLETPC2FG, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1434
1445
static const struct wacom_features wacom_features_0x47 =
1435
{ "Wacom Intuos2 6x8", WACOM_PKGLEN_INTUOS, 20320, 16240, 1023, 31, INTUOS };
1436
static struct wacom_features wacom_features_0xD0 =
1437
{ "Wacom Bamboo 2FG", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023, 63, BAMBOO_PT };
1438
static struct wacom_features wacom_features_0xD1 =
1439
{ "Wacom Bamboo 2FG 4x5", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023, 63, BAMBOO_PT };
1440
static struct wacom_features wacom_features_0xD2 =
1441
{ "Wacom Bamboo Craft", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023, 63, BAMBOO_PT };
1442
static struct wacom_features wacom_features_0xD3 =
1443
{ "Wacom Bamboo 2FG 6x8", WACOM_PKGLEN_BBFUN, 21648, 13530, 1023, 63, BAMBOO_PT };
1446
{ "Wacom Intuos2 6x8", WACOM_PKGLEN_INTUOS, 20320, 16240, 1023,
1447
31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1448
static const struct wacom_features wacom_features_0xD0 =
1449
{ "Wacom Bamboo 2FG", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023,
1450
63, BAMBOO_PT, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1451
static const struct wacom_features wacom_features_0xD1 =
1452
{ "Wacom Bamboo 2FG 4x5", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023,
1453
63, BAMBOO_PT, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1454
static const struct wacom_features wacom_features_0xD2 =
1455
{ "Wacom Bamboo Craft", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023,
1456
63, BAMBOO_PT, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1457
static const struct wacom_features wacom_features_0xD3 =
1458
{ "Wacom Bamboo 2FG 6x8", WACOM_PKGLEN_BBFUN, 21648, 13530, 1023,
1459
63, BAMBOO_PT, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1444
1460
static const struct wacom_features wacom_features_0xD4 =
1445
{ "Wacom Bamboo Pen", WACOM_PKGLEN_BBFUN, 14720, 9200, 255, 63, BAMBOO_PT };
1446
static struct wacom_features wacom_features_0xD6 =
1447
{ "Wacom BambooPT 2FG 4x5", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023, 63, BAMBOO_PT };
1448
static struct wacom_features wacom_features_0xD7 =
1449
{ "Wacom BambooPT 2FG Small", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023, 63, BAMBOO_PT };
1450
static struct wacom_features wacom_features_0xD8 =
1451
{ "Wacom Bamboo Comic 2FG", WACOM_PKGLEN_BBFUN, 21648, 13530, 1023, 63, BAMBOO_PT };
1452
static struct wacom_features wacom_features_0xDA =
1453
{ "Wacom Bamboo 2FG 4x5 SE", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023, 63, BAMBOO_PT };
1461
{ "Wacom Bamboo Pen", WACOM_PKGLEN_BBFUN, 14720, 9200, 255,
1462
63, BAMBOO_PT, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1463
static const struct wacom_features wacom_features_0xD6 =
1464
{ "Wacom BambooPT 2FG 4x5", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023,
1465
63, BAMBOO_PT, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1466
static const struct wacom_features wacom_features_0xD7 =
1467
{ "Wacom BambooPT 2FG Small", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023,
1468
63, BAMBOO_PT, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1469
static const struct wacom_features wacom_features_0xD8 =
1470
{ "Wacom Bamboo Comic 2FG", WACOM_PKGLEN_BBFUN, 21648, 13530, 1023,
1471
63, BAMBOO_PT, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1472
static const struct wacom_features wacom_features_0xDA =
1473
{ "Wacom Bamboo 2FG 4x5 SE", WACOM_PKGLEN_BBFUN, 14720, 9200, 1023,
1474
63, BAMBOO_PT, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1454
1475
static struct wacom_features wacom_features_0xDB =
1455
{ "Wacom Bamboo 2FG 6x8 SE", WACOM_PKGLEN_BBFUN, 21648, 13530, 1023, 63, BAMBOO_PT };
1476
{ "Wacom Bamboo 2FG 6x8 SE", WACOM_PKGLEN_BBFUN, 21648, 13530, 1023,
1477
63, BAMBOO_PT, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1456
1478
static const struct wacom_features wacom_features_0x6004 =
1457
{ "ISD-V4", WACOM_PKGLEN_GRAPHIRE, 12800, 8000, 255, 0, TABLETPC };
1479
{ "ISD-V4", WACOM_PKGLEN_GRAPHIRE, 12800, 8000, 255,
1480
0, TABLETPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
1459
1482
#define USB_DEVICE_WACOM(prod) \
1460
1483
USB_DEVICE(USB_VENDOR_ID_WACOM, prod), \