Bug 903748 - Lenovo T440s Clickpad Dimensions Quirks missing in Synaptics Driver
Summary: Lenovo T440s Clickpad Dimensions Quirks missing in Synaptics Driver
Status: RESOLVED FIXED
Alias: None
Product: openSUSE Distribution
Classification: openSUSE
Component: Kernel (show other bugs)
Version: 13.2
Hardware: Other Other
: P5 - None : Normal (vote)
Target Milestone: ---
Assignee: Takashi Iwai
QA Contact: E-mail List
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-11-03 22:32 UTC by Joschi Brauchle
Modified: 2018-07-03 20:52 UTC (History)
2 users (show)

See Also:
Found By: ---
Services Priority:
Business Priority:
Blocker: ---
Marketing QA Status: ---
IT Deployment: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Joschi Brauchle 2014-11-03 22:32:08 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.
Comment 1 Takashi Iwai 2014-11-05 15:13:16 UTC
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.
Comment 2 Joschi Brauchle 2014-11-06 07:08:37 UTC
(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?
Comment 3 Takashi Iwai 2014-11-06 07:32:09 UTC
(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",
Comment 4 Joschi Brauchle 2014-11-06 15:38:37 UTC
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",
Comment 5 Takashi Iwai 2014-11-06 15:49:06 UTC
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.
Comment 6 Takashi Iwai 2014-11-07 09:50:27 UTC
The upstream accepted the patch, so I backported it to openSUSE-13.2, stable and master branches.  Let's close.
Comment 7 Swamp Workflow Management 2014-12-21 12:14:55 UTC
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