diff options
author | Jason Gerecke <killertofu@gmail.com> | 2011-12-12 03:11:45 -0500 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2011-12-12 03:14:16 -0500 |
commit | 803296b678a43005e3bc0aaa1951d211bd76a054 (patch) | |
tree | 6a7d59c4757e1c7197c11fd5cb3ada45b4087eb5 /drivers/input | |
parent | ff803ed4ddbbf9f4bbd439b5e23dc25a4e0cce7a (diff) |
Input: wacom - add support for Cintiq 24HD
Adds support for the Cintiq 24HD. There are two quirks about this
model that haven't been seen in prior tablets. First, a second
touch ring is present on this display; it is being exposed via the
ABS_THROTTLE axis. Second, three capacitive buttons at the top of
the unit are available; though physically a touch strip, we report
the use of these buttons with generic KEY_ events.
Signed-off-by: Jason Gerecke <killertofu@gmail.com>
Reviewed-by: Ping Cheng <pingc@wacom.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Diffstat (limited to 'drivers/input')
-rw-r--r-- | drivers/input/tablet/wacom_wac.c | 77 | ||||
-rw-r--r-- | drivers/input/tablet/wacom_wac.h | 1 |
2 files changed, 77 insertions, 1 deletions
diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c index ecfcbc8144dc..a22e7789d91b 100644 --- a/drivers/input/tablet/wacom_wac.c +++ b/drivers/input/tablet/wacom_wac.c | |||
@@ -452,7 +452,7 @@ static void wacom_intuos_general(struct wacom_wac *wacom) | |||
452 | if ((data[1] & 0xb8) == 0xa0) { | 452 | if ((data[1] & 0xb8) == 0xa0) { |
453 | t = (data[6] << 2) | ((data[7] >> 6) & 3); | 453 | t = (data[6] << 2) | ((data[7] >> 6) & 3); |
454 | if ((features->type >= INTUOS4S && features->type <= INTUOS4L) || | 454 | if ((features->type >= INTUOS4S && features->type <= INTUOS4L) || |
455 | features->type == WACOM_21UX2) { | 455 | features->type == WACOM_21UX2 || features->type == WACOM_24HD) { |
456 | t = (t << 1) | (data[1] & 1); | 456 | t = (t << 1) | (data[1] & 1); |
457 | } | 457 | } |
458 | input_report_abs(input, ABS_PRESSURE, t); | 458 | input_report_abs(input, ABS_PRESSURE, t); |
@@ -519,6 +519,56 @@ static int wacom_intuos_irq(struct wacom_wac *wacom) | |||
519 | input_report_key(input, wacom->tool[1], 0); | 519 | input_report_key(input, wacom->tool[1], 0); |
520 | input_report_abs(input, ABS_MISC, 0); | 520 | input_report_abs(input, ABS_MISC, 0); |
521 | } | 521 | } |
522 | } else if (features->type == WACOM_24HD) { | ||
523 | input_report_key(input, BTN_0, (data[6] & 0x01)); | ||
524 | input_report_key(input, BTN_1, (data[6] & 0x02)); | ||
525 | input_report_key(input, BTN_2, (data[6] & 0x04)); | ||
526 | input_report_key(input, BTN_3, (data[6] & 0x08)); | ||
527 | input_report_key(input, BTN_4, (data[6] & 0x10)); | ||
528 | input_report_key(input, BTN_5, (data[6] & 0x20)); | ||
529 | input_report_key(input, BTN_6, (data[6] & 0x40)); | ||
530 | input_report_key(input, BTN_7, (data[6] & 0x80)); | ||
531 | input_report_key(input, BTN_8, (data[8] & 0x01)); | ||
532 | input_report_key(input, BTN_9, (data[8] & 0x02)); | ||
533 | input_report_key(input, BTN_A, (data[8] & 0x04)); | ||
534 | input_report_key(input, BTN_B, (data[8] & 0x08)); | ||
535 | input_report_key(input, BTN_C, (data[8] & 0x10)); | ||
536 | input_report_key(input, BTN_X, (data[8] & 0x20)); | ||
537 | input_report_key(input, BTN_Y, (data[8] & 0x40)); | ||
538 | input_report_key(input, BTN_Z, (data[8] & 0x80)); | ||
539 | |||
540 | /* | ||
541 | * Three "buttons" are available on the 24HD which are | ||
542 | * physically implemented as a touchstrip. Each button | ||
543 | * is approximately 3 bits wide with a 2 bit spacing. | ||
544 | * The raw touchstrip bits are stored at: | ||
545 | * ((data[3] & 0x1f) << 8) | data[4]) | ||
546 | */ | ||
547 | input_report_key(input, KEY_PROG1, data[4] & 0x07); | ||
548 | input_report_key(input, KEY_PROG2, data[4] & 0xE0); | ||
549 | input_report_key(input, KEY_PROG3, data[3] & 0x1C); | ||
550 | |||
551 | if (data[1] & 0x80) { | ||
552 | input_report_abs(input, ABS_WHEEL, (data[1] & 0x7f)); | ||
553 | } else { | ||
554 | /* Out of proximity, clear wheel value. */ | ||
555 | input_report_abs(input, ABS_WHEEL, 0); | ||
556 | } | ||
557 | |||
558 | if (data[2] & 0x80) { | ||
559 | input_report_abs(input, ABS_THROTTLE, (data[2] & 0x7f)); | ||
560 | } else { | ||
561 | /* Out of proximity, clear second wheel value. */ | ||
562 | input_report_abs(input, ABS_THROTTLE, 0); | ||
563 | } | ||
564 | |||
565 | if (data[1] | data[2] | (data[3] & 0x1f) | data[4] | data[6] | data[8]) { | ||
566 | input_report_key(input, wacom->tool[1], 1); | ||
567 | input_report_abs(input, ABS_MISC, PAD_DEVICE_ID); | ||
568 | } else { | ||
569 | input_report_key(input, wacom->tool[1], 0); | ||
570 | input_report_abs(input, ABS_MISC, 0); | ||
571 | } | ||
522 | } else { | 572 | } else { |
523 | if (features->type == WACOM_21UX2) { | 573 | if (features->type == WACOM_21UX2) { |
524 | input_report_key(input, BTN_0, (data[5] & 0x01)); | 574 | input_report_key(input, BTN_0, (data[5] & 0x01)); |
@@ -1019,6 +1069,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len) | |||
1019 | case CINTIQ: | 1069 | case CINTIQ: |
1020 | case WACOM_BEE: | 1070 | case WACOM_BEE: |
1021 | case WACOM_21UX2: | 1071 | case WACOM_21UX2: |
1072 | case WACOM_24HD: | ||
1022 | sync = wacom_intuos_irq(wacom_wac); | 1073 | sync = wacom_intuos_irq(wacom_wac); |
1023 | break; | 1074 | break; |
1024 | 1075 | ||
@@ -1174,6 +1225,26 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev, | |||
1174 | __set_bit(INPUT_PROP_POINTER, input_dev->propbit); | 1225 | __set_bit(INPUT_PROP_POINTER, input_dev->propbit); |
1175 | break; | 1226 | break; |
1176 | 1227 | ||
1228 | case WACOM_24HD: | ||
1229 | __set_bit(BTN_A, input_dev->keybit); | ||
1230 | __set_bit(BTN_B, input_dev->keybit); | ||
1231 | __set_bit(BTN_C, input_dev->keybit); | ||
1232 | __set_bit(BTN_X, input_dev->keybit); | ||
1233 | __set_bit(BTN_Y, input_dev->keybit); | ||
1234 | __set_bit(BTN_Z, input_dev->keybit); | ||
1235 | |||
1236 | for (i = 0; i < 10; i++) | ||
1237 | __set_bit(BTN_0 + i, input_dev->keybit); | ||
1238 | |||
1239 | __set_bit(KEY_PROG1, input_dev->keybit); | ||
1240 | __set_bit(KEY_PROG2, input_dev->keybit); | ||
1241 | __set_bit(KEY_PROG3, input_dev->keybit); | ||
1242 | |||
1243 | input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0); | ||
1244 | input_set_abs_params(input_dev, ABS_THROTTLE, 0, 71, 0, 0); | ||
1245 | wacom_setup_cintiq(wacom_wac); | ||
1246 | break; | ||
1247 | |||
1177 | case WACOM_21UX2: | 1248 | case WACOM_21UX2: |
1178 | __set_bit(BTN_A, input_dev->keybit); | 1249 | __set_bit(BTN_A, input_dev->keybit); |
1179 | __set_bit(BTN_B, input_dev->keybit); | 1250 | __set_bit(BTN_B, input_dev->keybit); |
@@ -1503,6 +1574,9 @@ static const struct wacom_features wacom_features_0xBB = | |||
1503 | static const struct wacom_features wacom_features_0xBC = | 1574 | static const struct wacom_features wacom_features_0xBC = |
1504 | { "Wacom Intuos4 WL", WACOM_PKGLEN_INTUOS, 40840, 25400, 2047, | 1575 | { "Wacom Intuos4 WL", WACOM_PKGLEN_INTUOS, 40840, 25400, 2047, |
1505 | 63, INTUOS4, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES }; | 1576 | 63, INTUOS4, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES }; |
1577 | static const struct wacom_features wacom_features_0xF4 = | ||
1578 | { "Wacom Cintiq 24HD", WACOM_PKGLEN_INTUOS, 104480, 65600, 2047, | ||
1579 | 63, WACOM_24HD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES }; | ||
1506 | static const struct wacom_features wacom_features_0x3F = | 1580 | static const struct wacom_features wacom_features_0x3F = |
1507 | { "Wacom Cintiq 21UX", WACOM_PKGLEN_INTUOS, 87200, 65600, 1023, | 1581 | { "Wacom Cintiq 21UX", WACOM_PKGLEN_INTUOS, 87200, 65600, 1023, |
1508 | 63, CINTIQ, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES }; | 1582 | 63, CINTIQ, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES }; |
@@ -1702,6 +1776,7 @@ const struct usb_device_id wacom_ids[] = { | |||
1702 | { USB_DEVICE_WACOM(0xE3) }, | 1776 | { USB_DEVICE_WACOM(0xE3) }, |
1703 | { USB_DEVICE_WACOM(0xE6) }, | 1777 | { USB_DEVICE_WACOM(0xE6) }, |
1704 | { USB_DEVICE_WACOM(0x47) }, | 1778 | { USB_DEVICE_WACOM(0x47) }, |
1779 | { USB_DEVICE_WACOM(0xF4) }, | ||
1705 | { USB_DEVICE_LENOVO(0x6004) }, | 1780 | { USB_DEVICE_LENOVO(0x6004) }, |
1706 | { } | 1781 | { } |
1707 | }; | 1782 | }; |
diff --git a/drivers/input/tablet/wacom_wac.h b/drivers/input/tablet/wacom_wac.h index 27f1d1c203a1..050acaefee7d 100644 --- a/drivers/input/tablet/wacom_wac.h +++ b/drivers/input/tablet/wacom_wac.h | |||
@@ -59,6 +59,7 @@ enum { | |||
59 | INTUOS4S, | 59 | INTUOS4S, |
60 | INTUOS4, | 60 | INTUOS4, |
61 | INTUOS4L, | 61 | INTUOS4L, |
62 | WACOM_24HD, | ||
62 | WACOM_21UX2, | 63 | WACOM_21UX2, |
63 | CINTIQ, | 64 | CINTIQ, |
64 | WACOM_BEE, | 65 | WACOM_BEE, |