You've already forked linux-t2-patches
mirror of
https://github.com/t2linux/linux-t2-patches.git
synced 2026-04-30 13:52:11 -07:00
Use upstreamed multitouch patches
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
From 0b4c05ff73f1f61ecdae7ea99217fc4371573c4c Mon Sep 17 00:00:00 2001
|
||||
From: Kerem Karabay <kekrby@gmail.com>
|
||||
Date: Tue, 27 May 2025 22:13:13 +0530
|
||||
Subject: [PATCH 1/5] HID: multitouch: Get the contact ID from
|
||||
HID_DG_TRANSDUCER_INDEX fields in case of Apple Touch Bar
|
||||
|
||||
In Apple Touch Bar, the contact ID is contained in fields with the
|
||||
HID_DG_TRANSDUCER_INDEX usage rather than HID_DG_CONTACTID, thus differing
|
||||
from the HID spec. Add a quirk for the same.
|
||||
|
||||
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>
|
||||
---
|
||||
drivers/hid/hid-multitouch.c | 16 +++++++++++++++-
|
||||
1 file changed, 15 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
|
||||
index 7ac8e16e6..2788a081f 100644
|
||||
--- a/drivers/hid/hid-multitouch.c
|
||||
+++ b/drivers/hid/hid-multitouch.c
|
||||
@@ -73,6 +73,7 @@ MODULE_LICENSE("GPL");
|
||||
#define MT_QUIRK_FORCE_MULTI_INPUT BIT(20)
|
||||
#define MT_QUIRK_DISABLE_WAKEUP BIT(21)
|
||||
#define MT_QUIRK_ORIENTATION_INVERT BIT(22)
|
||||
+#define MT_QUIRK_APPLE_TOUCHBAR BIT(23)
|
||||
|
||||
#define MT_INPUTMODE_TOUCHSCREEN 0x02
|
||||
#define MT_INPUTMODE_TOUCHPAD 0x03
|
||||
@@ -625,6 +626,7 @@ static struct mt_application *mt_find_application(struct mt_device *td,
|
||||
static struct mt_report_data *mt_allocate_report_data(struct mt_device *td,
|
||||
struct hid_report *report)
|
||||
{
|
||||
+ struct mt_class *cls = &td->mtclass;
|
||||
struct mt_report_data *rdata;
|
||||
struct hid_field *field;
|
||||
int r, n;
|
||||
@@ -649,7 +651,11 @@ static struct mt_report_data *mt_allocate_report_data(struct mt_device *td,
|
||||
|
||||
if (field->logical == HID_DG_FINGER || td->hdev->group != HID_GROUP_MULTITOUCH_WIN_8) {
|
||||
for (n = 0; n < field->report_count; n++) {
|
||||
- if (field->usage[n].hid == HID_DG_CONTACTID) {
|
||||
+ unsigned int hid = field->usage[n].hid;
|
||||
+
|
||||
+ if (hid == HID_DG_CONTACTID ||
|
||||
+ (cls->quirks & MT_QUIRK_APPLE_TOUCHBAR &&
|
||||
+ hid == HID_DG_TRANSDUCER_INDEX)) {
|
||||
rdata->is_mt_collection = true;
|
||||
break;
|
||||
}
|
||||
@@ -827,6 +833,14 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
|
||||
EV_KEY, BTN_TOUCH);
|
||||
MT_STORE_FIELD(tip_state);
|
||||
return 1;
|
||||
+ case HID_DG_TRANSDUCER_INDEX:
|
||||
+ /*
|
||||
+ * Contact ID in case of Apple Touch Bars is contained
|
||||
+ * in fields with HID_DG_TRANSDUCER_INDEX usage.
|
||||
+ */
|
||||
+ if (!(cls->quirks & MT_QUIRK_APPLE_TOUCHBAR))
|
||||
+ return 0;
|
||||
+ fallthrough;
|
||||
case HID_DG_CONTACTID:
|
||||
MT_STORE_FIELD(contactid);
|
||||
app->touches_by_report++;
|
||||
--
|
||||
2.49.0
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
From 2f9be28549307b4ac51e8d66bf3b8d5e0621466d Mon Sep 17 00:00:00 2001
|
||||
From: Kerem Karabay <kekrby@gmail.com>
|
||||
Date: Wed, 19 Jul 2023 19:37:14 +0300
|
||||
Subject: [PATCH 04/12] HID: multitouch: support getting the contact ID from
|
||||
HID_DG_TRANSDUCER_INDEX fields
|
||||
|
||||
This is needed to support Apple Touch Bars, where the contact ID is
|
||||
contained in fields with the HID_DG_TRANSDUCER_INDEX usage.
|
||||
|
||||
Signed-off-by: Kerem Karabay <kekrby@gmail.com>
|
||||
---
|
||||
drivers/hid/hid-multitouch.c | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
|
||||
index e31be0cb8..902a59928 100644
|
||||
--- a/drivers/hid/hid-multitouch.c
|
||||
+++ b/drivers/hid/hid-multitouch.c
|
||||
@@ -636,7 +636,9 @@ static struct mt_report_data *mt_allocate_report_data(struct mt_device *td,
|
||||
|
||||
if (field->logical == HID_DG_FINGER || td->hdev->group != HID_GROUP_MULTITOUCH_WIN_8) {
|
||||
for (n = 0; n < field->report_count; n++) {
|
||||
- if (field->usage[n].hid == HID_DG_CONTACTID) {
|
||||
+ unsigned int hid = field->usage[n].hid;
|
||||
+
|
||||
+ if (hid == HID_DG_CONTACTID || hid == HID_DG_TRANSDUCER_INDEX) {
|
||||
rdata->is_mt_collection = true;
|
||||
break;
|
||||
}
|
||||
@@ -815,6 +817,7 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
|
||||
MT_STORE_FIELD(tip_state);
|
||||
return 1;
|
||||
case HID_DG_CONTACTID:
|
||||
+ case HID_DG_TRANSDUCER_INDEX:
|
||||
MT_STORE_FIELD(contactid);
|
||||
app->touches_by_report++;
|
||||
return 1;
|
||||
--
|
||||
2.42.0
|
||||
|
||||
@@ -1,48 +1,45 @@
|
||||
From 6162d328fe7b2cf5a3ee8c29bdb229e9528c7a6c Mon Sep 17 00:00:00 2001
|
||||
From 82c4b9ce599e240935c9c410a9c4527d0a62bff7 Mon Sep 17 00:00:00 2001
|
||||
From: Kerem Karabay <kekrby@gmail.com>
|
||||
Date: Wed, 19 Jul 2023 19:44:10 +0300
|
||||
Subject: [PATCH 05/12] HID: multitouch: support getting the tip state from
|
||||
HID_DG_TOUCH fields
|
||||
Date: Tue, 27 May 2025 22:13:14 +0530
|
||||
Subject: [PATCH 2/5] HID: multitouch: support getting the tip state from
|
||||
HID_DG_TOUCH fields in Apple Touch Bar
|
||||
|
||||
This is necessary on Apple Touch Bars, where 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
|
||||
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>
|
||||
---
|
||||
drivers/hid/hid-multitouch.c | 14 ++++++++++----
|
||||
1 file changed, 10 insertions(+), 4 deletions(-)
|
||||
drivers/hid/hid-multitouch.c | 15 +++++++++++----
|
||||
1 file changed, 11 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
|
||||
index 902a59928..dd5509eeb 100644
|
||||
index 2788a081f..99ecf6c8e 100644
|
||||
--- a/drivers/hid/hid-multitouch.c
|
||||
+++ b/drivers/hid/hid-multitouch.c
|
||||
@@ -72,6 +72,7 @@ MODULE_LICENSE("GPL");
|
||||
#define MT_QUIRK_FORCE_MULTI_INPUT BIT(20)
|
||||
#define MT_QUIRK_DISABLE_WAKEUP BIT(21)
|
||||
#define MT_QUIRK_ORIENTATION_INVERT BIT(22)
|
||||
+#define MT_QUIRK_TOUCH_IS_TIPSTATE BIT(23)
|
||||
|
||||
#define MT_INPUTMODE_TOUCHSCREEN 0x02
|
||||
#define MT_INPUTMODE_TOUCHPAD 0x03
|
||||
@@ -810,6 +811,15 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
|
||||
@@ -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.
|
||||
+ * Let's just ignore this field unless the quirk is set.
|
||||
+ * 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_TOUCH_IS_TIPSTATE))
|
||||
+ 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,
|
||||
@@ -873,10 +883,6 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
|
||||
@@ -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;
|
||||
@@ -54,5 +51,5 @@ index 902a59928..dd5509eeb 100644
|
||||
/* let hid-input decide for the others */
|
||||
return 0;
|
||||
--
|
||||
2.42.0
|
||||
2.49.0
|
||||
|
||||
|
||||
@@ -1,42 +1,38 @@
|
||||
From e923c6e1a5a508e341851ae020cdb3e7333ccd18 Mon Sep 17 00:00:00 2001
|
||||
From 075eeea99fd4fe17ff5ce506fe429493fd5f8a7f Mon Sep 17 00:00:00 2001
|
||||
From: Kerem Karabay <kekrby@gmail.com>
|
||||
Date: Wed, 19 Jul 2023 19:26:57 +0300
|
||||
Subject: [PATCH 06/12] HID: multitouch: take cls->maxcontacts into account for
|
||||
devices without a HID_DG_CONTACTMAX field too
|
||||
Date: Tue, 27 May 2025 22:13:15 +0530
|
||||
Subject: [PATCH 3/5] HID: multitouch: take cls->maxcontacts into account for
|
||||
Apple Touch Bar even without a HID_DG_CONTACTMAX field
|
||||
|
||||
This is needed for Apple Touch Bars, where no HID_DG_CONTACTMAX field is
|
||||
present and the maximum contact count is greater than the default.
|
||||
In Apple Touch Bar, the HID_DG_CONTACTMAX is not present, but the maximum
|
||||
contact count is still greater than the default. Add quirks for the same.
|
||||
|
||||
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>
|
||||
---
|
||||
drivers/hid/hid-multitouch.c | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
drivers/hid/hid-multitouch.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
|
||||
index dd5509eeb..624c1d3cc 100644
|
||||
index 99ecf6c8e..f71500d1f 100644
|
||||
--- a/drivers/hid/hid-multitouch.c
|
||||
+++ b/drivers/hid/hid-multitouch.c
|
||||
@@ -491,9 +491,6 @@ static void mt_feature_mapping(struct hid_device *hdev,
|
||||
if (!td->maxcontacts &&
|
||||
field->logical_maximum <= MT_MAX_MAXCONTACT)
|
||||
td->maxcontacts = field->logical_maximum;
|
||||
- if (td->mtclass.maxcontacts)
|
||||
- /* check if the maxcontacts is given by the class */
|
||||
- td->maxcontacts = td->mtclass.maxcontacts;
|
||||
|
||||
break;
|
||||
case HID_DG_BUTTONTYPE:
|
||||
@@ -1310,6 +1307,10 @@ static int mt_touch_input_configured(struct hid_device *hdev,
|
||||
@@ -1335,6 +1335,13 @@ static int mt_touch_input_configured(struct hid_device *hdev,
|
||||
struct input_dev *input = hi->input;
|
||||
int ret;
|
||||
|
||||
+ /* check if the maxcontacts is given by the class */
|
||||
+ if (cls->maxcontacts)
|
||||
+ /*
|
||||
+ * HID_DG_CONTACTMAX field is not present on Apple Touch Bars,
|
||||
+ * but the maximum contact count is greater than the default.
|
||||
+ */
|
||||
+ if (cls->quirks & MT_QUIRK_APPLE_TOUCHBAR && cls->maxcontacts)
|
||||
+ td->maxcontacts = cls->maxcontacts;
|
||||
+
|
||||
if (!td->maxcontacts)
|
||||
td->maxcontacts = MT_DEFAULT_MAXCONTACT;
|
||||
|
||||
--
|
||||
2.42.0
|
||||
2.49.0
|
||||
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
From b9f7232d2696b91ae98fadd7b14c531aa8edceb5 Mon Sep 17 00:00:00 2001
|
||||
From: Kerem Karabay <kekrby@gmail.com>
|
||||
Date: Wed, 19 Jul 2023 19:39:53 +0300
|
||||
Subject: [PATCH 07/12] HID: multitouch: allow specifying if a device is direct
|
||||
in a class
|
||||
|
||||
Currently the driver determines the device type based on the
|
||||
application, but this value is not reliable on Apple Touch Bars, where
|
||||
the application is HID_DG_TOUCHPAD even though the devices are direct,
|
||||
so allow setting it in classes.
|
||||
|
||||
Signed-off-by: Kerem Karabay <kekrby@gmail.com>
|
||||
---
|
||||
drivers/hid/hid-multitouch.c | 8 ++++++--
|
||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
|
||||
index 624c1d3cc..f98fb36ff 100644
|
||||
--- a/drivers/hid/hid-multitouch.c
|
||||
+++ b/drivers/hid/hid-multitouch.c
|
||||
@@ -147,6 +147,7 @@ struct mt_class {
|
||||
__s32 sn_height; /* Signal/noise ratio for height events */
|
||||
__s32 sn_pressure; /* Signal/noise ratio for pressure events */
|
||||
__u8 maxcontacts;
|
||||
+ bool is_direct; /* true for touchscreens */
|
||||
bool is_indirect; /* true for touchpads */
|
||||
bool export_all_inputs; /* do not ignore mouse, keyboards, etc... */
|
||||
};
|
||||
@@ -564,13 +565,13 @@ static struct mt_application *mt_allocate_application(struct mt_device *td,
|
||||
mt_application->application = application;
|
||||
INIT_LIST_HEAD(&mt_application->mt_usages);
|
||||
|
||||
- if (application == HID_DG_TOUCHSCREEN)
|
||||
+ if (application == HID_DG_TOUCHSCREEN && !td->mtclass.is_indirect)
|
||||
mt_application->mt_flags |= INPUT_MT_DIRECT;
|
||||
|
||||
/*
|
||||
* Model touchscreens providing buttons as touchpads.
|
||||
*/
|
||||
- if (application == HID_DG_TOUCHPAD) {
|
||||
+ if (application == HID_DG_TOUCHPAD && !td->mtclass.is_direct) {
|
||||
mt_application->mt_flags |= INPUT_MT_POINTER;
|
||||
td->inputmode_value = MT_INPUTMODE_TOUCHPAD;
|
||||
}
|
||||
@@ -1318,6 +1319,9 @@ static int mt_touch_input_configured(struct hid_device *hdev,
|
||||
if (td->serial_maybe)
|
||||
mt_post_parse_default_settings(td, app);
|
||||
|
||||
+ if (cls->is_direct)
|
||||
+ app->mt_flags |= INPUT_MT_DIRECT;
|
||||
+
|
||||
if (cls->is_indirect)
|
||||
app->mt_flags |= INPUT_MT_POINTER;
|
||||
|
||||
--
|
||||
2.42.0
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
From a6c0007592c20a54d4cd68abe26ded40e0023518 Mon Sep 17 00:00:00 2001
|
||||
From: Kerem Karabay <kekrby@gmail.com>
|
||||
Date: Tue, 27 May 2025 22:13:16 +0530
|
||||
Subject: [PATCH 4/5] HID: multitouch: specify that Apple Touch Bar is direct
|
||||
|
||||
Currently the driver determines the device type based on the
|
||||
application, but this value is not reliable on Apple Touch Bar, where
|
||||
the application is HID_DG_TOUCHPAD even though this device is direct,
|
||||
so add a quirk for the same.
|
||||
|
||||
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>
|
||||
---
|
||||
drivers/hid/hid-multitouch.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
|
||||
index f71500d1f..81c02138f 100644
|
||||
--- a/drivers/hid/hid-multitouch.c
|
||||
+++ b/drivers/hid/hid-multitouch.c
|
||||
@@ -1349,6 +1349,13 @@ static int mt_touch_input_configured(struct hid_device *hdev,
|
||||
if (td->serial_maybe)
|
||||
mt_post_parse_default_settings(td, app);
|
||||
|
||||
+ /*
|
||||
+ * The application for Apple Touch Bars is HID_DG_TOUCHPAD,
|
||||
+ * but these devices are direct.
|
||||
+ */
|
||||
+ if (cls->quirks & MT_QUIRK_APPLE_TOUCHBAR)
|
||||
+ app->mt_flags |= INPUT_MT_DIRECT;
|
||||
+
|
||||
if (cls->is_indirect)
|
||||
app->mt_flags |= INPUT_MT_POINTER;
|
||||
|
||||
--
|
||||
2.49.0
|
||||
|
||||
+25
-36
@@ -1,34 +1,39 @@
|
||||
From a74de0b6f2e1b79d54e84dbeab1b310232275d6c Mon Sep 17 00:00:00 2001
|
||||
From 23d901ab6ad4751cb05cb8724da1f6199a97ac5d Mon Sep 17 00:00:00 2001
|
||||
From: Kerem Karabay <kekrby@gmail.com>
|
||||
Date: Wed, 19 Jul 2023 19:46:02 +0300
|
||||
Subject: [PATCH 08/12] HID: multitouch: add device ID for Apple Touch Bars
|
||||
Date: Tue, 27 May 2025 22:13:17 +0530
|
||||
Subject: [PATCH 5/5] HID: multitouch: add device ID for Apple Touch Bar
|
||||
|
||||
This patch adds the device ID of Apple Touch Bar found on x86 MacBook Pros
|
||||
to the hid-multitouch driver.
|
||||
|
||||
Note that this is device ID is for T2 Macs. Testing on T1 Macs would be
|
||||
appreciated.
|
||||
|
||||
Signed-off-by: Kerem Karabay <kekrby@gmail.com>
|
||||
Co-developed-by: Aditya Garg <gargaditya08@live.com>
|
||||
Signed-off-by: Aditya Garg <gargaditya08@live.com>
|
||||
---
|
||||
drivers/hid/Kconfig | 1 +
|
||||
drivers/hid/hid-multitouch.c | 26 ++++++++++++++++++++++----
|
||||
2 files changed, 23 insertions(+), 4 deletions(-)
|
||||
drivers/hid/hid-multitouch.c | 17 +++++++++++++++++
|
||||
2 files changed, 18 insertions(+)
|
||||
|
||||
diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
|
||||
index 852de13aa..4e238df87 100644
|
||||
index a50325270..403f4517f 100644
|
||||
--- a/drivers/hid/Kconfig
|
||||
+++ b/drivers/hid/Kconfig
|
||||
@@ -737,6 +737,7 @@ config HID_MULTITOUCH
|
||||
@@ -769,6 +769,7 @@ config HID_MULTITOUCH
|
||||
Say Y here if you have one of the following devices:
|
||||
- 3M PCT touch screens
|
||||
- ActionStar dual touch panels
|
||||
+ - Touch Bars on x86 MacBook Pros
|
||||
+ - Apple Touch Bar on x86 MacBook Pros
|
||||
- Atmel panels
|
||||
- Cando dual touch panels
|
||||
- Chunghwa panels
|
||||
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
|
||||
index f98fb36ff..f881b19db 100644
|
||||
index 81c02138f..a1b251ea6 100644
|
||||
--- a/drivers/hid/hid-multitouch.c
|
||||
+++ b/drivers/hid/hid-multitouch.c
|
||||
@@ -215,6 +215,7 @@ static void mt_post_parse(struct mt_device *td, struct mt_application *app);
|
||||
@@ -221,6 +221,7 @@ static void mt_post_parse(struct mt_device *td, struct mt_application *app);
|
||||
#define MT_CLS_GOOGLE 0x0111
|
||||
#define MT_CLS_RAZER_BLADE_STEALTH 0x0112
|
||||
#define MT_CLS_SMART_TECH 0x0113
|
||||
@@ -36,59 +41,43 @@ index f98fb36ff..f881b19db 100644
|
||||
#define MT_CLS_SIS 0x0457
|
||||
|
||||
#define MT_DEFAULT_MAXCONTACT 10
|
||||
@@ -399,6 +400,13 @@ static const struct mt_class mt_classes[] = {
|
||||
@@ -406,6 +407,12 @@ static const struct mt_class mt_classes[] = {
|
||||
MT_QUIRK_CONTACT_CNT_ACCURATE |
|
||||
MT_QUIRK_SEPARATE_APP_REPORT,
|
||||
},
|
||||
+ { .name = MT_CLS_APPLE_TOUCHBAR,
|
||||
+ .quirks = MT_QUIRK_HOVERING |
|
||||
+ MT_QUIRK_TOUCH_IS_TIPSTATE |
|
||||
+ MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE,
|
||||
+ .is_direct = true,
|
||||
+ MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE |
|
||||
+ MT_QUIRK_APPLE_TOUCHBAR,
|
||||
+ .maxcontacts = 11,
|
||||
+ },
|
||||
{ .name = MT_CLS_SIS,
|
||||
.quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
|
||||
MT_QUIRK_ALWAYS_VALID |
|
||||
@@ -1755,6 +1763,15 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
|
||||
}
|
||||
}
|
||||
@@ -1858,6 +1865,11 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
+ ret = hid_parse(hdev);
|
||||
+ if (ret != 0)
|
||||
+ return ret;
|
||||
+
|
||||
+ if (mtclass->name == MT_CLS_APPLE_TOUCHBAR &&
|
||||
+ !hid_find_field(hdev, HID_INPUT_REPORT,
|
||||
+ HID_DG_TOUCHPAD, HID_DG_TRANSDUCER_INDEX))
|
||||
+ return -ENODEV;
|
||||
+
|
||||
td = devm_kzalloc(&hdev->dev, sizeof(struct mt_device), GFP_KERNEL);
|
||||
if (!td) {
|
||||
dev_err(&hdev->dev, "cannot allocate multitouch data\n");
|
||||
@@ -1802,10 +1819,6 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
|
||||
|
||||
timer_setup(&td->release_timer, mt_expired_timeout, 0);
|
||||
|
||||
- ret = hid_parse(hdev);
|
||||
- if (ret != 0)
|
||||
- return ret;
|
||||
-
|
||||
if (mtclass->quirks & MT_QUIRK_FIX_CONST_CONTACT_ID)
|
||||
mt_fix_const_fields(hdev, HID_DG_CONTACTID);
|
||||
|
||||
@@ -2240,6 +2253,11 @@ static const struct hid_device_id mt_devices[] = {
|
||||
@@ -2339,6 +2351,11 @@ static const struct hid_device_id mt_devices[] = {
|
||||
MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
|
||||
USB_DEVICE_ID_XIROKU_CSR2) },
|
||||
|
||||
+ /* Apple Touch Bars */
|
||||
+ /* Apple Touch Bar */
|
||||
+ { .driver_data = MT_CLS_APPLE_TOUCHBAR,
|
||||
+ HID_USB_DEVICE(USB_VENDOR_ID_APPLE,
|
||||
+ USB_DEVICE_ID_APPLE_TOUCHBAR_DISPLAY) },
|
||||
+ USB_DEVICE_ID_APPLE_TOUCHBAR_DISPLAY) },
|
||||
+
|
||||
/* Google MT devices */
|
||||
{ .driver_data = MT_CLS_GOOGLE,
|
||||
HID_DEVICE(HID_BUS_ANY, HID_GROUP_ANY, USB_VENDOR_ID_GOOGLE,
|
||||
--
|
||||
2.42.0
|
||||
2.49.0
|
||||
|
||||
Reference in New Issue
Block a user