Skip to contentSkip to conversation

HID: wacom: Report ABS_MISC event for Cintiq Companion Hybrid

PATCH In review Jason Gerecke 3 participants 3 messages Jan 22, 2015 – Jan 23, 2015

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

PATCH 1/1 HID: wacom: Report ABS_MISC event for Cintiq Companion Hybrid

It appears that the Cintiq Companion Hybrid does not send an ABS_MISC event to userspace when any of its ExpressKeys are pressed. This is not strictly necessary now that the pad exists on its own device, but should be fixed for consistency's sake.

Traditionally both the stylus and pad shared the same device node, and xf86-input-wacom would use ABS_MISC for disambiguation. Not sending this causes the Hybrid to behave incorrectly with xf86-input-wacom beginning with its 8f44f3 commit.

---
Question: I'd like to write a version of this patch which targets stable releases where the stylus and pad share the device node. How would I go about submitting one, since CCing this patch to stable won't quite do the trick (the patches would have to be against our old home under drivers/input/tablet...)

 drivers/hid/wacom_wac.c | 6 ++++++
 1 file changed, 6 insertions(+)
drivers/hid/wacom_wac.c +6 -0
index a4ba8ca..f886149 100644
@@ -783,6 +783,12 @@ static int wacom_intuos_irq(struct wacom_wac *wacom)
 			input_report_key(input, BTN_7, (data[4] & 0x40));  /* Left   */
 			input_report_key(input, BTN_8, (data[4] & 0x80));  /* Down   */
 			input_report_key(input, BTN_0, (data[3] & 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;
 
Signature · 1 line
2.2.1
#1 lore raw
Quoted 10 lines · Jason Gerecke

It appears that the Cintiq Companion Hybrid does not send an ABS_MISC event to userspace when any of its ExpressKeys are pressed. This is not strictly necessary now that the pad exists on its own device, but should be fixed for consistency's sake.

Traditionally both the stylus and pad shared the same device node, and xf86-input-wacom would use ABS_MISC for disambiguation. Not sending this causes the Hybrid to behave incorrectly with xf86-input-wacom beginning with its 8f44f3 commit.

Quoted 7 lines

---
Question: I'd like to write a version of this patch which targets stable releases where the stylus and pad share the device node. How would I go about submitting one, since CCing this patch to stable won't quite do the trick (the patches would have to be against our old home under drivers/input/tablet...)

IIRC, once this one hits linus tree, you send an adapted version of the same patch which refers this one.
Just add the hash of the final patch in Linus tree, and mention in the subject prefix which stable releases you are targeting.

See for an example http://thread.gmane.org/gmane.linux.kernel.stable/120947

Quoted 9 lines
 drivers/hid/wacom_wac.c | 6 ++++++
 1 file changed, 6 insertions(+)
drivers/hid/wacom_wac.c +0 -0
index a4ba8ca..f886149 100644

drivers/hid/wacom_wac.c static int wacom_intuos_irq(struct wacom_wac *wacom) · line 791

Quoted 9 lines
drivers/hid/wacom_wac.c +6 -0
@@ -783,6 +783,12 @@ static int wacom_intuos_irq(struct wacom_wac *wacom)
                        input_report_key(input, BTN_7, (data[4] & 0x40));  /* Left   */
                        input_report_key(input, BTN_8, (data[4] & 0x80));  /* Down   */
                        input_report_key(input, BTN_0, (data[3] & 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);
+                       }

I am not 100% sure, but in my memories, the ABS_MISC event was sent before any buttons.
But maybe not.

Anyway, this is Reviewed-by: Benjamin Tissoires <[email protected]>

Cheers,
Benjamin

Quoted 6 lines
drivers/hid/wacom_wac.c +0 -1
                } else if (features->type >= INTUOS5S && features->type <= INTUOSPL) {
                        int i;
 
--

2.2.1

#2 lore raw
Quoted 19 lines · Benjamin Tissoires
Quoted 10 lines · Jason Gerecke

It appears that the Cintiq Companion Hybrid does not send an ABS_MISC event to userspace when any of its ExpressKeys are pressed. This is not strictly necessary now that the pad exists on its own device, but should be fixed for consistency's sake.

Traditionally both the stylus and pad shared the same device node, and xf86-input-wacom would use ABS_MISC for disambiguation. Not sending this causes the Hybrid to behave incorrectly with xf86-input-wacom beginning with its 8f44f3 commit.

Quoted 7 lines

---
Question: I'd like to write a version of this patch which targets stable releases where the stylus and pad share the device node. How would I go about submitting one, since CCing this patch to stable won't quite do the trick (the patches would have to be against our old home under drivers/input/tablet...)

Quoted 4 lines

IIRC, once this one hits linus tree, you send an adapted version of the same patch which refers this one.
Just add the hash of the final patch in Linus tree, and mention in the subject prefix which stable releases you are targeting.

Yup, that's the proper process.

I am therefore not adding Cc: stable explicitly, Jason -- please handle this manually once it hits Linus' tree, as it requires manual backport anyway.

Quoted 25 lines

See for an example http://thread.gmane.org/gmane.linux.kernel.stable/120947

Quoted 9 lines
 drivers/hid/wacom_wac.c | 6 ++++++
 1 file changed, 6 insertions(+)
drivers/hid/wacom_wac.c +0 -0
index a4ba8ca..f886149 100644

drivers/hid/wacom_wac.c static int wacom_intuos_irq(struct wacom_wac *wacom) · line 791

Quoted 9 lines
drivers/hid/wacom_wac.c +6 -0
@@ -783,6 +783,12 @@ static int wacom_intuos_irq(struct wacom_wac *wacom)
                        input_report_key(input, BTN_7, (data[4] & 0x40));  /* Left   */
                        input_report_key(input, BTN_8, (data[4] & 0x80));  /* Down   */
                        input_report_key(input, BTN_0, (data[3] & 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);
+                       }

I am not 100% sure, but in my memories, the ABS_MISC event was sent before any buttons.
But maybe not.

Quoted 1 line

Anyway, this is Reviewed-by: Benjamin Tissoires <[email protected]>

Thanks. Now applied and pushed out.

Signature · 2 lines
Jiri Kosina
SUSE Labs