All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.