* [PATCH 1/2] HID: multitouch: add support for Goodix GXTP7863 touchpad
@ 2026-08-14 17:12 Ruzal Daminov
2026-08-19 9:15 ` [PATCH v2] " Ruzal Daminov
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Ruzal Daminov @ 2026-08-14 17:12 UTC (permalink / raw)
To: jikos, bentiss; +Cc: linux-input, linux-kernel, Ruzal Daminov
The Goodix GXTP7863 touchpad controller (VID: 0x27c6, PID: 0x01e0)
found on Honor MagicBook laptops (e.g. FMI-76 / X14 / X16 Plus)
was missing from the mt_devices[] table.
As a result, it was claimed by hid-generic, which erroneously mapped
the vendor telemetry collection (0xFF01) to an input node, translating
the 1-Hz heartbeat timestamp into an endless loop of phantom
KEY_BRIGHTNESSUP autorepeat events.
Add the device to mt_devices[] with MT_CLS_DEFAULT so hid-multitouch
claims the touchpad, eliminating the phantom input node.
Tested on Honor MagicBook X14 Plus (FMI-76, AMD Ryzen 8845HS).
Signed-off-by: Ruzal Daminov <daminovruzal7@gmail.com>
---
drivers/hid/hid-multitouch.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
index edb37b4c8..f5ddaff5c 100644
--- a/drivers/hid/hid-multitouch.c
+++ b/drivers/hid/hid-multitouch.c
@@ -2269,6 +2269,11 @@ static void mt_on_hid_hw_close(struct hid_device *hdev)
* So there is no point in adding here any device with MT_CLS_DEFAULT.
*/
static const struct hid_device_id mt_devices[] = {
+ /* Goodix GXTP7863 Touchpad */
+ { .driver_data = MT_CLS_DEFAULT,
+ HID_DEVICE(BUS_I2C, HID_GROUP_ANY,
+ I2C_VENDOR_ID_GOODIX, I2C_DEVICE_ID_GOODIX_01E0) },
+
/* 3M panels */
{ .driver_data = MT_CLS_3M,
--
2.55.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v2] HID: multitouch: add support for Goodix GXTP7863 touchpad
2026-08-14 17:12 [PATCH 1/2] HID: multitouch: add support for Goodix GXTP7863 touchpad Ruzal Daminov
@ 2026-08-19 9:15 ` Ruzal Daminov
2026-08-19 9:28 ` sashiko-bot
2026-08-19 9:39 ` [PATCH v3] " Ruzal Daminov
2026-08-19 12:33 ` [PATCH v4] " Ruzal Daminov
2 siblings, 1 reply; 6+ messages in thread
From: Ruzal Daminov @ 2026-08-19 9:15 UTC (permalink / raw)
To: jikos, bentiss; +Cc: linux-input, linux-kernel, Ruzal Daminov
The Goodix GXTP7863 touchpad controller (VID: 0x27c6, PID: 0x01e0)
found on Honor MagicBook laptops (e.g. FMI-76 / X14 Plus)
was missing from the mt_devices[] table.
As a result, it was claimed by hid-generic, which erroneously mapped
the vendor telemetry collection (0xFF01) to an input node, translating
the 1-Hz heartbeat timestamp into an endless loop of phantom
KEY_BRIGHTNESSUP autorepeat events.
Add the I2C_DEVICE_ID_GOODIX_01E0 definition to hid-ids.h and add the
device to mt_devices[] with MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU so
hid-multitouch claims the touchpad, eliminating the phantom input node.
Tested on Honor MagicBook X14 Plus (FMI-76, AMD Ryzen 8845HS).
Signed-off-by: Ruzal Daminov <daminovruzal7@gmail.com>
---
v1 -> v2:
- Move entry to alphabetical order in the Goodix section.
- Declare I2C_DEVICE_ID_GOODIX_01E0 in hid-ids.h instead of hardcoding.
- Use MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU matching sibling GT7868Q devices.
drivers/hid/hid-ids.h | 1 +
drivers/hid/hid-multitouch.c | 5 +++++
2 files changed, 6 insertions(+)
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index 1059922baaacd2..60d9d524cd2e15 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -562,6 +562,7 @@
#define USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_E100 0xe100
#define I2C_VENDOR_ID_GOODIX 0x27c6
+#define I2C_DEVICE_ID_GOODIX_01E0 0x01e0
#define I2C_DEVICE_ID_GOODIX_01E8 0x01e8
#define I2C_DEVICE_ID_GOODIX_01E9 0x01e9
#define I2C_DEVICE_ID_GOODIX_01F0 0x01f0
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
index edb37b4c867e4b..ca0b40e6b8a83d 100644
--- a/drivers/hid/hid-multitouch.c
+++ b/drivers/hid/hid-multitouch.c
@@ -2460,6 +2460,11 @@ static const struct hid_device_id mt_devices[] = {
MT_BT_DEVICE(USB_VENDOR_ID_FRUCTEL,
USB_DEVICE_ID_GAMETEL_MT_MODE) },
+ /* Goodix GXTP7863 Touchpad */
+ { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU,
+ HID_DEVICE(BUS_I2C, HID_GROUP_ANY, I2C_VENDOR_ID_GOODIX,
+ I2C_DEVICE_ID_GOODIX_01E0) },
+
/* Goodix GT7868Q devices */
{ .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU,
HID_DEVICE(BUS_I2C, HID_GROUP_ANY, I2C_VENDOR_ID_GOODIX,
--
2.45.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v2] HID: multitouch: add support for Goodix GXTP7863 touchpad
2026-08-19 9:15 ` [PATCH v2] " Ruzal Daminov
@ 2026-08-19 9:28 ` sashiko-bot
0 siblings, 0 replies; 6+ messages in thread
From: sashiko-bot @ 2026-08-19 9:28 UTC (permalink / raw)
To: Ruzal Daminov; +Cc: linux-input, dmitry.torokhov
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] The patch fails to eliminate the phantom input node and KEY_BRIGHTNESSUP autorepeat events because the selected multitouch class (MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU) explicitly exports all unknown inputs.
--
--- Patch [1]: [PATCH v2] HID: multitouch: add support for Goodix GXTP7863 touchpad ---
commit 27cf212c4e16014a4475e61f74a677cd87497bef
Author: Ruzal Daminov <daminovruzal7@gmail.com>
HID: multitouch: add support for Goodix GXTP7863 touchpad
This commit adds the Goodix GXTP7863 touchpad controller to the mt_devices[]
table in hid-multitouch. It uses MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU with the
intent of claiming the device to eliminate an erroneous phantom input node
that causes endless KEY_BRIGHTNESSUP autorepeat events.
> diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
> index edb37b4c867e4..ca0b40e6b8a83 100644
> --- a/drivers/hid/hid-multitouch.c
> +++ b/drivers/hid/hid-multitouch.c
> @@ -2460,6 +2460,11 @@ static const struct hid_device_id mt_devices[] = {
> MT_BT_DEVICE(USB_VENDOR_ID_FRUCTEL,
> USB_DEVICE_ID_GAMETEL_MT_MODE) },
>
> + /* Goodix GXTP7863 Touchpad */
> + { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU,
> + HID_DEVICE(BUS_I2C, HID_GROUP_ANY, I2C_VENDOR_ID_GOODIX,
> + I2C_DEVICE_ID_GOODIX_01E0) },
[Severity: High]
Will this actually prevent the phantom KEY_BRIGHTNESSUP events?
Because MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU sets export_all_inputs = true,
the filter in drivers/hid/hid-multitouch.c:mt_input_mapping() is bypassed
for the vendor collection:
if (!td->mtclass.export_all_inputs &&
field->application != HID_DG_TOUCHSCREEN &&
...
return -1;
This causes mt_input_mapping() to return 0, delegating the mapping to
hid-input.c which still maps the telemetry usage to KEY_BRIGHTNESSUP.
Then, when the telemetry report arrives, mt_event() returns 0 for this
non-MT collection:
rdata = mt_find_report_data(td, field->report);
if (rdata && rdata->is_mt_collection)
return mt_touch_event(hid, field, usage, value);
return 0;
This allows hidinput_hid_event() to process it and emit the phantom
keypresses, which seems to leave the system in the same state it was
under hid-generic.
Would a different class that doesn't force export_all_inputs be more
appropriate here to successfully ignore the vendor telemetry?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260819091515.332-1-daminovruzal7@gmail.com?part=1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v3] HID: multitouch: add support for Goodix GXTP7863 touchpad
2026-08-14 17:12 [PATCH 1/2] HID: multitouch: add support for Goodix GXTP7863 touchpad Ruzal Daminov
2026-08-19 9:15 ` [PATCH v2] " Ruzal Daminov
@ 2026-08-19 9:39 ` Ruzal Daminov
2026-08-19 9:50 ` sashiko-bot
2026-08-19 12:33 ` [PATCH v4] " Ruzal Daminov
2 siblings, 1 reply; 6+ messages in thread
From: Ruzal Daminov @ 2026-08-19 9:39 UTC (permalink / raw)
To: jikos, bentiss; +Cc: linux-input, linux-kernel, Ruzal Daminov
The Goodix GXTP7863 touchpad controller (VID: 0x27c6, PID: 0x01e0)
found on Honor MagicBook laptops (e.g. FMI-76 / X14 Plus)
was missing from the mt_devices[] table.
As a result, it was claimed by hid-generic, which erroneously mapped
the vendor telemetry collection (0xFF01) to an input node, translating
the 1-Hz heartbeat timestamp into an endless loop of phantom
KEY_BRIGHTNESSUP autorepeat events.
Add the I2C_DEVICE_ID_GOODIX_01E0 definition to hid-ids.h and add the
device to mt_devices[] with MT_CLS_DEFAULT so hid-multitouch claims the
touchpad. Using MT_CLS_DEFAULT ensures export_all_inputs remains false
(unlike MT_CLS_WIN_8 classes), allowing mt_input_mapping() to ignore the
vendor telemetry collection (0xFF01) and eliminate the phantom input node.
Tested on Honor MagicBook X14 Plus (FMI-76, AMD Ryzen 8845HS).
Signed-off-by: Ruzal Daminov <daminovruzal7@gmail.com>
---
v2 -> v3:
- Use MT_CLS_DEFAULT instead of MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU
to ensure export_all_inputs remains false, allowing mt_input_mapping()
to ignore the vendor telemetry collection (0xFF01) and eliminate
the phantom input node.
v1 -> v2:
- Move entry to alphabetical order in the Goodix section.
- Declare I2C_DEVICE_ID_GOODIX_01E0 in hid-ids.h instead of hardcoding.
drivers/hid/hid-ids.h | 1 +
drivers/hid/hid-multitouch.c | 5 +++++
2 files changed, 6 insertions(+)
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index 1059922baaacd2..60d9d524cd2e15 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -562,6 +562,7 @@
#define USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_E100 0xe100
#define I2C_VENDOR_ID_GOODIX 0x27c6
+#define I2C_DEVICE_ID_GOODIX_01E0 0x01e0
#define I2C_DEVICE_ID_GOODIX_01E8 0x01e8
#define I2C_DEVICE_ID_GOODIX_01E9 0x01e9
#define I2C_DEVICE_ID_GOODIX_01F0 0x01f0
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
index edb37b4c867e4b..ca0b40e6b8a83d 100644
--- a/drivers/hid/hid-multitouch.c
+++ b/drivers/hid/hid-multitouch.c
@@ -2460,6 +2460,11 @@ static const struct hid_device_id mt_devices[] = {
MT_BT_DEVICE(USB_VENDOR_ID_FRUCTEL,
USB_DEVICE_ID_GAMETEL_MT_MODE) },
+ /* Goodix GXTP7863 Touchpad */
+ { .driver_data = MT_CLS_DEFAULT,
+ HID_DEVICE(BUS_I2C, HID_GROUP_ANY, I2C_VENDOR_ID_GOODIX,
+ I2C_DEVICE_ID_GOODIX_01E0) },
+
/* Goodix GT7868Q devices */
{ .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU,
HID_DEVICE(BUS_I2C, HID_GROUP_ANY, I2C_VENDOR_ID_GOODIX,
--
2.45.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v3] HID: multitouch: add support for Goodix GXTP7863 touchpad
2026-08-19 9:39 ` [PATCH v3] " Ruzal Daminov
@ 2026-08-19 9:50 ` sashiko-bot
0 siblings, 0 replies; 6+ messages in thread
From: sashiko-bot @ 2026-08-19 9:50 UTC (permalink / raw)
To: Ruzal Daminov; +Cc: dmitry.torokhov, linux-input
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] Using `MT_CLS_DEFAULT` instead of a Win8 PTP class disables critical Windows 8 Precision Touchpad (PTP) quirks, causing severe regressions in touchpad functionality (such as broken clickpad button tracking and stuck finger releases).
--
--- Patch [1]: [PATCH v3] HID: multitouch: add support for Goodix GXTP7863 touchpad ---
commit 04179c956954e748355b634f8668ad96cef6871c
Author: Ruzal Daminov <daminovruzal7@gmail.com>
HID: multitouch: add support for Goodix GXTP7863 touchpad
This commit adds the Goodix GXTP7863 touchpad controller to the mt_devices[]
table so it is claimed by hid-multitouch instead of hid-generic. It uses
MT_CLS_DEFAULT to prevent the vendor telemetry collection (0xFF01) from
being mapped to an input node.
> diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
> --- a/drivers/hid/hid-multitouch.c
> +++ b/drivers/hid/hid-multitouch.c
[ ... ]
> @@ -2460,6 +2460,11 @@ static const struct hid_device_id mt_devices[] = {
> MT_BT_DEVICE(USB_VENDOR_ID_FRUCTEL,
> USB_DEVICE_ID_GAMETEL_MT_MODE) },
>
> + /* Goodix GXTP7863 Touchpad */
> + { .driver_data = MT_CLS_DEFAULT,
> + HID_DEVICE(BUS_I2C, HID_GROUP_ANY, I2C_VENDOR_ID_GOODIX,
> + I2C_DEVICE_ID_GOODIX_01E0) },
> +
[Severity: High]
Does using MT_CLS_DEFAULT here disable necessary Windows 8 Precision
Touchpad quirks?
While it successfully prevents export_all_inputs from mapping the telemetry
node, MT_CLS_DEFAULT lacks quirks like MT_QUIRK_WIN8_PTP_BUTTONS and
MT_QUIRK_STICKY_FINGERS.
Without MT_QUIRK_WIN8_PTP_BUTTONS, will mt_sync_frame() fail to emit
BTN_LEFT events and break physical left-clicks?
Without MT_QUIRK_STICKY_FINGERS, will mt_touch_report() fail to arm the
release_timer, potentially leaving touches stuck if the firmware drops a
release report?
The file-level documentation in mt_devices mentions that there is no
point in adding a device with MT_CLS_DEFAULT. Is there a better way to
ignore the vendor telemetry collection without losing the PTP quirks?
> /* Goodix GT7868Q devices */
> { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU,
> HID_DEVICE(BUS_I2C, HID_GROUP_ANY, I2C_VENDOR_ID_GOODIX,
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260819093938.1387-1-daminovruzal7@gmail.com?part=1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v4] HID: multitouch: add support for Goodix GXTP7863 touchpad
2026-08-14 17:12 [PATCH 1/2] HID: multitouch: add support for Goodix GXTP7863 touchpad Ruzal Daminov
2026-08-19 9:15 ` [PATCH v2] " Ruzal Daminov
2026-08-19 9:39 ` [PATCH v3] " Ruzal Daminov
@ 2026-08-19 12:33 ` Ruzal Daminov
2 siblings, 0 replies; 6+ messages in thread
From: Ruzal Daminov @ 2026-08-19 12:33 UTC (permalink / raw)
To: jikos, bentiss; +Cc: linux-input, linux-kernel, Ruzal Daminov
The Goodix GXTP7863 touchpad controller (VID: 0x27c6, PID: 0x01e0)
found on Honor MagicBook laptops (e.g. FMI-76 / X14 Plus)
was missing from the mt_devices[] table.
As a result, it was claimed by hid-generic, which erroneously mapped
the vendor telemetry collection (0xFF01) to an input node, translating
the 1-Hz heartbeat timestamp into an endless loop of phantom
KEY_BRIGHTNESSUP autorepeat events.
Fix this by:
1. Adding I2C_DEVICE_ID_GOODIX_01E0 to hid-ids.h.
2. Adding the device to mt_devices[] with MT_CLS_WIN_8 so hid-multitouch
claims the touchpad and retains full Win8 PTP quirks.
3. Filtering out the 0xFF01 vendor collection in mt_input_mapping()
so the telemetry report is ignored and no phantom input node is
created.
Tested on Honor MagicBook X14 Plus (FMI-76, AMD Ryzen 8845HS).
Signed-off-by: Ruzal Daminov <daminovruzal7@gmail.com>
---
v3 -> v4:
- Retain MT_CLS_WIN_8 to preserve Win8 PTP quirks, while explicitly
filtering out field->application == 0xff010001 in mt_input_mapping()
to ignore the vendor telemetry collection.
v2 -> v3:
- Use MT_CLS_DEFAULT to keep export_all_inputs false.
v1 -> v2:
- Move entry to alphabetical order in the Goodix section.
- Declare I2C_DEVICE_ID_GOODIX_01E0 in hid-ids.h.
drivers/hid/hid-ids.h | 1 +
drivers/hid/hid-multitouch.c | 11 +++++++++++
2 files changed, 12 insertions(+)
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index 1059922baaacd2..60d9d524cd2e15 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -562,6 +562,7 @@
#define USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_E100 0xe100
#define I2C_VENDOR_ID_GOODIX 0x27c6
+#define I2C_DEVICE_ID_GOODIX_01E0 0x01e0
#define I2C_DEVICE_ID_GOODIX_01E8 0x01e8
#define I2C_DEVICE_ID_GOODIX_01E9 0x01e9
#define I2C_DEVICE_ID_GOODIX_01F0 0x01f0
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
index edb37b4c867e4b..d2ada08a6b01bf 100644
--- a/drivers/hid/hid-multitouch.c
+++ b/drivers/hid/hid-multitouch.c
@@ -1543,6 +1543,12 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
if (ret != 0)
return ret;
+ /* Ignore Goodix FreeTouch vendor telemetry collection */
+ if (hdev->vendor == I2C_VENDOR_ID_GOODIX &&
+ hdev->product == I2C_DEVICE_ID_GOODIX_01E0 &&
+ field->application == 0xff010001)
+ return -1;
+
/* let hid-core decide for the others */
return 0;
}
@@ -2460,6 +2466,11 @@ static const struct hid_device_id mt_devices[] = {
MT_BT_DEVICE(USB_VENDOR_ID_FRUCTEL,
USB_DEVICE_ID_GAMETEL_MT_MODE) },
+ /* Goodix GXTP7863 Touchpad */
+ { .driver_data = MT_CLS_WIN_8,
+ HID_DEVICE(BUS_I2C, HID_GROUP_ANY, I2C_VENDOR_ID_GOODIX,
+ I2C_DEVICE_ID_GOODIX_01E0) },
+
/* Goodix GT7868Q devices */
{ .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU,
HID_DEVICE(BUS_I2C, HID_GROUP_ANY, I2C_VENDOR_ID_GOODIX,
--
2.45.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-08-19 12:33 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-14 17:12 [PATCH 1/2] HID: multitouch: add support for Goodix GXTP7863 touchpad Ruzal Daminov
2026-08-19 9:15 ` [PATCH v2] " Ruzal Daminov
2026-08-19 9:28 ` sashiko-bot
2026-08-19 9:39 ` [PATCH v3] " Ruzal Daminov
2026-08-19 9:50 ` sashiko-bot
2026-08-19 12:33 ` [PATCH v4] " Ruzal Daminov
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.