161 lines
6.1 KiB
Diff
161 lines
6.1 KiB
Diff
From: Jason Gerecke <killertofu@gmail.com>
|
|
Date: Mon, 12 Dec 2011 00:11:45 -0800
|
|
Subject: Input: wacom - add support for Cintiq 24HD
|
|
|
|
commit 803296b678a43005e3bc0aaa1951d211bd76a054 upstream.
|
|
|
|
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>
|
|
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
|
|
---
|
|
drivers/input/tablet/wacom_wac.c | 77 +++++++++++++++++++++++++++++++++++++-
|
|
drivers/input/tablet/wacom_wac.h | 1 +
|
|
2 files changed, 77 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c
|
|
index 551f3a3156dc..88672ec296c1 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)
|
|
if ((data[1] & 0xb8) == 0xa0) {
|
|
t = (data[6] << 2) | ((data[7] >> 6) & 3);
|
|
if ((features->type >= INTUOS4S && features->type <= INTUOS4L) ||
|
|
- features->type == WACOM_21UX2) {
|
|
+ features->type == WACOM_21UX2 || features->type == WACOM_24HD) {
|
|
t = (t << 1) | (data[1] & 1);
|
|
}
|
|
input_report_abs(input, ABS_PRESSURE, t);
|
|
@@ -519,6 +519,56 @@ static int wacom_intuos_irq(struct wacom_wac *wacom)
|
|
input_report_key(input, wacom->tool[1], 0);
|
|
input_report_abs(input, ABS_MISC, 0);
|
|
}
|
|
+ } else if (features->type == WACOM_24HD) {
|
|
+ input_report_key(input, BTN_0, (data[6] & 0x01));
|
|
+ input_report_key(input, BTN_1, (data[6] & 0x02));
|
|
+ input_report_key(input, BTN_2, (data[6] & 0x04));
|
|
+ input_report_key(input, BTN_3, (data[6] & 0x08));
|
|
+ input_report_key(input, BTN_4, (data[6] & 0x10));
|
|
+ input_report_key(input, BTN_5, (data[6] & 0x20));
|
|
+ input_report_key(input, BTN_6, (data[6] & 0x40));
|
|
+ input_report_key(input, BTN_7, (data[6] & 0x80));
|
|
+ input_report_key(input, BTN_8, (data[8] & 0x01));
|
|
+ input_report_key(input, BTN_9, (data[8] & 0x02));
|
|
+ input_report_key(input, BTN_A, (data[8] & 0x04));
|
|
+ input_report_key(input, BTN_B, (data[8] & 0x08));
|
|
+ input_report_key(input, BTN_C, (data[8] & 0x10));
|
|
+ input_report_key(input, BTN_X, (data[8] & 0x20));
|
|
+ input_report_key(input, BTN_Y, (data[8] & 0x40));
|
|
+ input_report_key(input, BTN_Z, (data[8] & 0x80));
|
|
+
|
|
+ /*
|
|
+ * Three "buttons" are available on the 24HD which are
|
|
+ * physically implemented as a touchstrip. Each button
|
|
+ * is approximately 3 bits wide with a 2 bit spacing.
|
|
+ * The raw touchstrip bits are stored at:
|
|
+ * ((data[3] & 0x1f) << 8) | data[4])
|
|
+ */
|
|
+ input_report_key(input, KEY_PROG1, data[4] & 0x07);
|
|
+ input_report_key(input, KEY_PROG2, data[4] & 0xE0);
|
|
+ input_report_key(input, KEY_PROG3, data[3] & 0x1C);
|
|
+
|
|
+ if (data[1] & 0x80) {
|
|
+ input_report_abs(input, ABS_WHEEL, (data[1] & 0x7f));
|
|
+ } else {
|
|
+ /* Out of proximity, clear wheel value. */
|
|
+ input_report_abs(input, ABS_WHEEL, 0);
|
|
+ }
|
|
+
|
|
+ if (data[2] & 0x80) {
|
|
+ input_report_abs(input, ABS_THROTTLE, (data[2] & 0x7f));
|
|
+ } else {
|
|
+ /* Out of proximity, clear second wheel value. */
|
|
+ input_report_abs(input, ABS_THROTTLE, 0);
|
|
+ }
|
|
+
|
|
+ if (data[1] | data[2] | (data[3] & 0x1f) | data[4] | data[6] | data[8]) {
|
|
+ input_report_key(input, wacom->tool[1], 1);
|
|
+ input_report_abs(input, ABS_MISC, PAD_DEVICE_ID);
|
|
+ } else {
|
|
+ input_report_key(input, wacom->tool[1], 0);
|
|
+ input_report_abs(input, ABS_MISC, 0);
|
|
+ }
|
|
} else {
|
|
if (features->type == WACOM_21UX2) {
|
|
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)
|
|
case CINTIQ:
|
|
case WACOM_BEE:
|
|
case WACOM_21UX2:
|
|
+ case WACOM_24HD:
|
|
sync = wacom_intuos_irq(wacom_wac);
|
|
break;
|
|
|
|
@@ -1174,6 +1225,26 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,
|
|
__set_bit(INPUT_PROP_POINTER, input_dev->propbit);
|
|
break;
|
|
|
|
+ case WACOM_24HD:
|
|
+ __set_bit(BTN_A, input_dev->keybit);
|
|
+ __set_bit(BTN_B, input_dev->keybit);
|
|
+ __set_bit(BTN_C, input_dev->keybit);
|
|
+ __set_bit(BTN_X, input_dev->keybit);
|
|
+ __set_bit(BTN_Y, input_dev->keybit);
|
|
+ __set_bit(BTN_Z, input_dev->keybit);
|
|
+
|
|
+ for (i = 0; i < 10; i++)
|
|
+ __set_bit(BTN_0 + i, input_dev->keybit);
|
|
+
|
|
+ __set_bit(KEY_PROG1, input_dev->keybit);
|
|
+ __set_bit(KEY_PROG2, input_dev->keybit);
|
|
+ __set_bit(KEY_PROG3, input_dev->keybit);
|
|
+
|
|
+ input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0);
|
|
+ input_set_abs_params(input_dev, ABS_THROTTLE, 0, 71, 0, 0);
|
|
+ wacom_setup_cintiq(wacom_wac);
|
|
+ break;
|
|
+
|
|
case WACOM_21UX2:
|
|
__set_bit(BTN_A, input_dev->keybit);
|
|
__set_bit(BTN_B, input_dev->keybit);
|
|
@@ -1503,6 +1574,9 @@ static const struct wacom_features wacom_features_0xBB =
|
|
static const struct wacom_features wacom_features_0xBC =
|
|
{ "Wacom Intuos4 WL", WACOM_PKGLEN_INTUOS, 40840, 25400, 2047,
|
|
63, INTUOS4, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
|
|
+static const struct wacom_features wacom_features_0xF4 =
|
|
+ { "Wacom Cintiq 24HD", WACOM_PKGLEN_INTUOS, 104480, 65600, 2047,
|
|
+ 63, WACOM_24HD, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
|
|
static const struct wacom_features wacom_features_0x3F =
|
|
{ "Wacom Cintiq 21UX", WACOM_PKGLEN_INTUOS, 87200, 65600, 1023,
|
|
63, CINTIQ, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES };
|
|
@@ -1706,6 +1780,7 @@ const struct usb_device_id wacom_ids[] = {
|
|
{ USB_DEVICE_WACOM(0xE6) },
|
|
{ USB_DEVICE_WACOM(0xEC) },
|
|
{ USB_DEVICE_WACOM(0x47) },
|
|
+ { USB_DEVICE_WACOM(0xF4) },
|
|
{ USB_DEVICE_LENOVO(0x6004) },
|
|
{ }
|
|
};
|
|
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 {
|
|
INTUOS4S,
|
|
INTUOS4,
|
|
INTUOS4L,
|
|
+ WACOM_24HD,
|
|
WACOM_21UX2,
|
|
CINTIQ,
|
|
WACOM_BEE,
|
|
--
|
|
1.7.10.1
|
|
|