diff mbox series

[RFC] Dell XPS 15 multitouch touchpad

Message ID 20190106.180952.2277917517304490024.rene@exactcode.com (mailing list archive)
State New, archived
Headers show
Series [RFC] Dell XPS 15 multitouch touchpad | expand

Commit Message

Rene Rebe Jan. 6, 2019, 5:09 p.m. UTC
Hi,

I am testing a Dell XPS 15 all-in-one and noticed the I2C connected
touchpad had only very basic mouse function. I debugged around a bit
and manually modprobing hid-multitouch appears to bind this to the
hid-multitouch for grearly enhanced functionatliy. Now I could
probably just add hid-multitouch to some init script, but I wanted to
get it to auto-load liek for my Surface Typecover. I added the ID,
Synaptics, 0x7A13 to the hid-quirks for a test, but this is not yet
enough to auto-load. Before I continue adding the ID all over the
place, including the hid-multitouch.c, could someone shortly comment
about the best, intended place for this - there are so many IDs all
over the place and it is not obvious where it is necessary and where
not.

Thank you!

      René Rebe

Comments

Benjamin Tissoires Jan. 7, 2019, 8:11 a.m. UTC | #1
Hi Rene,

On Sun, Jan 6, 2019 at 5:10 PM Rene Rebe <rene@exactcode.com> wrote:
>
> Hi,
>
> I am testing a Dell XPS 15 all-in-one and noticed the I2C connected
> touchpad had only very basic mouse function. I debugged around a bit
> and manually modprobing hid-multitouch appears to bind this to the
> hid-multitouch for grearly enhanced functionatliy. Now I could

Hmm, if the module is compiled in and you are using udev, there should
be no need to manually modprobe the driver.
Which distribution are you using? and are you running the stock kernel
for that distribution?

> probably just add hid-multitouch to some init script, but I wanted to
> get it to auto-load liek for my Surface Typecover. I added the ID,
> Synaptics, 0x7A13 to the hid-quirks for a test, but this is not yet

Is this ID for the Surface TypeCover or the XPS 15?

> enough to auto-load. Before I continue adding the ID all over the
> place, including the hid-multitouch.c, could someone shortly comment
> about the best, intended place for this - there are so many IDs all
> over the place and it is not obvious where it is necessary and where
> not.

Short answer nowhere :)
udev should load it for you. At least if udev loads hid-generic, there
is no reasons it doesn't load hid-multitouch.

>
> Thank you!
>
>       René Rebe
>
> --- drivers/hid/hid-quirks.c.vanilla    2019-01-06 17:35:58.304007689 +0100
> +++ drivers/hid/hid-quirks.c    2019-01-06 17:47:30.776010444 +0100
> @@ -157,6 +157,7 @@
>         { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_LTS2), HID_QUIRK_NO_INIT_REPORTS },
>         { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_QUAD_HD), HID_QUIRK_NO_INIT_REPORTS },
>         { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_TP_V103), HID_QUIRK_NO_INIT_REPORTS },
> +       { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, 0x7A13), HID_QUIRK_MULTI_INPUT },

HID_QUIRK_MULTI_INPUT should not be set for hid-multitouch devices.
The driver takes care of settings its own quirks.

>         { HID_USB_DEVICE(USB_VENDOR_ID_TOPMAX, USB_DEVICE_ID_TOPMAX_COBRAPAD), HID_QUIRK_BADPAD },
>         { HID_USB_DEVICE(USB_VENDOR_ID_TOUCHPACK, USB_DEVICE_ID_TOUCHPACK_RTS), HID_QUIRK_MULTI_INPUT },
>         { HID_USB_DEVICE(USB_VENDOR_ID_TPV, USB_DEVICE_ID_TPV_OPTICAL_TOUCHSCREEN_8882), HID_QUIRK_NOGET },
> @@ -507,6 +508,7 @@
>  #endif
>  #if IS_ENABLED(CONFIG_HID_MULTITOUCH)
>         { HID_USB_DEVICE(USB_VENDOR_ID_LG, USB_DEVICE_ID_LG_MELFAS_MT) },
> +       { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, 0x7A13) },

You are just preventing hid-generic you bind on your device, which
might be worse than what you want.
If hid-multitouch is not loaded, then you don't even have basic mouse
capabilities.

So, if for a very unfortunate events udev can't load the device (which
I strongly doubt given than modprobing the driver works), the only
place that would have an effect is adding the ID in hid-multitouch.c.

But again, if udev doesn't bind hid-multitouch without the id, there
is a risk it won't bind the device even if you add the ID: there is
something wrong at the udev level IMO.

Cheers,
Benjamin

>  #endif
>  #if IS_ENABLED(CONFIG_HID_WIIMOTE)
>         { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO, USB_DEVICE_ID_NINTENDO_WIIMOTE) },
>
>
> --
>   René Rebe, ExactCODE GmbH, Lietzenburger Str. 42, DE-10789 Berlin
>   https://exactcode.com | https://t2sde.org | https://rene.rebe.de
Benjamin Tissoires Jan. 7, 2019, 9:06 a.m. UTC | #2
On Mon, Jan 7, 2019 at 9:19 AM René Rebe <rene@exactcode.com> wrote:
>
> Hi,
>
> thanks for your answer.
>
> On 07 Jan 2019, at 09:11, Benjamin Tissoires <benjamin.tissoires@redhat.com> wrote:
>
> Hi Rene,
>
> On Sun, Jan 6, 2019 at 5:10 PM Rene Rebe <rene@exactcode.com> wrote:
>
>
> Hi,
>
> I am testing a Dell XPS 15 all-in-one and noticed the I2C connected
> touchpad had only very basic mouse function. I debugged around a bit
> and manually modprobing hid-multitouch appears to bind this to the
> hid-multitouch for grearly enhanced functionatliy. Now I could
>
>
> Hmm, if the module is compiled in and you are using udev, there should
> be no need to manually modprobe the driver.
> Which distribution are you using? and are you running the stock kernel
> for that distribution
>
>
> T2
>
> probably just add hid-multitouch to some init script, but I wanted to
> get it to auto-load liek for my Surface Typecover. I added the ID,
> Synaptics, 0x7A13 to the hid-quirks for a test, but this is not yet
>
>
> Is this ID for the Surface TypeCover or the XPS 15?
>
>
> XPS 15
>
> enough to auto-load. Before I continue adding the ID all over the
> place, including the hid-multitouch.c, could someone shortly comment
> about the best, intended place for this - there are so many IDs all
> over the place and it is not obvious where it is necessary and where
> not.
>
>
> Short answer nowhere :)
> udev should load it for you. At least if udev loads hid-generic, there
> is no reasons it doesn't load hid-multitouch.
>
>
> udev loads it on my Surface Pro Typecover, or other laptops, I guess the last was some ThinkPad.
> But not this Dell. I also heard back from a Ubuntu users that they gave up trying to configure the touchpad and send the device back, ..
>
>        { HID_USB_DEVICE(USB_VENDOR_ID_TOPMAX, USB_DEVICE_ID_TOPMAX_COBRAPAD), HID_QUIRK_BADPAD },
>
>        { HID_USB_DEVICE(USB_VENDOR_ID_TOUCHPACK, USB_DEVICE_ID_TOUCHPACK_RTS), HID_QUIRK_MULTI_INPUT },
>        { HID_USB_DEVICE(USB_VENDOR_ID_TPV, USB_DEVICE_ID_TPV_OPTICAL_TOUCHSCREEN_8882), HID_QUIRK_NOGET },
> @@ -507,6 +508,7 @@
> #endif
> #if IS_ENABLED(CONFIG_HID_MULTITOUCH)
>        { HID_USB_DEVICE(USB_VENDOR_ID_LG, USB_DEVICE_ID_LG_MELFAS_MT) },
> +       { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, 0x7A13) },
>
>
> You are just preventing hid-generic you bind on your device, which
> might be worse than what you want.
> If hid-multitouch is not loaded, then you don't even have basic mouse
> capabilities.
>
> So, if for a very unfortunate events udev can't load the device (which
> I strongly doubt given than modprobing the driver works), the only
> place that would have an effect is adding the ID in hid-multitouch.c.
>
> But again, if udev doesn't bind hid-multitouch without the id, there
> is a risk it won't bind the device even if you add the ID: there is
> something wrong at the udev level IMO.
>
>
> Well hid-generic is loaded and it gives a rudimentary pointer, but not hid-mutitouch.

So when you added the ID in the hid_have_special_driver[] list,
hid-generic was still loaded?

Can you do a hid-recording of your touchpad with hid-recorder found in
https://gitlab.freedesktop.org/libevdev/hid-tools [1]?

This way I'll be able to see and replay the issue locally.

Cheers,
Benjamin

[1] there is a C version at
https://gitlab.freedesktop.org/bentiss/hid-replay/ but the python one
also parses the input in a human readable format.

> However, hid-multitouch is loaded for other laptops when I boot them from the same external installed SSD.
>
> René
>
> --
>  ExactCODE GmbH, Lietzenburger Str. 42, DE-10789 Berlin
>  DE Legal: Amtsgericht Berlin (Charlottenburg) HRB 105123B, Tax-ID#: DE251602478
>  Managing Director: René Rebe
>  http://exactcode.com | http://exactscan.com | http://ocrkit.com | http://t2-project.org | http://rene.rebe.de
>
Rene Rebe Jan. 7, 2019, 9:41 a.m. UTC | #3
Hi,

On 07 Jan 2019, at 10:06, Benjamin Tissoires <benjamin.tissoires@redhat.com> wrote:
>> 
>> Well hid-generic is loaded and it gives a rudimentary pointer, but not hid-mutitouch.
> 
> So when you added the ID in the hid_have_special_driver[] list,
> hid-generic was still loaded?
> 
> Can you do a hid-recording of your touchpad with hid-recorder found in
> https://gitlab.freedesktop.org/libevdev/hid-tools [1]?
> 
> This way I'll be able to see and replay the issue locally.
> 
> Cheers,
> Benjamin
> 
> [1] there is a C version at
> https://gitlab.freedesktop.org/bentiss/hid-replay/ but the python one
> also parses the input in a human readable format.

How early do you need this, I guess from the initrd?

	René
Benjamin Tissoires Jan. 7, 2019, 9:50 a.m. UTC | #4
On Mon, Jan 7, 2019 at 10:41 AM René Rebe <rene@exactcode.com> wrote:
>
> Hi,
>
> On 07 Jan 2019, at 10:06, Benjamin Tissoires <benjamin.tissoires@redhat.com> wrote:
> >>
> >> Well hid-generic is loaded and it gives a rudimentary pointer, but not hid-mutitouch.
> >
> > So when you added the ID in the hid_have_special_driver[] list,
> > hid-generic was still loaded?
> >
> > Can you do a hid-recording of your touchpad with hid-recorder found in
> > https://gitlab.freedesktop.org/libevdev/hid-tools [1]?
> >
> > This way I'll be able to see and replay the issue locally.
> >
> > Cheers,
> > Benjamin
> >
> > [1] there is a C version at
> > https://gitlab.freedesktop.org/bentiss/hid-replay/ but the python one
> > also parses the input in a human readable format.
>
> How early do you need this, I guess from the initrd?
>

As long as the device is presented to the user space, you are fine. So
log in normally and run hid-recorder as root.
However, the device needs to be bound to hid-generic or
hid-multitouch. If bound with hid-generic, you should see mouse
events, and if with hid-multitouch, you should see multitouch events
:)

Cheers,
Benjamin
Rene Rebe Jan. 7, 2019, 1:48 p.m. UTC | #5
Hi,

From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Subject: Re: [RFC] Dell XPS 15 multitouch touchpad
Date: Mon, 7 Jan 2019 10:50:43 +0100

> On Mon, Jan 7, 2019 at 10:41 AM René Rebe <rene@exactcode.com> wrote:
> >
> > Hi,
> >
> > On 07 Jan 2019, at 10:06, Benjamin Tissoires <benjamin.tissoires@redhat.com> wrote:
> > >>
> > >> Well hid-generic is loaded and it gives a rudimentary pointer, but not hid-mutitouch.
> > >
> > > So when you added the ID in the hid_have_special_driver[] list,
> > > hid-generic was still loaded?
> > >
> > > Can you do a hid-recording of your touchpad with hid-recorder found in
> > > https://gitlab.freedesktop.org/libevdev/hid-tools [1]?
> > >
> > > This way I'll be able to see and replay the issue locally.
> > >
> > > Cheers,
> > > Benjamin
> > >
> > > [1] there is a C version at
> > > https://gitlab.freedesktop.org/bentiss/hid-replay/ but the python one
> > > also parses the input in a human readable format.
> >
> > How early do you need this, I guess from the initrd?
> >
> 
> As long as the device is presented to the user space, you are fine. So
> log in normally and run hid-recorder as root.
> However, the device needs to be bound to hid-generic or
> hid-multitouch. If bound with hid-generic, you should see mouse
> events, and if with hid-multitouch, you should see multitouch events
> :)

ok, had to rebuild my kernel with HID_RAW, also double check that with
the vanilla kernel config does not load hid-multitouch Here is a short record:

D: 0
R: 665 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 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 cc 04 75 10 55 0e 65 11 09 30 35 00 46 00 04 95 01 81 02 46 06 03 26 a0 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 cc 04 75 10 55 0e 65 11 09 30 35 00 46 00 04 95 01 81 02 46 06 03 26 a0 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 cc 04 75 10 55 0e 65 11 09 30 35 00 46 00 04 95 01 81 02 46 06 03 26 a0 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 cc 04 75 10 55 0e 65 11 09 30 35 00 46 00 04 95 01 81 02 46 06 03 26 a0 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 cc 04 75 10 55 0e 65 11 09 30 35 00 46 00 04 95 01 81 02 46 06 03 26 a0 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 b1 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 39 81 02 85 0c 09 05 15 00 26 ff 00 75 08 95 39 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
N: DELL080D:00 06CB:7A13
P: i2c-DELL080D:00
I: 18 06cb 7a13
D: 0
E: 0.000000 4 02 00 00 01
E: 0.007227 4 02 00 02 02
E: 0.014587 4 02 00 02 02
E: 0.021842 4 02 00 02 03
E: 0.029085 4 02 00 04 03
E: 0.036390 4 02 00 06 03
E: 0.043669 4 02 00 06 02
E: 0.050984 4 02 00 07 01
E: 0.058250 4 02 00 08 00
E: 0.065556 4 02 00 07 fe
E: 0.072816 4 02 00 08 fd
E: 0.080104 4 02 00 09 fc
E: 0.087380 4 02 00 07 fb
E: 0.094678 4 02 00 07 fa
E: 0.101902 4 02 00 07 f8
E: 0.109224 4 02 00 06 f8
E: 0.116634 4 02 00 07 f1
E: 0.123865 4 02 00 05 f2
E: 0.131007 4 02 00 03 f2
E: 0.138349 4 02 00 03 ef
E: 0.145568 4 02 00 01 f5
E: 0.153001 4 02 00 00 f5
E: 0.160302 4 02 00 00 f3
E: 0.167593 4 02 00 00 f6
E: 0.174875 4 02 00 fe f7
E: 0.182085 4 02 00 fb f6
E: 0.189434 4 02 00 fb f5
E: 0.196649 4 02 00 fa f7
E: 0.204050 4 02 00 f8 f8
E: 0.211276 4 02 00 f7 f8
E: 0.218439 4 02 00 f5 f8
E: 0.225897 4 02 00 f5 f8
E: 0.233040 4 02 00 f4 fa
E: 0.240371 4 02 00 f5 fc
E: 0.247383 4 02 00 f4 fd
E: 0.254870 4 02 00 f4 ff
E: 0.262161 4 02 00 f3 00
E: 0.269533 4 02 00 f3 02
E: 0.276865 4 02 00 f4 04
E: 0.284148 4 02 00 f3 05
E: 0.291411 4 02 00 f5 05
E: 0.298689 4 02 00 f5 06
E: 0.305986 4 02 00 f3 07
E: 0.313281 4 02 00 f6 09
E: 0.320611 4 02 00 f6 09
E: 0.327832 4 02 00 f6 09
E: 0.335062 4 02 00 f7 0a
E: 0.342377 4 02 00 f8 0a
E: 0.349643 4 02 00 f9 0a
E: 0.357064 4 02 00 fa 09
E: 0.364312 4 02 00 fb 0a
E: 0.371587 4 02 00 fc 0a
E: 0.378868 4 02 00 fc 09
E: 0.386049 4 02 00 fe 07
E: 0.393351 4 02 00 fd 08
E: 0.400717 4 02 00 fe 09
E: 0.407989 4 02 00 ff 08
E: 0.415241 4 02 00 00 07
E: 0.422477 4 02 00 00 05
E: 0.429880 4 02 00 00 05
E: 0.437263 4 02 00 00 04
E: 0.444375 4 02 00 01 04
E: 0.451647 4 02 00 02 04
E: 0.458958 4 02 00 05 04
E: 0.466347 4 02 00 07 04
E: 0.473559 4 02 00 08 03
E: 0.480670 4 02 00 0b 01
E: 0.488170 4 02 00 0e 00
E: 0.495399 4 02 00 0f fe
E: 0.502719 4 02 00 10 fd
E: 0.509839 4 02 00 11 fd
E: 0.517207 4 02 00 12 fc
E: 0.524529 4 02 00 13 fd
E: 0.531763 4 02 00 13 fd
E: 0.539075 4 02 00 15 fb
E: 0.546406 4 02 00 14 fc
E: 0.553763 4 02 00 14 fd
E: 0.560966 4 02 00 13 fe
E: 0.568206 4 02 00 13 fe
E: 0.575451 4 02 00 13 ff
E: 0.582761 4 02 00 11 00
E: 0.590066 4 02 00 11 00
E: 0.597206 4 02 00 0f 02
E: 0.604245 4 02 00 0f 02
E: 0.611539 4 02 00 0e 01
E: 0.618834 4 02 00 0d 01
E: 0.626154 4 02 00 0d 01
E: 0.633620 4 02 00 0a 01
E: 0.641006 4 02 00 08 00
E: 0.648287 4 02 00 07 01
E: 0.655515 4 02 00 06 00
E: 0.662910 4 02 00 05 01
E: 0.670149 4 02 00 03 00
E: 0.677435 4 02 00 02 00
E: 0.684694 4 02 00 02 01
E: 0.692146 4 02 00 01 00
E: 0.699261 4 02 00 02 00
E: 0.706486 4 02 00 01 00
E: 0.713684 4 02 00 01 01
E: 0.735423 4 02 00 00 01
E: 0.742946 4 02 00 ff 00
E: 0.750203 4 02 00 fc 01
E: 0.757554 4 02 00 f8 03
E: 0.764859 4 02 00 f6 03
E: 0.772115 4 02 00 f4 03
E: 0.779400 4 02 00 f3 02
E: 0.786752 4 02 00 f2 01
E: 0.793860 4 02 00 f0 01
E: 0.801252 4 02 00 ee 01
E: 0.808815 4 02 00 ee 00
E: 0.815926 4 02 00 ec 00
E: 0.823040 4 02 00 eb 00
E: 0.830492 4 02 00 eb 00
E: 0.837706 4 02 00 ec 00
E: 0.844865 4 02 00 ef ff
E: 0.852204 4 02 00 f2 ff
E: 0.859604 4 02 00 f3 ff
E: 0.866714 4 02 00 f6 ff
E: 0.874044 4 02 00 f7 fe
E: 0.881463 4 02 00 f7 ff
E: 0.888561 4 02 00 fa ff
E: 0.896038 4 02 00 fc ff
E: 0.903300 4 02 00 fd 00
E: 0.910632 4 02 00 ff 00
E: 0.917818 4 02 00 ff 00
E: 0.925498 4 02 00 ff 00
E: 0.932452 4 02 00 ff 00
E: 0.946949 4 02 00 02 00
E: 0.954197 4 02 00 04 fe
E: 0.961539 4 02 00 08 fe
E: 0.968900 4 02 00 0b fd
E: 0.976075 4 02 00 0d fd
E: 0.983254 4 02 00 11 fd
E: 0.990547 4 02 00 0f fe
E: 0.997943 4 02 00 12 fd
E: 1.005179 4 02 00 11 fe
E: 1.012483 4 02 00 12 fe
E: 1.019790 4 02 00 11 ff
E: 1.027036 4 02 00 10 00
E: 1.034308 4 02 00 0d 00
E: 1.041627 4 02 00 0d 00
E: 1.048819 4 02 00 0c 01
E: 1.056118 4 02 00 0c 01
E: 1.063406 4 02 00 0a 01
E: 1.070739 4 02 00 09 01
E: 1.077991 4 02 00 08 01
E: 1.085144 4 02 00 06 01
E: 1.092196 4 02 00 06 01
E: 1.099840 4 02 00 03 00
E: 1.107107 4 02 00 03 01
E: 1.114255 4 02 00 02 00
E: 1.121662 4 02 00 02 00
E: 1.128796 4 02 00 01 00
E: 1.136312 4 02 00 01 00
E: 1.143485 4 02 00 01 00
E: 1.158030 4 02 00 01 00
Benjamin Tissoires Jan. 7, 2019, 4:26 p.m. UTC | #6
On Mon, Jan 7, 2019 at 1:48 PM Rene Rebe <rene@exactcode.com> wrote:
>
> Hi,
>
> From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
> Subject: Re: [RFC] Dell XPS 15 multitouch touchpad
> Date: Mon, 7 Jan 2019 10:50:43 +0100
>
> > On Mon, Jan 7, 2019 at 10:41 AM René Rebe <rene@exactcode.com> wrote:
> > >
> > > Hi,
> > >
> > > On 07 Jan 2019, at 10:06, Benjamin Tissoires <benjamin.tissoires@redhat.com> wrote:
> > > >>
> > > >> Well hid-generic is loaded and it gives a rudimentary pointer, but not hid-mutitouch.
> > > >
> > > > So when you added the ID in the hid_have_special_driver[] list,
> > > > hid-generic was still loaded?
> > > >
> > > > Can you do a hid-recording of your touchpad with hid-recorder found in
> > > > https://gitlab.freedesktop.org/libevdev/hid-tools [1]?
> > > >
> > > > This way I'll be able to see and replay the issue locally.
> > > >
> > > > Cheers,
> > > > Benjamin
> > > >
> > > > [1] there is a C version at
> > > > https://gitlab.freedesktop.org/bentiss/hid-replay/ but the python one
> > > > also parses the input in a human readable format.
> > >
> > > How early do you need this, I guess from the initrd?
> > >
> >
> > As long as the device is presented to the user space, you are fine. So
> > log in normally and run hid-recorder as root.
> > However, the device needs to be bound to hid-generic or
> > hid-multitouch. If bound with hid-generic, you should see mouse
> > events, and if with hid-multitouch, you should see multitouch events
> > :)
>
> ok, had to rebuild my kernel with HID_RAW, also double check that with
> the vanilla kernel config does not load hid-multitouch Here is a short record:
>
> D: 0
> R: 665 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 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 cc 04 75 10 55 0e 65 11 09 30 35 00 46 00 04 95 01 81 02 46 06 03 26 a0 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 cc 04 75 10 55 0e 65 11 09 30 35 00 46 00 04 95 01 81 02 46 06 03 26 a0 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 cc 04 75 10 55 0e 65 11 09 30 35 00 46 00 04 95 01 81 02 46 06 03 26 a0 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 cc 04 75 10 55 0e 65 11 09 30 35 00 46 00 04 
 95 01 81 02 46 06 03 26 a0 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 cc 04 75 10 55 0e 65 11 09 30 35 00 46 00 04 95 01 81 02 46 06 03 26 a0 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 b1 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 39 81 02 85 0c 09 05 15 00 26 ff 00 75 08 95 39 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
> N: DELL080D:00 06CB:7A13
> P: i2c-DELL080D:00
> I: 18 06cb 7a13

It turns out I have the exact same touchpad in an XPS-15 2-in1 on
loan. And hid-multitouch is properly loaded by udev. So I still
believe this is a udev issue.

The difference between the Surface TypeCover and this device is that
the XPS one is attached over I2C while the TypeCover is on USB.
And T2 doesn't seem to be using systemd which ships the latest version
of udev. So there must be something in the udev T2 is shipping that
doesn't like the I2C modalias.

Cheers,
Benjamin
Rene Rebe Jan. 7, 2019, 5:25 p.m. UTC | #7
On 07 Jan 2019, at 17:26, Benjamin Tissoires <benjamin.tissoires@redhat.com> wrote:

> On Mon, Jan 7, 2019 at 1:48 PM Rene Rebe <rene@exactcode.com> wrote:
>> 
>> Hi,
>> 
>> From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
>> Subject: Re: [RFC] Dell XPS 15 multitouch touchpad
>> Date: Mon, 7 Jan 2019 10:50:43 +0100
>> 
>>> On Mon, Jan 7, 2019 at 10:41 AM René Rebe <rene@exactcode.com> wrote:
>>>> 
>>>> Hi,
>>>> 
>>>> On 07 Jan 2019, at 10:06, Benjamin Tissoires <benjamin.tissoires@redhat.com> wrote:
>>>>>> 
>>>>>> Well hid-generic is loaded and it gives a rudimentary pointer, but not hid-mutitouch.
>>>>> 
>>>>> So when you added the ID in the hid_have_special_driver[] list,
>>>>> hid-generic was still loaded?
>>>>> 
>>>>> Can you do a hid-recording of your touchpad with hid-recorder found in
>>>>> https://gitlab.freedesktop.org/libevdev/hid-tools [1]?
>>>>> 
>>>>> This way I'll be able to see and replay the issue locally.
>>>>> 
>>>>> Cheers,
>>>>> Benjamin
>>>>> 
>>>>> [1] there is a C version at
>>>>> https://gitlab.freedesktop.org/bentiss/hid-replay/ but the python one
>>>>> also parses the input in a human readable format.
>>>> 
>>>> How early do you need this, I guess from the initrd?
>>>> 
>>> 
>>> As long as the device is presented to the user space, you are fine. So
>>> log in normally and run hid-recorder as root.
>>> However, the device needs to be bound to hid-generic or
>>> hid-multitouch. If bound with hid-generic, you should see mouse
>>> events, and if with hid-multitouch, you should see multitouch events
>>> :)
>> 
>> ok, had to rebuild my kernel with HID_RAW, also double check that with
>> the vanilla kernel config does not load hid-multitouch Here is a short record:
>> 
>> D: 0
>> R: 665 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 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 cc 04 75 10 55 0e 65 11 09 30 35 00 46 00 04 95 01 81 02 46 06 03 26 a0 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 cc 04 75 10 55 0e 65 11 09 30 35 00 46 00 04 95 01 81 02 46 06 03 26 a0 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 cc 04 75 10 55 0e 65 11 09 30 35 00 46 00 04 95 01 81 02 46 06 03 26 a0 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 cc 04 75 10 55 0e 65 11 09 30 35 00 46 00 04 95 01 81 02 46 06 03 26 a0 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 cc 04 75 10 55 0e 65 11 09 30 35 00 46 00 04 95 01 81 02 46 06 03 26 a0 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 b1 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 39 81 02 85 0c 09 05 15 00 26 ff 00 75 08 95 39 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
>> N: DELL080D:00 06CB:7A13
>> P: i2c-DELL080D:00
>> I: 18 06cb 7a13
> 
> It turns out I have the exact same touchpad in an XPS-15 2-in1 on
> loan. And hid-multitouch is properly loaded by udev. So I still
> believe this is a udev issue.

Yes, this is the 2-in-1. Well, not the greatest systemd fan, … so i take a look what I can do and find.

On some bug reports I found mentioning of the new hid-rmi driver for such? Synaptics touchpads.
Should that driver be used here instead?

> The difference between the Surface TypeCover and this device is that
> the XPS one is attached over I2C while the TypeCover is on USB.
> And T2 doesn't seem to be using systemd which ships the latest version
> of udev. So there must be something in the udev T2 is shipping that
> doesn't like the I2C modalias.

I thought I had some I2C TypeCover, but I’m not the office today to check.

Thanks!
Benjamin Tissoires Jan. 10, 2019, 2:39 p.m. UTC | #8
Hi,

On Mon, Jan 7, 2019 at 6:25 PM René Rebe <rene@exactcode.com> wrote:
>
>
> On 07 Jan 2019, at 17:26, Benjamin Tissoires <benjamin.tissoires@redhat.com> wrote:
>
> > On Mon, Jan 7, 2019 at 1:48 PM Rene Rebe <rene@exactcode.com> wrote:
> >>
> >> Hi,
> >>
> >> From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
> >> Subject: Re: [RFC] Dell XPS 15 multitouch touchpad
> >> Date: Mon, 7 Jan 2019 10:50:43 +0100
> >>
> >>> On Mon, Jan 7, 2019 at 10:41 AM René Rebe <rene@exactcode.com> wrote:
> >>>>
> >>>> Hi,
> >>>>
> >>>> On 07 Jan 2019, at 10:06, Benjamin Tissoires <benjamin.tissoires@redhat.com> wrote:
> >>>>>>
> >>>>>> Well hid-generic is loaded and it gives a rudimentary pointer, but not hid-mutitouch.
> >>>>>
> >>>>> So when you added the ID in the hid_have_special_driver[] list,
> >>>>> hid-generic was still loaded?
> >>>>>
> >>>>> Can you do a hid-recording of your touchpad with hid-recorder found in
> >>>>> https://gitlab.freedesktop.org/libevdev/hid-tools [1]?
> >>>>>
> >>>>> This way I'll be able to see and replay the issue locally.
> >>>>>
> >>>>> Cheers,
> >>>>> Benjamin
> >>>>>
> >>>>> [1] there is a C version at
> >>>>> https://gitlab.freedesktop.org/bentiss/hid-replay/ but the python one
> >>>>> also parses the input in a human readable format.
> >>>>
> >>>> How early do you need this, I guess from the initrd?
> >>>>
> >>>
> >>> As long as the device is presented to the user space, you are fine. So
> >>> log in normally and run hid-recorder as root.
> >>> However, the device needs to be bound to hid-generic or
> >>> hid-multitouch. If bound with hid-generic, you should see mouse
> >>> events, and if with hid-multitouch, you should see multitouch events
> >>> :)
> >>
> >> ok, had to rebuild my kernel with HID_RAW, also double check that with
> >> the vanilla kernel config does not load hid-multitouch Here is a short record:
> >>
> >> D: 0
> >> R: 665 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 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 cc 04 75 10 55 0e 65 11 09 30 35 00 46 00 04 95 01 81 02 46 06 03 26 a0 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 cc 04 75 10 55 0e 65 11 09 30 35 00 46 00 04 95 01 81 02 46 06 03 26 a0 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 cc 04 75 10 55 0e 65 11 09 30 35 00 46 00 04 95 01 81 02 46 06 03 26 a0 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 cc 04 75 10 55 0e 65 11 09 30 35 00 46 00 
 04 95 01 81 02 46 06 03 26 a0 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 cc 04 75 10 55 0e 65 11 09 30 35 00 46 00 04 95 01 81 02 46 06 03 26 a0 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 b1 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 39 81 02 85 0c 09 05 15 00 26 ff 00 75 08 95 39 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
> >> N: DELL080D:00 06CB:7A13
> >> P: i2c-DELL080D:00
> >> I: 18 06cb 7a13
> >
> > It turns out I have the exact same touchpad in an XPS-15 2-in1 on
> > loan. And hid-multitouch is properly loaded by udev. So I still
> > believe this is a udev issue.
>
> Yes, this is the 2-in-1. Well, not the greatest systemd fan, … so i take a look what I can do and find.
>
> On some bug reports I found mentioning of the new hid-rmi driver for such? Synaptics touchpads.
> Should that driver be used here instead?

No. hid-rmi will turn the device into the RMI4 mode if it is
available, but otherwise you will have the mouse emulation.
But in all cases, it is better to stick to the same behavior the
device is under Windows. And under Windows, those MS Precision
Touchpads are using the hid-multitouch layer, and are not switched to
RMI4.
So hid-multitouch it should be.

>
> > The difference between the Surface TypeCover and this device is that
> > the XPS one is attached over I2C while the TypeCover is on USB.
> > And T2 doesn't seem to be using systemd which ships the latest version
> > of udev. So there must be something in the udev T2 is shipping that
> > doesn't like the I2C modalias.
>
> I thought I had some I2C TypeCover, but I’m not the office today to check.

I am surprised the TypeCover could use I2C. But I might be wrong.

Cheers,
Benjamin

>
> Thanks!
>
> --
>  ExactCODE GmbH, Lietzenburger Str. 42, DE-10789 Berlin
>  http://exactcode.com | http://exactscan.com | http://ocrkit.com | http://t2-project.org | http://rene.rebe.de
>
Rene Rebe Jan. 10, 2019, 3:53 p.m. UTC | #9
> > > The difference between the Surface TypeCover and this device is that
> > > the XPS one is attached over I2C while the TypeCover is on USB.
> > > And T2 doesn't seem to be using systemd which ships the latest version
> > > of udev. So there must be something in the udev T2 is shipping that
> > > doesn't like the I2C modalias.
> >
> > I thought I had some I2C TypeCover, but I’m not the office today to check.
> 
> I am surprised the TypeCover could use I2C. But I might be wrong.
>

Ok, looks like on the Surface Pro 3 w/ TypeCover "5" or so it indeed is
USB, only NTRIG touchscreen is i2c:

root@nouveau:/sys/class/input# l | grep -i i2c
lrwxrwxrwx  1 root root 0 Jan 10 16:46 event16 -> ../../devices/pci0000:00/INT33C3:00/i2c-2/i2c-NTRG0001:01/0018:1B96:1B05.0008/input/input32/event16
lrwxrwxrwx  1 root root 0 Jan 10 16:46 event17 -> ../../devices/pci0000:00/INT33C3:00/i2c-2/i2c-NTRG0001:01/0018:1B96:1B05.0008/input/input33/event17
lrwxrwxrwx  1 root root 0 Jan 10 16:46 input32 -> ../../devices/pci0000:00/INT33C3:00/i2c-2/i2c-NTRG0001:01/0018:1B96:1B05.0008/input/input32
lrwxrwxrwx  1 root root 0 Jan 10 16:46 input33 -> ../../devices/pci0000:00/INT33C3:00/i2c-2/i2c-NTRG0001:01/0018:1B96:1B05.0008/input/input33
lrwxrwxrwx  1 root root 0 Jan 10 16:46 mouse2 -> ../../devices/pci0000:00/INT33C3:00/i2c-2/i2c-NTRG0001:01/0018:1B96:1B05.0008/input/input32/mouse2
lrwxrwxrwx  1 root root 0 Jan 10 16:46 mouse3 -> ../../devices/pci0000:00/INT33C3:00/i2c-2/i2c-NTRG0001:01/0018:1B96:1B05.0008/input/input33/mouse3

I was sure I remebered some typecover did not work out of the box and
required i2c, either yet another, older one, or maybe I mixed that
with another laptop ;-)

I take a look into the udev stuff another day, maybe I can peel it ouf
of systemd like Gentoo apparently does in some optional, alternative
package, too, ...

  René
diff mbox series

Patch

--- drivers/hid/hid-quirks.c.vanilla	2019-01-06 17:35:58.304007689 +0100
+++ drivers/hid/hid-quirks.c	2019-01-06 17:47:30.776010444 +0100
@@ -157,6 +157,7 @@ 
 	{ HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_LTS2), HID_QUIRK_NO_INIT_REPORTS },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_QUAD_HD), HID_QUIRK_NO_INIT_REPORTS },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_TP_V103), HID_QUIRK_NO_INIT_REPORTS },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, 0x7A13), HID_QUIRK_MULTI_INPUT },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_TOPMAX, USB_DEVICE_ID_TOPMAX_COBRAPAD), HID_QUIRK_BADPAD },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_TOUCHPACK, USB_DEVICE_ID_TOUCHPACK_RTS), HID_QUIRK_MULTI_INPUT },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_TPV, USB_DEVICE_ID_TPV_OPTICAL_TOUCHSCREEN_8882), HID_QUIRK_NOGET },
@@ -507,6 +508,7 @@ 
 #endif
 #if IS_ENABLED(CONFIG_HID_MULTITOUCH)
 	{ HID_USB_DEVICE(USB_VENDOR_ID_LG, USB_DEVICE_ID_LG_MELFAS_MT) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, 0x7A13) },
 #endif
 #if IS_ENABLED(CONFIG_HID_WIIMOTE)
 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO, USB_DEVICE_ID_NINTENDO_WIIMOTE) },