]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
HID: multitouch: support getting the tip state from HID_DG_TOUCH fields in Apple...
authorKerem Karabay <kekrby@gmail.com>
Tue, 27 May 2025 16:43:14 +0000 (22:13 +0530)
committerJiri Kosina <jkosina@suse.com>
Wed, 11 Jun 2025 09:25:26 +0000 (11:25 +0200)
In Apple Touch Bar, the tip state is contained in fields with the
HID_DG_TOUCH usage. This feature is gated by a quirk in order to
prevent breaking other devices, see commit c2ef8f21ea8f
("HID: multitouch: add support for trackpads").

Acked-by: Benjamin Tissoires <bentiss@kernel.org>
Signed-off-by: Kerem Karabay <kekrby@gmail.com>
Co-developed-by: Aditya Garg <gargaditya08@live.com>
Signed-off-by: Aditya Garg <gargaditya08@live.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
drivers/hid/hid-multitouch.c

index 849344b0ee57691b54da6447b92406a80f440826..e3382afc74c946f8c0ebac08e8b91627124189b9 100644 (file)
@@ -827,6 +827,17 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
 
                        MT_STORE_FIELD(confidence_state);
                        return 1;
+               case HID_DG_TOUCH:
+                       /*
+                        * Legacy devices use TIPSWITCH and not TOUCH.
+                        * One special case here is of the Apple Touch Bars.
+                        * In these devices, the tip state is contained in
+                        * fields with the HID_DG_TOUCH usage.
+                        * Let's just ignore this field for other devices.
+                        */
+                       if (!(cls->quirks & MT_QUIRK_APPLE_TOUCHBAR))
+                               return -1;
+                       fallthrough;
                case HID_DG_TIPSWITCH:
                        if (field->application != HID_GD_SYSTEM_MULTIAXIS)
                                input_set_capability(hi->input,
@@ -897,10 +908,6 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
                case HID_DG_CONTACTMAX:
                        /* contact max are global to the report */
                        return -1;
-               case HID_DG_TOUCH:
-                       /* Legacy devices use TIPSWITCH and not TOUCH.
-                        * Let's just ignore this field. */
-                       return -1;
                }
                /* let hid-input decide for the others */
                return 0;