diff options
Diffstat (limited to 'drivers/input/tablet')
-rw-r--r-- | drivers/input/tablet/wacom_sys.c | 96 | ||||
-rw-r--r-- | drivers/input/tablet/wacom_wac.c | 125 | ||||
-rw-r--r-- | drivers/input/tablet/wacom_wac.h | 4 |
3 files changed, 207 insertions, 18 deletions
diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c index 0d269212931e..98e9dd692d68 100644 --- a/drivers/input/tablet/wacom_sys.c +++ b/drivers/input/tablet/wacom_sys.c | |||
@@ -233,6 +233,9 @@ static int wacom_parse_logical_collection(unsigned char *report, | |||
233 | * 3rd gen Bamboo Touch no longer define a Digitizer-Finger Pysical | 233 | * 3rd gen Bamboo Touch no longer define a Digitizer-Finger Pysical |
234 | * Collection. Instead they define a Logical Collection with a single | 234 | * Collection. Instead they define a Logical Collection with a single |
235 | * Logical Maximum for both X and Y. | 235 | * Logical Maximum for both X and Y. |
236 | * | ||
237 | * Intuos5 touch interface does not contain useful data. We deal with | ||
238 | * this after returning from this function. | ||
236 | */ | 239 | */ |
237 | static int wacom_parse_hid(struct usb_interface *intf, | 240 | static int wacom_parse_hid(struct usb_interface *intf, |
238 | struct hid_descriptor *hid_desc, | 241 | struct hid_descriptor *hid_desc, |
@@ -574,23 +577,39 @@ static void wacom_remove_shared_data(struct wacom_wac *wacom) | |||
574 | static int wacom_led_control(struct wacom *wacom) | 577 | static int wacom_led_control(struct wacom *wacom) |
575 | { | 578 | { |
576 | unsigned char *buf; | 579 | unsigned char *buf; |
577 | int retval, led = 0; | 580 | int retval; |
578 | 581 | ||
579 | buf = kzalloc(9, GFP_KERNEL); | 582 | buf = kzalloc(9, GFP_KERNEL); |
580 | if (!buf) | 583 | if (!buf) |
581 | return -ENOMEM; | 584 | return -ENOMEM; |
582 | 585 | ||
583 | if (wacom->wacom_wac.features.type == WACOM_21UX2 || | 586 | if (wacom->wacom_wac.features.type >= INTUOS5S && |
584 | wacom->wacom_wac.features.type == WACOM_24HD) | 587 | wacom->wacom_wac.features.type <= INTUOS5L) { |
585 | led = (wacom->led.select[1] << 4) | 0x40; | 588 | /* |
586 | 589 | * Touch Ring and crop mark LED luminance may take on | |
587 | led |= wacom->led.select[0] | 0x4; | 590 | * one of four values: |
588 | 591 | * 0 = Low; 1 = Medium; 2 = High; 3 = Off | |
589 | buf[0] = WAC_CMD_LED_CONTROL; | 592 | */ |
590 | buf[1] = led; | 593 | int ring_led = wacom->led.select[0] & 0x03; |
591 | buf[2] = wacom->led.llv; | 594 | int ring_lum = (((wacom->led.llv & 0x60) >> 5) - 1) & 0x03; |
592 | buf[3] = wacom->led.hlv; | 595 | int crop_lum = 0; |
593 | buf[4] = wacom->led.img_lum; | 596 | |
597 | buf[0] = WAC_CMD_LED_CONTROL; | ||
598 | buf[1] = (crop_lum << 4) | (ring_lum << 2) | (ring_led); | ||
599 | } | ||
600 | else { | ||
601 | int led = wacom->led.select[0] | 0x4; | ||
602 | |||
603 | if (wacom->wacom_wac.features.type == WACOM_21UX2 || | ||
604 | wacom->wacom_wac.features.type == WACOM_24HD) | ||
605 | led |= (wacom->led.select[1] << 4) | 0x40; | ||
606 | |||
607 | buf[0] = WAC_CMD_LED_CONTROL; | ||
608 | buf[1] = led; | ||
609 | buf[2] = wacom->led.llv; | ||
610 | buf[3] = wacom->led.hlv; | ||
611 | buf[4] = wacom->led.img_lum; | ||
612 | } | ||
594 | 613 | ||
595 | retval = wacom_set_report(wacom->intf, 0x03, WAC_CMD_LED_CONTROL, | 614 | retval = wacom_set_report(wacom->intf, 0x03, WAC_CMD_LED_CONTROL, |
596 | buf, 9, WAC_CMD_RETRIES); | 615 | buf, 9, WAC_CMD_RETRIES); |
@@ -783,6 +802,17 @@ static struct attribute_group intuos4_led_attr_group = { | |||
783 | .attrs = intuos4_led_attrs, | 802 | .attrs = intuos4_led_attrs, |
784 | }; | 803 | }; |
785 | 804 | ||
805 | static struct attribute *intuos5_led_attrs[] = { | ||
806 | &dev_attr_status0_luminance.attr, | ||
807 | &dev_attr_status_led0_select.attr, | ||
808 | NULL | ||
809 | }; | ||
810 | |||
811 | static struct attribute_group intuos5_led_attr_group = { | ||
812 | .name = "wacom_led", | ||
813 | .attrs = intuos5_led_attrs, | ||
814 | }; | ||
815 | |||
786 | static int wacom_initialize_leds(struct wacom *wacom) | 816 | static int wacom_initialize_leds(struct wacom *wacom) |
787 | { | 817 | { |
788 | int error; | 818 | int error; |
@@ -812,6 +842,19 @@ static int wacom_initialize_leds(struct wacom *wacom) | |||
812 | &cintiq_led_attr_group); | 842 | &cintiq_led_attr_group); |
813 | break; | 843 | break; |
814 | 844 | ||
845 | case INTUOS5S: | ||
846 | case INTUOS5: | ||
847 | case INTUOS5L: | ||
848 | wacom->led.select[0] = 0; | ||
849 | wacom->led.select[1] = 0; | ||
850 | wacom->led.llv = 32; | ||
851 | wacom->led.hlv = 0; | ||
852 | wacom->led.img_lum = 0; | ||
853 | |||
854 | error = sysfs_create_group(&wacom->intf->dev.kobj, | ||
855 | &intuos5_led_attr_group); | ||
856 | break; | ||
857 | |||
815 | default: | 858 | default: |
816 | return 0; | 859 | return 0; |
817 | } | 860 | } |
@@ -840,6 +883,13 @@ static void wacom_destroy_leds(struct wacom *wacom) | |||
840 | sysfs_remove_group(&wacom->intf->dev.kobj, | 883 | sysfs_remove_group(&wacom->intf->dev.kobj, |
841 | &cintiq_led_attr_group); | 884 | &cintiq_led_attr_group); |
842 | break; | 885 | break; |
886 | |||
887 | case INTUOS5S: | ||
888 | case INTUOS5: | ||
889 | case INTUOS5L: | ||
890 | sysfs_remove_group(&wacom->intf->dev.kobj, | ||
891 | &intuos5_led_attr_group); | ||
892 | break; | ||
843 | } | 893 | } |
844 | } | 894 | } |
845 | 895 | ||
@@ -1040,6 +1090,28 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i | |||
1040 | if (error) | 1090 | if (error) |
1041 | goto fail3; | 1091 | goto fail3; |
1042 | 1092 | ||
1093 | /* | ||
1094 | * Intuos5 has no useful data about its touch interface in its | ||
1095 | * HID descriptor. If this is the touch interface (wMaxPacketSize | ||
1096 | * of WACOM_PKGLEN_BBTOUCH3), override the table values. | ||
1097 | */ | ||
1098 | if (features->type >= INTUOS5S && features->type <= INTUOS5L) { | ||
1099 | if (endpoint->wMaxPacketSize == WACOM_PKGLEN_BBTOUCH3) { | ||
1100 | features->device_type = BTN_TOOL_FINGER; | ||
1101 | features->pktlen = WACOM_PKGLEN_BBTOUCH3; | ||
1102 | |||
1103 | features->x_phy = | ||
1104 | (features->x_max * 100) / features->x_resolution; | ||
1105 | features->y_phy = | ||
1106 | (features->y_max * 100) / features->y_resolution; | ||
1107 | |||
1108 | features->x_max = 4096; | ||
1109 | features->y_max = 4096; | ||
1110 | } else { | ||
1111 | features->device_type = BTN_TOOL_PEN; | ||
1112 | } | ||
1113 | } | ||
1114 | |||
1043 | wacom_setup_device_quirks(features); | 1115 | wacom_setup_device_quirks(features); |
1044 | 1116 | ||
1045 | strlcpy(wacom_wac->name, features->name, sizeof(wacom_wac->name)); | 1117 | strlcpy(wacom_wac->name, features->name, sizeof(wacom_wac->name)); |
diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c index cecd35c8f0b3..d96e186f71dc 100644 --- a/drivers/input/tablet/wacom_wac.c +++ b/drivers/input/tablet/wacom_wac.c | |||
@@ -321,6 +321,9 @@ static int wacom_intuos_inout(struct wacom_wac *wacom) | |||
321 | 321 | ||
322 | /* Enter report */ | 322 | /* Enter report */ |
323 | if ((data[1] & 0xfc) == 0xc0) { | 323 | if ((data[1] & 0xfc) == 0xc0) { |
324 | if (features->type >= INTUOS5S && features->type <= INTUOS5L) | ||
325 | wacom->shared->stylus_in_proximity = true; | ||
326 | |||
324 | /* serial number of the tool */ | 327 | /* serial number of the tool */ |
325 | wacom->serial[idx] = ((data[3] & 0x0f) << 28) + | 328 | wacom->serial[idx] = ((data[3] & 0x0f) << 28) + |
326 | (data[4] << 20) + (data[5] << 12) + | 329 | (data[4] << 20) + (data[5] << 12) + |
@@ -406,6 +409,9 @@ static int wacom_intuos_inout(struct wacom_wac *wacom) | |||
406 | 409 | ||
407 | /* Exit report */ | 410 | /* Exit report */ |
408 | if ((data[1] & 0xfe) == 0x80) { | 411 | if ((data[1] & 0xfe) == 0x80) { |
412 | if (features->type >= INTUOS5S && features->type <= INTUOS5L) | ||
413 | wacom->shared->stylus_in_proximity = false; | ||
414 | |||
409 | /* | 415 | /* |
410 | * Reset all states otherwise we lose the initial states | 416 | * Reset all states otherwise we lose the initial states |
411 | * when in-prox next time | 417 | * when in-prox next time |
@@ -452,6 +458,7 @@ static void wacom_intuos_general(struct wacom_wac *wacom) | |||
452 | if ((data[1] & 0xb8) == 0xa0) { | 458 | if ((data[1] & 0xb8) == 0xa0) { |
453 | t = (data[6] << 2) | ((data[7] >> 6) & 3); | 459 | t = (data[6] << 2) | ((data[7] >> 6) & 3); |
454 | if ((features->type >= INTUOS4S && features->type <= INTUOS4L) || | 460 | if ((features->type >= INTUOS4S && features->type <= INTUOS4L) || |
461 | (features->type >= INTUOS5S && features->type <= INTUOS5L) || | ||
455 | features->type == WACOM_21UX2 || features->type == WACOM_24HD) { | 462 | features->type == WACOM_21UX2 || features->type == WACOM_24HD) { |
456 | t = (t << 1) | (data[1] & 1); | 463 | t = (t << 1) | (data[1] & 1); |
457 | } | 464 | } |
@@ -483,7 +490,8 @@ static int wacom_intuos_irq(struct wacom_wac *wacom) | |||
483 | int idx = 0, result; | 490 | int idx = 0, result; |
484 | 491 | ||
485 | if (data[0] != WACOM_REPORT_PENABLED && data[0] != WACOM_REPORT_INTUOSREAD | 492 | if (data[0] != WACOM_REPORT_PENABLED && data[0] != WACOM_REPORT_INTUOSREAD |
486 | && data[0] != WACOM_REPORT_INTUOSWRITE && data[0] != WACOM_REPORT_INTUOSPAD) { | 493 | && data[0] != WACOM_REPORT_INTUOSWRITE && data[0] != WACOM_REPORT_INTUOSPAD |
494 | && data[0] != WACOM_REPORT_INTUOS5PAD) { | ||
487 | dbg("wacom_intuos_irq: received unknown report #%d", data[0]); | 495 | dbg("wacom_intuos_irq: received unknown report #%d", data[0]); |
488 | return 0; | 496 | return 0; |
489 | } | 497 | } |
@@ -493,7 +501,7 @@ static int wacom_intuos_irq(struct wacom_wac *wacom) | |||
493 | idx = data[1] & 0x01; | 501 | idx = data[1] & 0x01; |
494 | 502 | ||
495 | /* pad packets. Works as a second tool and is always in prox */ | 503 | /* pad packets. Works as a second tool and is always in prox */ |
496 | if (data[0] == WACOM_REPORT_INTUOSPAD) { | 504 | if (data[0] == WACOM_REPORT_INTUOSPAD || data[0] == WACOM_REPORT_INTUOS5PAD) { |
497 | if (features->type >= INTUOS4S && features->type <= INTUOS4L) { | 505 | if (features->type >= INTUOS4S && features->type <= INTUOS4L) { |
498 | input_report_key(input, BTN_0, (data[2] & 0x01)); | 506 | input_report_key(input, BTN_0, (data[2] & 0x01)); |
499 | input_report_key(input, BTN_1, (data[3] & 0x01)); | 507 | input_report_key(input, BTN_1, (data[3] & 0x01)); |
@@ -569,6 +577,34 @@ static int wacom_intuos_irq(struct wacom_wac *wacom) | |||
569 | input_report_key(input, wacom->tool[1], 0); | 577 | input_report_key(input, wacom->tool[1], 0); |
570 | input_report_abs(input, ABS_MISC, 0); | 578 | input_report_abs(input, ABS_MISC, 0); |
571 | } | 579 | } |
580 | } else if (features->type >= INTUOS5S && features->type <= INTUOS5L) { | ||
581 | int i; | ||
582 | |||
583 | /* Touch ring mode switch has no capacitive sensor */ | ||
584 | input_report_key(input, BTN_0, (data[3] & 0x01)); | ||
585 | |||
586 | /* | ||
587 | * ExpressKeys on Intuos5 have a capacitive sensor in | ||
588 | * addition to the mechanical switch. Switch data is | ||
589 | * stored in data[4], capacitive data in data[5]. | ||
590 | */ | ||
591 | for (i = 0; i < 8; i++) | ||
592 | input_report_key(input, BTN_1 + i, data[4] & (1 << i)); | ||
593 | |||
594 | if (data[2] & 0x80) { | ||
595 | input_report_abs(input, ABS_WHEEL, (data[2] & 0x7f)); | ||
596 | } else { | ||
597 | /* Out of proximity, clear wheel value. */ | ||
598 | input_report_abs(input, ABS_WHEEL, 0); | ||
599 | } | ||
600 | |||
601 | if (data[2] | (data[3] & 0x01) | data[4]) { | ||
602 | input_report_key(input, wacom->tool[1], 1); | ||
603 | input_report_abs(input, ABS_MISC, PAD_DEVICE_ID); | ||
604 | } else { | ||
605 | input_report_key(input, wacom->tool[1], 0); | ||
606 | input_report_abs(input, ABS_MISC, 0); | ||
607 | } | ||
572 | } else { | 608 | } else { |
573 | if (features->type == WACOM_21UX2) { | 609 | if (features->type == WACOM_21UX2) { |
574 | input_report_key(input, BTN_0, (data[5] & 0x01)); | 610 | input_report_key(input, BTN_0, (data[5] & 0x01)); |
@@ -632,7 +668,9 @@ static int wacom_intuos_irq(struct wacom_wac *wacom) | |||
632 | (features->type == INTUOS3 || | 668 | (features->type == INTUOS3 || |
633 | features->type == INTUOS3S || | 669 | features->type == INTUOS3S || |
634 | features->type == INTUOS4 || | 670 | features->type == INTUOS4 || |
635 | features->type == INTUOS4S)) { | 671 | features->type == INTUOS4S || |
672 | features->type == INTUOS5 || | ||
673 | features->type == INTUOS5S)) { | ||
636 | 674 | ||
637 | return 0; | 675 | return 0; |
638 | } | 676 | } |
@@ -685,7 +723,8 @@ static int wacom_intuos_irq(struct wacom_wac *wacom) | |||
685 | 723 | ||
686 | } else if (wacom->tool[idx] == BTN_TOOL_MOUSE) { | 724 | } else if (wacom->tool[idx] == BTN_TOOL_MOUSE) { |
687 | /* I4 mouse */ | 725 | /* I4 mouse */ |
688 | if (features->type >= INTUOS4S && features->type <= INTUOS4L) { | 726 | if ((features->type >= INTUOS4S && features->type <= INTUOS4L) || |
727 | (features->type >= INTUOS5S && features->type <= INTUOS5L)) { | ||
689 | input_report_key(input, BTN_LEFT, data[6] & 0x01); | 728 | input_report_key(input, BTN_LEFT, data[6] & 0x01); |
690 | input_report_key(input, BTN_MIDDLE, data[6] & 0x02); | 729 | input_report_key(input, BTN_MIDDLE, data[6] & 0x02); |
691 | input_report_key(input, BTN_RIGHT, data[6] & 0x04); | 730 | input_report_key(input, BTN_RIGHT, data[6] & 0x04); |
@@ -712,7 +751,7 @@ static int wacom_intuos_irq(struct wacom_wac *wacom) | |||
712 | } | 751 | } |
713 | } | 752 | } |
714 | } else if ((features->type < INTUOS3S || features->type == INTUOS3L || | 753 | } else if ((features->type < INTUOS3S || features->type == INTUOS3L || |
715 | features->type == INTUOS4L) && | 754 | features->type == INTUOS4L || features->type == INTUOS5L) && |
716 | wacom->tool[idx] == BTN_TOOL_LENS) { | 755 | wacom->tool[idx] == BTN_TOOL_LENS) { |
717 | /* Lens cursor packets */ | 756 | /* Lens cursor packets */ |
718 | input_report_key(input, BTN_LEFT, data[8] & 0x01); | 757 | input_report_key(input, BTN_LEFT, data[8] & 0x01); |
@@ -1114,6 +1153,15 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len) | |||
1114 | sync = wacom_intuos_irq(wacom_wac); | 1153 | sync = wacom_intuos_irq(wacom_wac); |
1115 | break; | 1154 | break; |
1116 | 1155 | ||
1156 | case INTUOS5S: | ||
1157 | case INTUOS5: | ||
1158 | case INTUOS5L: | ||
1159 | if (len == WACOM_PKGLEN_BBTOUCH3) | ||
1160 | sync = wacom_bpt3_touch(wacom_wac); | ||
1161 | else | ||
1162 | sync = wacom_intuos_irq(wacom_wac); | ||
1163 | break; | ||
1164 | |||
1117 | case TABLETPC: | 1165 | case TABLETPC: |
1118 | case TABLETPC2FG: | 1166 | case TABLETPC2FG: |
1119 | sync = wacom_tpc_irq(wacom_wac, len); | 1167 | sync = wacom_tpc_irq(wacom_wac, len); |
@@ -1188,7 +1236,8 @@ void wacom_setup_device_quirks(struct wacom_features *features) | |||
1188 | 1236 | ||
1189 | /* these device have multiple inputs */ | 1237 | /* these device have multiple inputs */ |
1190 | if (features->type == TABLETPC || features->type == TABLETPC2FG || | 1238 | if (features->type == TABLETPC || features->type == TABLETPC2FG || |
1191 | features->type == BAMBOO_PT || features->type == WIRELESS) | 1239 | features->type == BAMBOO_PT || features->type == WIRELESS || |
1240 | (features->type >= INTUOS5S && features->type <= INTUOS5L)) | ||
1192 | features->quirks |= WACOM_QUIRK_MULTI_INPUT; | 1241 | features->quirks |= WACOM_QUIRK_MULTI_INPUT; |
1193 | 1242 | ||
1194 | /* quirk for bamboo touch with 2 low res touches */ | 1243 | /* quirk for bamboo touch with 2 low res touches */ |
@@ -1355,6 +1404,50 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev, | |||
1355 | wacom_setup_intuos(wacom_wac); | 1404 | wacom_setup_intuos(wacom_wac); |
1356 | break; | 1405 | break; |
1357 | 1406 | ||
1407 | case INTUOS5: | ||
1408 | case INTUOS5L: | ||
1409 | if (features->device_type == BTN_TOOL_PEN) { | ||
1410 | __set_bit(BTN_7, input_dev->keybit); | ||
1411 | __set_bit(BTN_8, input_dev->keybit); | ||
1412 | } | ||
1413 | /* fall through */ | ||
1414 | |||
1415 | case INTUOS5S: | ||
1416 | __set_bit(INPUT_PROP_POINTER, input_dev->propbit); | ||
1417 | |||
1418 | if (features->device_type == BTN_TOOL_PEN) { | ||
1419 | for (i = 0; i < 7; i++) | ||
1420 | __set_bit(BTN_0 + i, input_dev->keybit); | ||
1421 | |||
1422 | input_set_abs_params(input_dev, ABS_DISTANCE, 0, | ||
1423 | features->distance_max, | ||
1424 | 0, 0); | ||
1425 | |||
1426 | input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0); | ||
1427 | |||
1428 | wacom_setup_intuos(wacom_wac); | ||
1429 | } else if (features->device_type == BTN_TOOL_FINGER) { | ||
1430 | __clear_bit(ABS_MISC, input_dev->absbit); | ||
1431 | |||
1432 | __set_bit(BTN_TOOL_FINGER, input_dev->keybit); | ||
1433 | __set_bit(BTN_TOOL_DOUBLETAP, input_dev->keybit); | ||
1434 | __set_bit(BTN_TOOL_TRIPLETAP, input_dev->keybit); | ||
1435 | __set_bit(BTN_TOOL_QUADTAP, input_dev->keybit); | ||
1436 | |||
1437 | input_mt_init_slots(input_dev, 16); | ||
1438 | |||
1439 | input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR, | ||
1440 | 0, 255, 0, 0); | ||
1441 | |||
1442 | input_set_abs_params(input_dev, ABS_MT_POSITION_X, | ||
1443 | 0, features->x_max, | ||
1444 | features->x_fuzz, 0); | ||
1445 | input_set_abs_params(input_dev, ABS_MT_POSITION_Y, | ||
1446 | 0, features->y_max, | ||
1447 | features->y_fuzz, 0); | ||
1448 | } | ||
1449 | break; | ||
1450 | |||
1358 | case INTUOS4: | 1451 | case INTUOS4: |
1359 | case INTUOS4L: | 1452 | case INTUOS4L: |
1360 | __set_bit(BTN_7, input_dev->keybit); | 1453 | __set_bit(BTN_7, input_dev->keybit); |
@@ -1629,6 +1722,21 @@ static const struct wacom_features wacom_features_0xBB = | |||
1629 | static const struct wacom_features wacom_features_0xBC = | 1722 | static const struct wacom_features wacom_features_0xBC = |
1630 | { "Wacom Intuos4 WL", WACOM_PKGLEN_INTUOS, 40840, 25400, 2047, | 1723 | { "Wacom Intuos4 WL", WACOM_PKGLEN_INTUOS, 40840, 25400, 2047, |
1631 | 63, INTUOS4, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES }; | 1724 | 63, INTUOS4, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES }; |
1725 | static const struct wacom_features wacom_features_0x26 = | ||
1726 | { "Wacom Intuos5 touch S", WACOM_PKGLEN_INTUOS, 31496, 19685, 2047, | ||
1727 | 63, INTUOS5S, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES }; | ||
1728 | static const struct wacom_features wacom_features_0x27 = | ||
1729 | { "Wacom Intuos5 touch M", WACOM_PKGLEN_INTUOS, 44704, 27940, 2047, | ||
1730 | 63, INTUOS5, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES }; | ||
1731 | static const struct wacom_features wacom_features_0x28 = | ||
1732 | { "Wacom Intuos5 touch L", WACOM_PKGLEN_INTUOS, 65024, 40640, 2047, | ||
1733 | 63, INTUOS5L, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES }; | ||
1734 | static const struct wacom_features wacom_features_0x29 = | ||
1735 | { "Wacom Intuos5 S", WACOM_PKGLEN_INTUOS, 31496, 19685, 2047, | ||
1736 | 63, INTUOS5S, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES }; | ||
1737 | static const struct wacom_features wacom_features_0x2A = | ||
1738 | { "Wacom Intuos5 M", WACOM_PKGLEN_INTUOS, 44704, 27940, 2047, | ||
1739 | 63, INTUOS5, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES }; | ||
1632 | static const struct wacom_features wacom_features_0xF4 = | 1740 | static const struct wacom_features wacom_features_0xF4 = |
1633 | { "Wacom Cintiq 24HD", WACOM_PKGLEN_INTUOS, 104480, 65600, 2047, | 1741 | { "Wacom Cintiq 24HD", WACOM_PKGLEN_INTUOS, 104480, 65600, 2047, |
1634 | 63, WACOM_24HD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES }; | 1742 | 63, WACOM_24HD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES }; |
@@ -1801,6 +1909,11 @@ const struct usb_device_id wacom_ids[] = { | |||
1801 | { USB_DEVICE_WACOM(0xBA) }, | 1909 | { USB_DEVICE_WACOM(0xBA) }, |
1802 | { USB_DEVICE_WACOM(0xBB) }, | 1910 | { USB_DEVICE_WACOM(0xBB) }, |
1803 | { USB_DEVICE_WACOM(0xBC) }, | 1911 | { USB_DEVICE_WACOM(0xBC) }, |
1912 | { USB_DEVICE_WACOM(0x26) }, | ||
1913 | { USB_DEVICE_WACOM(0x27) }, | ||
1914 | { USB_DEVICE_WACOM(0x28) }, | ||
1915 | { USB_DEVICE_WACOM(0x29) }, | ||
1916 | { USB_DEVICE_WACOM(0x2A) }, | ||
1804 | { USB_DEVICE_WACOM(0x3F) }, | 1917 | { USB_DEVICE_WACOM(0x3F) }, |
1805 | { USB_DEVICE_WACOM(0xC5) }, | 1918 | { USB_DEVICE_WACOM(0xC5) }, |
1806 | { USB_DEVICE_WACOM(0xC6) }, | 1919 | { USB_DEVICE_WACOM(0xC6) }, |
diff --git a/drivers/input/tablet/wacom_wac.h b/drivers/input/tablet/wacom_wac.h index ba5a334e54d6..17ba1868f0cd 100644 --- a/drivers/input/tablet/wacom_wac.h +++ b/drivers/input/tablet/wacom_wac.h | |||
@@ -38,6 +38,7 @@ | |||
38 | #define WACOM_REPORT_INTUOSREAD 5 | 38 | #define WACOM_REPORT_INTUOSREAD 5 |
39 | #define WACOM_REPORT_INTUOSWRITE 6 | 39 | #define WACOM_REPORT_INTUOSWRITE 6 |
40 | #define WACOM_REPORT_INTUOSPAD 12 | 40 | #define WACOM_REPORT_INTUOSPAD 12 |
41 | #define WACOM_REPORT_INTUOS5PAD 3 | ||
41 | #define WACOM_REPORT_TPC1FG 6 | 42 | #define WACOM_REPORT_TPC1FG 6 |
42 | #define WACOM_REPORT_TPC2FG 13 | 43 | #define WACOM_REPORT_TPC2FG 13 |
43 | #define WACOM_REPORT_TPCHID 15 | 44 | #define WACOM_REPORT_TPCHID 15 |
@@ -65,6 +66,9 @@ enum { | |||
65 | INTUOS4S, | 66 | INTUOS4S, |
66 | INTUOS4, | 67 | INTUOS4, |
67 | INTUOS4L, | 68 | INTUOS4L, |
69 | INTUOS5S, | ||
70 | INTUOS5, | ||
71 | INTUOS5L, | ||
68 | WACOM_24HD, | 72 | WACOM_24HD, |
69 | WACOM_21UX2, | 73 | WACOM_21UX2, |
70 | CINTIQ, | 74 | CINTIQ, |