HID: wacom: Only report rotation for art pen
authorPing Cheng <pinglinux@gmail.com>
Fri, 13 May 2022 21:51:56 +0000 (14:51 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 17 Aug 2022 12:22:47 +0000 (14:22 +0200)
commit 7ccced33a0ba39b0103ae1dfbf7f1dffdc0a1bc2 upstream.

The generic routine, wacom_wac_pen_event, turns rotation value 90
degree anti-clockwise before posting the events. This non-zero
event trggers a non-zero ABS_Z event for non art pen tools. However,
HID_DG_TWIST is only supported by art pen.

[jkosina@suse.cz: fix build: add missing brace]
Cc: stable@vger.kernel.org
Signed-off-by: Ping Cheng <ping.cheng@wacom.com>
Reviewed-by: Jason Gerecke <jason.gerecke@wacom.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/hid/wacom_wac.c

index a7176fc0635dd2b7aa0fd7977938f8feb9b6a2ec..87ea70d81d55dfce3131a8af083fa5bbf4b8719f 100644 (file)
@@ -638,9 +638,26 @@ static int wacom_intuos_id_mangle(int tool_id)
        return (tool_id & ~0xFFF) << 4 | (tool_id & 0xFFF);
 }
 
+static bool wacom_is_art_pen(int tool_id)
+{
+       bool is_art_pen = false;
+
+       switch (tool_id) {
+       case 0x885:     /* Intuos3 Marker Pen */
+       case 0x804:     /* Intuos4/5 13HD/24HD Marker Pen */
+       case 0x10804:   /* Intuos4/5 13HD/24HD Art Pen */
+               is_art_pen = true;
+               break;
+       }
+       return is_art_pen;
+}
+
 static int wacom_intuos_get_tool_type(int tool_id)
 {
-       int tool_type;
+       int tool_type = BTN_TOOL_PEN;
+
+       if (wacom_is_art_pen(tool_id))
+               return tool_type;
 
        switch (tool_id) {
        case 0x812: /* Inking pen */
@@ -655,12 +672,9 @@ static int wacom_intuos_get_tool_type(int tool_id)
        case 0x852:
        case 0x823: /* Intuos3 Grip Pen */
        case 0x813: /* Intuos3 Classic Pen */
-       case 0x885: /* Intuos3 Marker Pen */
        case 0x802: /* Intuos4/5 13HD/24HD General Pen */
-       case 0x804: /* Intuos4/5 13HD/24HD Marker Pen */
        case 0x8e2: /* IntuosHT2 pen */
        case 0x022:
-       case 0x10804: /* Intuos4/5 13HD/24HD Art Pen */
        case 0x10842: /* MobileStudio Pro Pro Pen slim */
        case 0x14802: /* Intuos4/5 13HD/24HD Classic Pen */
        case 0x16802: /* Cintiq 13HD Pro Pen */
@@ -718,10 +732,6 @@ static int wacom_intuos_get_tool_type(int tool_id)
        case 0x10902: /* Intuos4/5 13HD/24HD Airbrush */
                tool_type = BTN_TOOL_AIRBRUSH;
                break;
-
-       default: /* Unknown tool */
-               tool_type = BTN_TOOL_PEN;
-               break;
        }
        return tool_type;
 }
@@ -2323,6 +2333,9 @@ static void wacom_wac_pen_event(struct hid_device *hdev, struct hid_field *field
                }
                return;
        case HID_DG_TWIST:
+               /* don't modify the value if the pen doesn't support the feature */
+               if (!wacom_is_art_pen(wacom_wac->id[0])) return;
+
                /*
                 * Userspace expects pen twist to have its zero point when
                 * the buttons/finger is on the tablet's left. HID values