Comment 74 for bug 1887190

Revision history for this message
Coiby Xu (coiby) wrote :

Hi Helmut,

Thank you for sharing the article on MSFT (I'm been long wondering what does MSFT mean).

> Right, it affects all MSFT touchpads.
>
> At the moment there is nothing for MSFT - we will have to be very patient and hope, that someone can find a driver for it.

I think The Microsoft Precision Touchpad has been implemented in drivers/hid/hid-multitouch.c.

$ git log --grep="Precision Touchpad"
commit 9152c7d77d87e2b6b9ccc21bb52f8eea15744f50
Author: Dmitry Torokhov <email address hidden>
Date: Fri Jul 13 16:13:52 2018 +0200

    HID: multitouch: report MT_TOOL_PALM for non-confident touches

    According to Microsoft specification [1] for Precision Touchpads (and
    Touchscreens) the devices use "confidence" reports to signal accidental
    touches, or contacts that are "too large to be a finger". Instead of
    simply marking contact inactive in this case (which causes issues if
    contact was originally proper and we lost confidence in it later, as
    this results in accidental clicks, drags, etc), let's report such
    contacts as MT_TOOL_PALM and let userspace decide what to do.

    [1] https://docs.microsoft.com/en-us/windows-hardware/design/component-guidelines/touchpad-windows-precision-touchpad-collection

And https://pcsupport.lenovo.com/us/en/products/laptops-and-netbooks/legion-series/legion-5-15arh05/downloads/driver-list/ doesn't list the driver for the touchpad. According to this Chinese webpage https://newsupport.lenovo.com.cn/driveDownloads_detail.html?driveId=47994, no special driver is needed for Windows 10.

So maybe there are some issues in drivers/hid/hid-mulititouch.c. For for the Synaptics touchpad of this model, the pointer won't move but 2/3/4 fingers touching events can be reported. And for the Elan touchpad, according to Stefano, no events are reported.

Since both touchpads works on Windows and "Precision touchpad becomes mandatory for Windows 10 notebooks", we can fix both touchpads by fixing hid-mulittouch. Can someone show me the content of /sys/kernel/debug/hid/*\:04F3\:3140.0001/rdesc which has the Report Descriptors when your ELAN touchpad is being handled by hid-multitouch? For example, for the Synaptics touchpad,

$ cat /sys/kernel/debug/hid/0018\:06CB\:7F28.0001/rdesc
05 01 09 02 a1 01 85 02 09 01 a1 00 05 09 19 01 29 02 15 00 25 01 75 01 95 02 81 02 95 06 81 01 05 01 09 30 09 31 15 81 25 7f 75 08 95 02 81 06 c0 c0 05 0d 09 05 a1 01 85 03 05 0d 09 22 a1 02 15 00 25 01 09 47 0
9 42 95 02 75 01 81 02 95 01 75 03 25 05 09 51 81 02 75 01 95 03 81 03 05 01 15 00 26 c8 04 75 10 55 0e 65 11 09 30 35 00 46 fc 03 95 01 81 02 46 9d 02 26 24 03 09 31 81 02 c0 05 0d 09 22 a1 02 15 00 25 01 09 47
 09 42 95 02 75 01 81 02 95 01 75 03 25 05 09 51 81 02 75 01 95 03 81 03 05 01 15 00 26 c8 04 75 10 55 0e 65 11 09 30 35 00 46 fc 03 95 01 81 02 46 9d 02 26 24 03 09 31 81 02 c0 05 0d 09 22 a1 02 15 00 25 01 09
47 09 42 95 02 75 01 81 02 95 01 75 03 25 05 09 51 81 02 75 01 95 03 81 03 05 01 15 00 26 c8 04 75 10 55 0e 65 11 09 30 35 00 46 fc 03 95 01 81 02 46 9d 02 26 24 03 09 31 81 02 c0 05 0d 09 22 a1 02 15 00 25 01 0
9 47 09 42 95 02 75 01 81 02 95 01 75 03 25 05 09 51 81 02 75 01 95 03 81 03 05 01 15 00 26 c8 04 75 10 55 0e 65 11 09 30 35 00 46 fc 03 95 01 81 02 46 9d 02 26 24 03 09 31 81 02 c0 05 0d 09 22 a1 02 15 00 25 01
 09 47 09 42 95 02 75 01 81 02 95 01 75 03 25 05 09 51 81 02 75 01 95 03 81 03 05 01 15 00 26 c8 04 75 10 55 0e 65 11 09 30 35 00 46 fc 03 95 01 81 02 46 9d 02 26 24 03 09 31 81 02 c0 05 0d 55 0c 66 01 10 47 ff
ff 00 00 27 ff ff 00 00 75 10 95 01 09 56 81 02 09 54 25 7f 95 01 75 08 81 02 05 09 09 01 25 01 75 01 95 01 81 02 95 07 81 03 05 0d 85 08 09 55 09 59 75 04 95 02 25 0f b1 02 85 0d 09 60 75 01 95 01 15 00 25 01 b
1 02 95 07 b1 03 85 07 06 00 ff 09 c5 15 00 26 ff 00 75 08 96 00 01 b1 02 c0 05 0d 09 0e a1 01 85 04 09 22 a1 02 09 52 15 00 25 0a 75 08 95 01 b1 02 c0 09 22 a1 00 85 06 09 57 09 58 75 01 95 02 25 01 b1 02 95 06
 b1 03 c0 c0 06 00 ff 09 01 a1 01 85 09 09 02 15 00 26 ff 00 75 08 95 14 91 02 85 0a 09 03 15 00 26 ff 00 75 08 95 14 91 02 85 0b 09 04 15 00 26 ff 00 75 08 95 3d 81 02 85 0c 09 05 15 00 26 ff 00 75 08 95 3d 81
02 85 0f 09 06 15 00 26 ff 00 75 08 95 03 b1 02 85 0e 09 07 15 00 26 ff 00 75 08 95 01 b1 02 c0

  INPUT(2)[INPUT]
    Field(0)
      Physical(GenericDesktop.Pointer)
      Application(GenericDesktop.Mouse)
      Usage(2)
        Button.0001
        Button.0002
      Logical Minimum(0)
      Logical Maximum(1)
      Report Size(1)
      Report Count(2)
      Report Offset(0)
      Flags( Variable Absolute )
    Field(1)
      Physical(GenericDesktop.Pointer)
      Application(GenericDesktop.Mouse)
      Usage(2)
        GenericDesktop.X
        GenericDesktop.Y
      Logical Minimum(-127)
      Logical Maximum(127)
      Report Size(8)
      Report Count(2)
      Report Offset(8)
      Flags( Variable Relative )
  INPUT(3)[INPUT]
    Field(0)
      Logical(Digitizers.Finger)
      Application(Digitizers.TouchPad)
      Usage(2)
        Digitizers.Confidence
        Digitizers.TipSwitch
      Logical Minimum(0)
      Logical Maximum(1)
      Report Size(1)
      Report Count(2)
      Report Offset(0)
      Flags( Variable Absolute )
    Field(1)
      Logical(Digitizers.Finger)
      Application(Digitizers.TouchPad)
      Usage(1)
        Digitizers.ContactID
      Logical Minimum(0)
      Logical Maximum(5)
      Report Size(3)
      Report Count(1)
      Report Offset(2)
      Flags( Variable Absolute )
    Field(2)
      Logical(Digitizers.Finger)
      Application(Digitizers.TouchPad)
      Usage(1)
        GenericDesktop.X
      Logical Minimum(0)
      Logical Maximum(1224)
      Physical Minimum(0)
      Physical Maximum(1020)
      Unit Exponent(-2)
      Unit(SI Linear : Centimeter)
      Report Size(16)
      Report Count(1)
      Report Offset(8)
      Flags( Variable Absolute )
    Field(3)
      Logical(Digitizers.Finger)
      Application(Digitizers.TouchPad)
      Usage(1)
        GenericDesktop.Y
      Logical Minimum(0)
      Logical Maximum(804)
      Physical Minimum(0)
      Physical Maximum(669)
      Unit Exponent(-2)
      Unit(SI Linear : Centimeter)
      Report Size(16)
      Report Count(1)
      Report Offset(24)
      Flags( Variable Absolute )