linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] hid: multitouch: new device class fix Lenovo X12 trackpad sticky
@ 2022-04-18  3:15 Tao Jin
  2022-04-21  9:12 ` Benjamin Tissoires
  0 siblings, 1 reply; 2+ messages in thread
From: Tao Jin @ 2022-04-18  3:15 UTC (permalink / raw)
  To: Benjamin Tissoires, linux-input; +Cc: Jiri Kosina, linux-kernel, Tao Jin

The trackpad of the given device sends continuous report of pointers
status as per wxn8 spec. However, the spec did not clarify when the
fingers are lifted so fast that between the interval of two report
frames fingers on pad reduced from >=2 to 0. The second last report
contains >=2 fingers with tip state 1 and the last report contains only
1 finger with tip state 0. Although this can happen unfrequently, a
  quick fix will be improve the consistency to 100%. A quick fix is to
disable MT_QUIRK_ALWAYS_VALID and enable MT_QUIRK_NOT_SEEN_MEANS_UP.
Since it always send reports when fingers on pad
MT_QUIRK_STICKY_FINGERS is also not needed.

In addition to this, I2C device 04CA:00B1 may also need similar class
but with MT_QUIRK_FORCE_MULTI_INPUT disabled (but it does not harm to
 enable it on non-multi-input device either). The respective owner has
been notified and a patch may coming soon after test.

Signed-off-by: Tao Jin <tao-j@outlook.com>
---
 drivers/hid/hid-multitouch.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
index 0dece60..3ea57f3 100644
--- a/drivers/hid/hid-multitouch.c
+++ b/drivers/hid/hid-multitouch.c
@@ -194,6 +194,7 @@ static void mt_post_parse(struct mt_device *td, struct mt_application *app);
 #define MT_CLS_WIN_8_FORCE_MULTI_INPUT		0x0015
 #define MT_CLS_WIN_8_DISABLE_WAKEUP		0x0016
 #define MT_CLS_WIN_8_NO_STICKY_FINGERS		0x0017
+#define MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU	0x0018
 
 /* vendor specific classes */
 #define MT_CLS_3M				0x0101
@@ -286,6 +287,14 @@ static const struct mt_class mt_classes[] = {
 			MT_QUIRK_WIN8_PTP_BUTTONS |
 			MT_QUIRK_FORCE_MULTI_INPUT,
 		.export_all_inputs = true },
+	{ .name = MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU,
+		.quirks = MT_QUIRK_IGNORE_DUPLICATES |
+			MT_QUIRK_HOVERING |
+			MT_QUIRK_CONTACT_CNT_ACCURATE |
+			MT_QUIRK_WIN8_PTP_BUTTONS |
+			MT_QUIRK_FORCE_MULTI_INPUT |
+			MT_QUIRK_NOT_SEEN_MEANS_UP,
+		.export_all_inputs = true },
 	{ .name = MT_CLS_WIN_8_DISABLE_WAKEUP,
 		.quirks = MT_QUIRK_ALWAYS_VALID |
 			MT_QUIRK_IGNORE_DUPLICATES |
@@ -783,6 +792,7 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
 		case HID_DG_CONFIDENCE:
 			if ((cls->name == MT_CLS_WIN_8 ||
 			     cls->name == MT_CLS_WIN_8_FORCE_MULTI_INPUT ||
+			     cls->name == MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU ||
 			     cls->name == MT_CLS_WIN_8_DISABLE_WAKEUP) &&
 				(field->application == HID_DG_TOUCHPAD ||
 				 field->application == HID_DG_TOUCHSCREEN))
@@ -2035,7 +2045,7 @@ static const struct hid_device_id mt_devices[] = {
 			   USB_DEVICE_ID_LENOVO_X1_TAB3) },
 
 	/* Lenovo X12 TAB Gen 1 */
-	{ .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT,
+	{ .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU,
 		HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8,
 			   USB_VENDOR_ID_LENOVO,
 			   USB_DEVICE_ID_LENOVO_X12_TAB) },
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] hid: multitouch: new device class fix Lenovo X12 trackpad sticky
  2022-04-18  3:15 [PATCH] hid: multitouch: new device class fix Lenovo X12 trackpad sticky Tao Jin
@ 2022-04-21  9:12 ` Benjamin Tissoires
  0 siblings, 0 replies; 2+ messages in thread
From: Benjamin Tissoires @ 2022-04-21  9:12 UTC (permalink / raw)
  To: Tao Jin; +Cc: linux-input, Jiri Kosina, linux-kernel

On Mon, Apr 18, 2022 at 5:16 AM Tao Jin <tao-j@outlook.com> wrote:
>
> The trackpad of the given device sends continuous report of pointers
> status as per wxn8 spec. However, the spec did not clarify when the
> fingers are lifted so fast that between the interval of two report
> frames fingers on pad reduced from >=2 to 0. The second last report
> contains >=2 fingers with tip state 1 and the last report contains only
> 1 finger with tip state 0. Although this can happen unfrequently, a
>   quick fix will be improve the consistency to 100%. A quick fix is to
> disable MT_QUIRK_ALWAYS_VALID and enable MT_QUIRK_NOT_SEEN_MEANS_UP.
> Since it always send reports when fingers on pad
> MT_QUIRK_STICKY_FINGERS is also not needed.

I would really like to see tests for this device added to hid-tools[0].

This would allow me to better understand the issue and also ensure we
are not regressing in the future.

Cheers,
Benjamin


[0] https://gitlab.freedesktop.org/libevdev/hid-tools

>
> In addition to this, I2C device 04CA:00B1 may also need similar class
> but with MT_QUIRK_FORCE_MULTI_INPUT disabled (but it does not harm to
>  enable it on non-multi-input device either). The respective owner has
> been notified and a patch may coming soon after test.
>
> Signed-off-by: Tao Jin <tao-j@outlook.com>
> ---
>  drivers/hid/hid-multitouch.c | 12 +++++++++++-
>  1 file changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
> index 0dece60..3ea57f3 100644
> --- a/drivers/hid/hid-multitouch.c
> +++ b/drivers/hid/hid-multitouch.c
> @@ -194,6 +194,7 @@ static void mt_post_parse(struct mt_device *td, struct mt_application *app);
>  #define MT_CLS_WIN_8_FORCE_MULTI_INPUT         0x0015
>  #define MT_CLS_WIN_8_DISABLE_WAKEUP            0x0016
>  #define MT_CLS_WIN_8_NO_STICKY_FINGERS         0x0017
> +#define MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU    0x0018
>
>  /* vendor specific classes */
>  #define MT_CLS_3M                              0x0101
> @@ -286,6 +287,14 @@ static const struct mt_class mt_classes[] = {
>                         MT_QUIRK_WIN8_PTP_BUTTONS |
>                         MT_QUIRK_FORCE_MULTI_INPUT,
>                 .export_all_inputs = true },
> +       { .name = MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU,
> +               .quirks = MT_QUIRK_IGNORE_DUPLICATES |
> +                       MT_QUIRK_HOVERING |
> +                       MT_QUIRK_CONTACT_CNT_ACCURATE |
> +                       MT_QUIRK_WIN8_PTP_BUTTONS |
> +                       MT_QUIRK_FORCE_MULTI_INPUT |
> +                       MT_QUIRK_NOT_SEEN_MEANS_UP,
> +               .export_all_inputs = true },
>         { .name = MT_CLS_WIN_8_DISABLE_WAKEUP,
>                 .quirks = MT_QUIRK_ALWAYS_VALID |
>                         MT_QUIRK_IGNORE_DUPLICATES |
> @@ -783,6 +792,7 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
>                 case HID_DG_CONFIDENCE:
>                         if ((cls->name == MT_CLS_WIN_8 ||
>                              cls->name == MT_CLS_WIN_8_FORCE_MULTI_INPUT ||
> +                            cls->name == MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU ||
>                              cls->name == MT_CLS_WIN_8_DISABLE_WAKEUP) &&
>                                 (field->application == HID_DG_TOUCHPAD ||
>                                  field->application == HID_DG_TOUCHSCREEN))
> @@ -2035,7 +2045,7 @@ static const struct hid_device_id mt_devices[] = {
>                            USB_DEVICE_ID_LENOVO_X1_TAB3) },
>
>         /* Lenovo X12 TAB Gen 1 */
> -       { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT,
> +       { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU,
>                 HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8,
>                            USB_VENDOR_ID_LENOVO,
>                            USB_DEVICE_ID_LENOVO_X12_TAB) },
> --
> 2.35.1
>


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-04-21  9:12 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-18  3:15 [PATCH] hid: multitouch: new device class fix Lenovo X12 trackpad sticky Tao Jin
2022-04-21  9:12 ` Benjamin Tissoires

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).