Skip to contentSkip to conversation

HID: wacom: Add support for Cintiq Companion 2

PATCH Superseded Jason Gerecke 4 participants 8 messages Oct 7, 2015 – Oct 21, 2015

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 HID: wacom: Add support for Cintiq Companion 2

---
 drivers/hid/wacom_sys.c |  2 +-
 drivers/hid/wacom_wac.c | 41 ++++++++++++++++++++++++++++++++++++++++-
 drivers/hid/wacom_wac.h |  1 +
 3 files changed, 42 insertions(+), 2 deletions(-)
drivers/hid/wacom_sys.c +1 -1
index 5f6e48e..2e7a1c7 100644
@@ -420,7 +420,7 @@ static int wacom_query_tablet_data(struct hid_device *hdev,
 			/* MT Tablet PC touch */
 			return wacom_set_device_mode(hdev, 3, 4, 4);
 		}
-		else if (features->type == WACOM_24HDT || features->type == CINTIQ_HYBRID) {
+		else if (features->type == WACOM_24HDT || features->type == CINTIQ_HYBRID || features->type == CINTIQ_COMPANION_2) {
 			return wacom_set_device_mode(hdev, 18, 3, 2);
 		}
 		else if (features->type == WACOM_27QHDT) {
drivers/hid/wacom_wac.c +40 -1

83 lines not on this page · raw message

drivers/hid/wacom_wac.h +1 -0
index 809c03e..5a1ec76 100644
@@ -124,6 +124,7 @@ enum {
 	WACOM_24HD,
 	WACOM_27QHD,
 	CINTIQ_HYBRID,
+	CINTIQ_COMPANION_2,
 	CINTIQ,
 	WACOM_BEE,
 	WACOM_13HD,
Signature · 1 line
2.6.1
#1 lore raw
Quoted 2 lines · Jason Gerecke

Is that support for using the Cintiq Companion 2 as an accessory (eg. still running Windows on the machine, and plugging it in to a Linux machine), or for the Wacom device inside the tablet when it's running Linux (if that's possible)?

Either way, which it is should be included in the commit message.

For those who don't know about that device:
http://www.wacom.com/en-us/products/pen-displays/cintiq-companion-2

Cheers

#2 lore raw

This applies to both. When running as a standalone tablet, all the tablet input devices still go through the usb system. The different modes show the same usb vendor and product IDs and seem to behave identically in the testing I've done.

Sorry for the multiple-message spam.

Quoted 15 lines · Bastien Nocera
Quoted 2 lines · Jason Gerecke

Is that support for using the Cintiq Companion 2 as an accessory (eg. still running Windows on the machine, and plugging it in to a Linux machine), or for the Wacom device inside the tablet when it's running Linux (if that's possible)?

Either way, which it is should be included in the commit message.

For those who don't know about that device:
http://www.wacom.com/en-us/products/pen-displays/cintiq-companion-2

Cheers

#3 lore raw

PATCH v2 1/1 HID: wacom: Add support for Cintiq Companion 2

Adds support for the EMR (pen+pad) and touchscreen devices used by the Wacom Cintiq Companion 2. This applies both to using the device as a standalone system, as well as when operating in "Cintiq mode" (where the EMR/touchscreen are simply exposed as USB devices to the system its connected to).

---
 drivers/hid/wacom_sys.c |  2 +-
 drivers/hid/wacom_wac.c | 41 ++++++++++++++++++++++++++++++++++++++++-
 drivers/hid/wacom_wac.h |  1 +
 3 files changed, 42 insertions(+), 2 deletions(-)
drivers/hid/wacom_sys.c +1 -1
index 5f6e48e..2e7a1c7 100644
@@ -420,7 +420,7 @@ static int wacom_query_tablet_data(struct hid_device *hdev,
 			/* MT Tablet PC touch */
 			return wacom_set_device_mode(hdev, 3, 4, 4);
 		}
-		else if (features->type == WACOM_24HDT || features->type == CINTIQ_HYBRID) {
+		else if (features->type == WACOM_24HDT || features->type == CINTIQ_HYBRID || features->type == CINTIQ_COMPANION_2) {
 			return wacom_set_device_mode(hdev, 18, 3, 2);
 		}
 		else if (features->type == WACOM_27QHDT) {
drivers/hid/wacom_wac.c +40 -1

83 lines not on this page · raw message

drivers/hid/wacom_wac.h +1 -0
index 809c03e..5a1ec76 100644
@@ -124,6 +124,7 @@ enum {
 	WACOM_24HD,
 	WACOM_27QHD,
 	CINTIQ_HYBRID,
+	CINTIQ_COMPANION_2,
 	CINTIQ,
 	WACOM_BEE,
 	WACOM_13HD,
Signature · 1 line
2.6.1
maintainer
#4 lore raw
Quoted 8 lines · Jason Gerecke

Adds support for the EMR (pen+pad) and touchscreen devices used by the Wacom Cintiq Companion 2. This applies both to using the device as a standalone system, as well as when operating in "Cintiq mode" (where the EMR/touchscreen are simply exposed as USB devices to the system its connected to).

[ ... snip ... ]

drivers/hid/wacom_wac.c void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len) · line 2316

Quoted 7 lines
drivers/hid/wacom_wac.c +1 -0
@@ -2290,6 +2311,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len)
 	case WACOM_27QHD:
 	case DTK:
 	case CINTIQ_HYBRID:
+	case CINTIQ_COMPANION_2:
 		sync = wacom_intuos_irq(wacom_wac);
 		break;

This doesn't make any sense. You break here out after handling CINTIQ_COMPANION_2 in features->type switch ...

drivers/hid/wacom_wac.c int wacom_setup_pen_input_capabilities(struct input_dev *input_dev, · line 2571

Quoted 9 lines
drivers/hid/wacom_wac.c +1 -0
@@ -2543,6 +2565,7 @@ int wacom_setup_pen_input_capabilities(struct input_dev *input_dev,
 	case CINTIQ:
 	case WACOM_13HD:
 	case CINTIQ_HYBRID:
+	case CINTIQ_COMPANION_2:
 		input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0);
 		input_abs_set_res(input_dev, ABS_Z, 287);
 		__set_bit(INPUT_PROP_DIRECT, input_dev->propbit);

... here you break out of the switch case a few lines below again.

drivers/hid/wacom_wac.c int wacom_setup_pen_input_capabilities(struct input_dev *input_dev, · line 2622

Quoted 6 lines
drivers/hid/wacom_wac.c +2 -0
@@ -2595,6 +2618,12 @@ int wacom_setup_pen_input_capabilities(struct input_dev *input_dev,
 		__clear_bit(ABS_MISC, input_dev->absbit);
 		/* fall through */
 
+	case CINTIQ_COMPANION_2:
+		for (i = 0; i < 10; i++)

Where do you define this 'i'?

drivers/hid/wacom_wac.c int wacom_setup_pen_input_capabilities(struct input_dev *input_dev, · line 2626

Quoted 4 lines
drivers/hid/wacom_wac.c +4 -0
+			__set_bit(BTN_0 + i, input_dev->keybit);
+		__set_bit(BTN_A, input_dev->keybit);
+		break;
+

And here you break out of the same case again explicitly again.

Signature · 2 lines
Jiri Kosina
SUSE Labs
#5 lore raw
Quoted 44 lines · Jiri Kosina
Quoted 8 lines · Jason Gerecke

Adds support for the EMR (pen+pad) and touchscreen devices used by the Wacom Cintiq Companion 2. This applies both to using the device as a standalone system, as well as when operating in "Cintiq mode" (where the EMR/touchscreen are simply exposed as USB devices to the system its connected to).

[ ... snip ... ]

drivers/hid/wacom_wac.c void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len) · line 2316

Quoted 7 lines
drivers/hid/wacom_wac.c +1 -0
@@ -2290,6 +2311,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len)
 	case WACOM_27QHD:
 	case DTK:
 	case CINTIQ_HYBRID:
+	case CINTIQ_COMPANION_2:
 		sync = wacom_intuos_irq(wacom_wac);
 		break;

This doesn't make any sense. You break here out after handling CINTIQ_COMPANION_2 in features->type switch ...

drivers/hid/wacom_wac.c int wacom_setup_pen_input_capabilities(struct input_dev *input_dev, · line 2571

Quoted 9 lines
drivers/hid/wacom_wac.c +1 -0
@@ -2543,6 +2565,7 @@ int wacom_setup_pen_input_capabilities(struct input_dev *input_dev,
 	case CINTIQ:
 	case WACOM_13HD:
 	case CINTIQ_HYBRID:
+	case CINTIQ_COMPANION_2:
 		input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0);
 		input_abs_set_res(input_dev, ABS_Z, 287);
 		__set_bit(INPUT_PROP_DIRECT, input_dev->propbit);

... here you break out of the switch case a few lines below again.

drivers/hid/wacom_wac.c int wacom_setup_pen_input_capabilities(struct input_dev *input_dev, · line 2622

Quoted 6 lines
drivers/hid/wacom_wac.c +2 -0
@@ -2595,6 +2618,12 @@ int wacom_setup_pen_input_capabilities(struct input_dev *input_dev,
 		__clear_bit(ABS_MISC, input_dev->absbit);
 		/* fall through */
 
+	case CINTIQ_COMPANION_2:
+		for (i = 0; i < 10; i++)

Where do you define this 'i'?

Quoted 7 lines

drivers/hid/wacom_wac.c int wacom_setup_pen_input_capabilities(struct input_dev *input_dev, · line 2626

Quoted 4 lines
drivers/hid/wacom_wac.c +4 -0
+			__set_bit(BTN_0 + i, input_dev->keybit);
+		__set_bit(BTN_A, input_dev->keybit);
+		break;
+

And here you break out of the same case again explicitly again.

Looks like something went awry when migrating my patch from my branch in our local "input-wacom" tree to your upstream branch. Based on what's wrong, it looks like patch may have been confused by Aaron's recent changes to 'wacom_setup_pad_input_capabilities' (70ee06c) that weren't integrated into my local branch.

I'll submit a fixed version shortly. Apologies for the noise.

Jason
---
Now instead of four in the eights place /
you’ve got three, ‘Cause you added one /
(That is to say, eight) to the two, /
But you can’t take seven from three, /
So you look at the sixty-fours....
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

#6 lore raw

PATCH v3 1/1 HID: wacom: Add support for Cintiq Companion 2

Adds support for the EMR (pen+pad) and touchscreen devices used by the Wacom Cintiq Companion 2. This applies both to using the device as a standalone system, as well as when operating in "Cintiq mode" (where the EMR/touchscreen are simply exposed as USB devices to the system its connected to).

---
Changes from v2:
* The switch in wacom_setup_pen_input_capabilities now only contains the first CINTIQ_COMPANION_2 case. The second case has been moved to the switch in wacom_setup_pad_input_capabilities where it belongs.

* The second CINTIQ_COMPANION_2 case mentioned above no longer explicitly sets up the pad buttons since wacom_setup_numbered_buttons is now (70ee06c) in charge of this initialization.

 drivers/hid/wacom_sys.c |  2 +-
 drivers/hid/wacom_wac.c | 36 +++++++++++++++++++++++++++++++++++-
 drivers/hid/wacom_wac.h |  1 +
 3 files changed, 37 insertions(+), 2 deletions(-)
drivers/hid/wacom_sys.c +1 -1
index 5f6e48e..2e7a1c7 100644
@@ -420,7 +420,7 @@ static int wacom_query_tablet_data(struct hid_device *hdev,
 			/* MT Tablet PC touch */
 			return wacom_set_device_mode(hdev, 3, 4, 4);
 		}
-		else if (features->type == WACOM_24HDT || features->type == CINTIQ_HYBRID) {
+		else if (features->type == WACOM_24HDT || features->type == CINTIQ_HYBRID || features->type == CINTIQ_COMPANION_2) {
 			return wacom_set_device_mode(hdev, 18, 3, 2);
 		}
 		else if (features->type == WACOM_27QHDT) {
drivers/hid/wacom_wac.c +35 -1
index 46bd02b..e0b9320 100644
@@ -765,7 +765,7 @@ static void wacom_intuos_general(struct wacom_wac *wacom)
 	/* general pen packet */
 	if ((data[1] & 0xb8) == 0xa0) {
 		t = (data[6] << 2) | ((data[7] >> 6) & 3);
-		if (features->type >= INTUOS4S && features->type <= CINTIQ_HYBRID) {
+		if (features->type >= INTUOS4S && features->type <= CINTIQ_COMPANION_2) {
 			t = (t << 1) | (data[1] & 1);
 		}
 		input_report_abs(input, ABS_PRESSURE, t);
@@ -948,6 +948,27 @@ static int wacom_intuos_irq(struct wacom_wac *wacom)
 			} else {
 				input_report_abs(input, ABS_MISC, 0);
 			}
+
+		} else if (features->type == CINTIQ_COMPANION_2) {
+			input_report_key(input, BTN_1, (data[1] & 0x02));
+			input_report_key(input, BTN_2, (data[2] & 0x01));
+			input_report_key(input, BTN_3, (data[2] & 0x02));
+			input_report_key(input, BTN_4, (data[2] & 0x04));
+			input_report_key(input, BTN_5, (data[2] & 0x08));
+			input_report_key(input, BTN_6, (data[1] & 0x04));
+
+			input_report_key(input, BTN_7, (data[2] & 0x10));  /* Right  */
+			input_report_key(input, BTN_8, (data[2] & 0x20));  /* Up	 */
+			input_report_key(input, BTN_9, (data[2] & 0x40));  /* Left   */
+			input_report_key(input, BTN_A, (data[2] & 0x80));  /* Down   */
+			input_report_key(input, BTN_0, (data[1] & 0x01));  /* Center */
+
+			if (data[4] | (data[3] & 0x01)) {
+				input_report_abs(input, ABS_MISC, PAD_DEVICE_ID);
+			} else {
+				input_report_abs(input, ABS_MISC, 0);
+			}
+
 		} else if (features->type >= INTUOS5S && features->type <= INTUOSPL) {
 			int i;
 
@@ -2290,6 +2311,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len)
 	case WACOM_27QHD:
 	case DTK:
 	case CINTIQ_HYBRID:
+	case CINTIQ_COMPANION_2:
 		sync = wacom_intuos_irq(wacom_wac);
 		break;
 
@@ -2543,6 +2565,7 @@ int wacom_setup_pen_input_capabilities(struct input_dev *input_dev,
 	case CINTIQ:
 	case WACOM_13HD:
 	case CINTIQ_HYBRID:
+	case CINTIQ_COMPANION_2:
 		input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0);
 		input_abs_set_res(input_dev, ABS_Z, 287);
 		__set_bit(INPUT_PROP_DIRECT, input_dev->propbit);
@@ -2775,6 +2798,7 @@ int wacom_setup_pad_input_capabilities(struct input_dev *input_dev,
 	switch (features->type) {
 
 	case CINTIQ_HYBRID:
+	case CINTIQ_COMPANION_2:
 	case DTK:
 	case DTUS:
 	case GRAPHIRE_BT:
@@ -3347,6 +3371,14 @@ static const struct wacom_features wacom_features_0x318 =
 static const struct wacom_features wacom_features_0x319 =
 	{ "Wacom Wireless Bamboo PAD", 4095, 4095, /* Touch */
 	  .type = BAMBOO_PAD, 35, 48, .touch_max = 4 };
+static const struct wacom_features wacom_features_0x325 =
+	{ "Wacom ISDv5 325", 59552, 33848, 2047, 63,
+	  CINTIQ_COMPANION_2, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, 11,
+	  WACOM_CINTIQ_OFFSET, WACOM_CINTIQ_OFFSET,
+	  .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x326 };
+static const struct wacom_features wacom_features_0x326 = /* Touch */
+	{ "Wacom ISDv5 326", .type = HID_GENERIC, .oVid = USB_VENDOR_ID_WACOM,
+	  .oPid = 0x325 };
 static const struct wacom_features wacom_features_0x323 =
 	{ "Wacom Intuos P M", 21600, 13500, 1023, 31,
 	  INTUOSHT, WACOM_INTUOS_RES, WACOM_INTUOS_RES,
@@ -3506,6 +3538,8 @@ const struct hid_device_id wacom_ids[] = {
 	{ USB_DEVICE_WACOM(0x318) },
 	{ USB_DEVICE_WACOM(0x319) },
 	{ USB_DEVICE_WACOM(0x323) },
+	{ USB_DEVICE_WACOM(0x325) },
+	{ USB_DEVICE_WACOM(0x326) },
 	{ USB_DEVICE_WACOM(0x32A) },
 	{ USB_DEVICE_WACOM(0x32B) },
 	{ USB_DEVICE_WACOM(0x32C) },
drivers/hid/wacom_wac.h +1 -0
index 809c03e..5a1ec76 100644
@@ -124,6 +124,7 @@ enum {
 	WACOM_24HD,
 	WACOM_27QHD,
 	CINTIQ_HYBRID,
+	CINTIQ_COMPANION_2,
 	CINTIQ,
 	WACOM_BEE,
 	WACOM_13HD,
Signature · 1 line
2.6.1
maintainer Applied
#7 lore raw
Quoted 14 lines · Jason Gerecke

Adds support for the EMR (pen+pad) and touchscreen devices used by the Wacom Cintiq Companion 2. This applies both to using the device as a standalone system, as well as when operating in "Cintiq mode" (where the EMR/touchscreen are simply exposed as USB devices to the system its connected to).

---
Changes from v2:
* The switch in wacom_setup_pen_input_capabilities now only contains the first CINTIQ_COMPANION_2 case. The second case has been moved to the switch in wacom_setup_pad_input_capabilities where it belongs.

Quoted 3 lines

* The second CINTIQ_COMPANION_2 case mentioned above no longer explicitly sets up the pad buttons since wacom_setup_numbered_buttons is now (70ee06c) in charge of this initialization.

Applied to for-4.4/wacom.

Signature · 2 lines
Jiri Kosina
SUSE Labs