Bugzilla – Bug 903748
Lenovo T440s Clickpad Dimensions Quirks missing in Synaptics Driver
Last modified: 2018-07-03 20:52:01 UTC
For Lenovo Clickpads of the latest T*4* notebook series, the clickpads report wrong Y-dimension values, which result in the relative percentage configuration in /etc/X11/xorg.conf.d/50-synaptics.conf to work incorrectly. For example, /etc/X11/xorg.conf.d/50-synaptics.conf ---------------------------- ... # This option enables the bottom right corner to be a right button on clickpads # and the right and middle top areas to be right / middle buttons on clickpads # with a top button area. # This option is only interpreted by clickpads. Section "InputClass" Identifier "Default clickpad buttons" MatchDriver "synaptics" Option "SoftButtonAreas" "50% 0 82% 0 0 0 0 0" Option "SecondarySoftButtonAreas" "58% 0 0 15% 42% 58% 0 15%" EndSection ---------------------------- causes the Clickpad to have Softbuttons at about y > 50% instead of 82%. On my T440s, the clickpad dimensions SHOULD be: 1024, 5112, 2024, 4832 But /var/log/Xorg.0.log reports these values: ---------------------------- [ 38.878] (II) Using input driver 'synaptics' for 'SynPS/2 Synaptics TouchPad' [ 38.878] (**) SynPS/2 Synaptics TouchPad: always reports core events [ 38.878] (**) Option "Device" "/dev/input/event1" [ 38.913] (II) synaptics: SynPS/2 Synaptics TouchPad: found clickpad property [ 38.913] (--) synaptics: SynPS/2 Synaptics TouchPad: x-axis range 1472 - 5112 (res 42) [ 38.913] (--) synaptics: SynPS/2 Synaptics TouchPad: y-axis range 1408 - 3834 (res 42) [ 38.913] (--) synaptics: SynPS/2 Synaptics TouchPad: pressure range 0 - 255 [ 38.913] (--) synaptics: SynPS/2 Synaptics TouchPad: finger width range 0 - 15 [ 38.913] (--) synaptics: SynPS/2 Synaptics TouchPad: buttons: left double triple [ 38.913] (--) synaptics: SynPS/2 Synaptics TouchPad: Vendor 0x2 Product 0x7 ---------------------------- To me it looks like the kernel driver is missing the corresponding quirks for the T440s, whose clickpad id is LEN0039, see: ---------------------------- # cat /sys/devices/platform/i8042/serio1/firmware_id PNP: LEN0039 PNP0f13 ---------------------------- This ID is missing in the 3.16.6 /driveres/input/mouse/synaptics.c ---------------------------- static const char * const topbuttonpad_pnp_ids[] = { ... } ---------------------------- array, hence no quirks will be applied.
It's still missing in the upstream, so it should be reported to the upstream at first. Could you confirmed that just adding thew new pnp id "LEN0039" really fixes the problem? Then I'll submit the fix patch to the upstream, eventually backports it to SUSE tree.
(In reply to Takashi Iwai from comment #1) > It's still missing in the upstream, so it should be reported to the upstream > at first. I reported it to here: http://lists.x.org/archives/xorg/2014-November/056933.html Is this the correct location? > Could you confirmed that just adding thew new pnp id "LEN0039" really fixes > the problem? Then I'll submit the fix patch to the upstream, eventually > backports it to SUSE tree. I made the change on my system after installing kernel-source. But I cant seem to get the change working, as I am unsure which module is actually handling the touchpad. Could you point me to directions on how to compile the modified kernel-module (which one will it be actually?) and how to install it?
(In reply to Joschi Brauchle from comment #2) > (In reply to Takashi Iwai from comment #1) > > It's still missing in the upstream, so it should be reported to the upstream > > at first. > > I reported it to here: > http://lists.x.org/archives/xorg/2014-November/056933.html > Is this the correct location? Not the best... It should be linux-input ML or such. But better to wait until you really test and confirm the fix. > > Could you confirmed that just adding thew new pnp id "LEN0039" really fixes > > the problem? Then I'll submit the fix patch to the upstream, eventually > > backports it to SUSE tree. > > I made the change on my system after installing kernel-source. But I cant > seem to get the change working, as I am unsure which module is actually > handling the touchpad. > > Could you point me to directions on how to compile the modified > kernel-module (which one will it be actually?) and how to install it? The synaptics (mouse) driver is built-in kernel, no module. You have to build the kernel itself (then likely all running modules too). Maybe it'd be safer to modify CONFIG_LOCALVERSION in .config file to a different suffix so that your own kernel won't conflict with the existing kernels. The place to patch is what you guessed: drivers/input/mouse/synaptics.c. Just add "LEN0039" there, e.g. --- a/drivers/input/mouse/synaptics.c +++ b/drivers/input/mouse/synaptics.c @@ -163,6 +163,7 @@ static const char * const topbuttonpad_pnp_ids[] = { "LEN0036", /* T440 */ "LEN0037", "LEN0038", + "LEN0039", "LEN0041", "LEN0042", /* Yoga */ "LEN0045",
I can confirm that the following *two* changes make the touchpad work correctly in a Lenovo T440s: --- synaptics.c.old 2014-10-20 15:47:22.000000000 +0200 +++ synaptics.c 2014-11-06 16:36:08.644446947 +0100 @@ -133,7 +133,7 @@ }, { (const char * const []){"LEN0034", "LEN0036", "LEN2002", - "LEN2004", NULL}, + "LEN2004", "LEN0039", NULL}, 1024, 5112, 2024, 4832 }, { @@ -160,6 +160,7 @@ "LEN0036", /* T440 */ "LEN0037", "LEN0038", + "LEN0039", /* T440s */ "LEN0041", "LEN0042", /* Yoga */ "LEN0045",
Great! I submitted the patch to linux-input ML now. Once when accepted, I'll backport the patch to SUSE kernel branches. Thanks for quick testing.
The upstream accepted the patch, so I backported it to openSUSE-13.2, stable and master branches. Let's close.
openSUSE-SU-2014:1678-1: An update that solves 8 vulnerabilities and has 22 fixes is now available. Category: security (important) Bug References: 665315,856659,897112,897736,900786,902346,902349,902351,902632,902633,902728,903748,903986,904013,904097,904289,904417,904539,904717,904932,905068,905100,905329,905739,906914,907818,908163,908253,909077,910251 CVE References: CVE-2014-3673,CVE-2014-3687,CVE-2014-3688,CVE-2014-7826,CVE-2014-7841,CVE-2014-8133,CVE-2014-9090,CVE-2014-9322 Sources used: openSUSE 13.2 (src): kernel-docs-3.16.7-7.2, kernel-obs-build-3.16.7-7.3, kernel-obs-qa-3.16.7-7.2, kernel-obs-qa-xen-3.16.7-7.2, kernel-source-3.16.7-7.1, kernel-syms-3.16.7-7.1