Bug 89469

Summary: hwdb: Please add Lenovo Thinkpad S440 PNPID information to touchpad.hwdb
Product: Wayland Reporter: blash
Component: libinputAssignee: Peter Hutterer <peter.hutterer>
Status: RESOLVED FIXED QA Contact:
Severity: normal    
Priority: medium CC: blash, peter.hutterer
Version: unspecified   
Hardware: x86-64 (AMD64)   
OS: Linux (All)   
See Also: https://bugs.freedesktop.org/show_bug.cgi?id=89411
Whiteboard:
i915 platform: i915 features:

Description blash 2015-03-06 15:20:18 UTC
blash@S440 ~ % cat /sys/devices/platform/i8042/serio1/firmware_id
PNP: LEN2000 PNP0f13

# Lenovo S440
touchpad:pnpid:*LEN2000*:
Comment 1 felice.pantaleo 2015-03-06 15:24:18 UTC
Hi,

Lenovo S440 does not seem to have physical touchpad buttons, but only the clickpad.
Comment 2 blash 2015-03-06 20:36:14 UTC
Hi,

that's absolutely true.

According to [1] property INPUT_PROP_TOPBUTTONPAD should be set by kernel,
but top buttons are still not activated by default.
Question is, how to activate those by default?

I thought touchpad.hwdb might be a proper place for device depended configuration. If that's wrong, please excuse my ignorance.

Regards

[1] http://wayland.freedesktop.org/libinput/doc/latest/t440_support.html
Comment 3 Peter Hutterer 2015-03-06 22:01:28 UTC
run evemu-describe against the device, that should show if the property is set by the kernel. If not, it needs a kernel patch. Looking at https://github.com/torvalds/linux/blob/master/drivers/input/mouse/synaptics.c#L157 however shows that the LEN2000 pnpid is already in there.

(In reply to blash from comment #2)
> According to [1] property INPUT_PROP_TOPBUTTONPAD should be set by kernel,
> but top buttons are still not activated by default.
> Question is, how to activate those by default?

what input stack is this? synaptics, libinput? If the kernel property is set but the buttons don't work, please reassign to either of those.
Comment 4 blash 2015-03-07 14:18:31 UTC
Property TOPBUTTONPAD is properly is set by 3.19.0-1-ARCH :

blash@S440 ~ % sudo evemu-describe
Available devices:
...
/dev/input/event14:	SynPS/2 Synaptics TouchPad
...
Select the device event number [0-17]: 14  
# EVEMU 1.2
# Input device name: "SynPS/2 Synaptics TouchPad"
# Input device ID: bus 0x11 vendor 0x02 product 0x07 version 0x1b1
...
# Properties:
#   Property  type 0 (INPUT_PROP_POINTER)
#   Property  type 2 (INPUT_PROP_BUTTONPAD)
#   Property  type 4 (INPUT_PROP_TOPBUTTONPAD)
...

I'm using libinput 0.11.0-1 with xf86-input-libinput 0.8.0-1.

blash@S440 ~ % xinput list-props 13
Device 'SynPS/2 Synaptics TouchPad':
	Device Enabled (143):	1
	Coordinate Transformation Matrix (145):	1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
	libinput Tapping Enabled (281):	0
	libinput Accel Speed (282):	0.000000
	libinput Natural Scrolling Enabled (283):	0
	libinput Send Events Modes Available (264):	1, 1
	libinput Send Events Mode Enabled (265):	0, 0
	libinput Left Handed Enabled (284):	0
	libinput Scroll Methods Available (285):	1, 0, 0
	libinput Scroll Method Enabled (286):	1, 0, 0
	Device Node (266):	"/dev/input/event14"
	Device Product ID (267):	2, 7
Comment 5 blash 2015-03-07 15:22:58 UTC
Same behavior with xf86-input-synaptics 1.8.1-1 :

blash@S440 ~ % xinput list-props 14
Device 'SynPS/2 Synaptics TouchPad':
	Device Enabled (143):	1
	Coordinate Transformation Matrix (145):	1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
	Device Accel Profile (278):	1
	Device Accel Constant Deceleration (279):	2.500000
	Device Accel Adaptive Deceleration (280):	1.000000
	Device Accel Velocity Scaling (281):	12.500000
	Synaptics Edges (307):	1726, 4858, 1577, 3665
	Synaptics Finger (308):	25, 30, 0
	Synaptics Tap Time (309):	180
	Synaptics Tap Move (310):	192
	Synaptics Tap Durations (311):	180, 180, 100
	Synaptics ClickPad (312):	1
	Synaptics Middle Button Timeout (313):	0
	Synaptics Two-Finger Pressure (314):	282
	Synaptics Two-Finger Width (315):	7
	Synaptics Scrolling Distance (316):	-87, -87
	Synaptics Edge Scrolling (317):	0, 0, 0
	Synaptics Two-Finger Scrolling (318):	1, 1
	Synaptics Move Speed (319):	1.000000, 1.750000, 0.045725, 0.000000
	Synaptics Off (320):	2
	Synaptics Locked Drags (321):	0
	Synaptics Locked Drags Timeout (322):	5000
	Synaptics Tap Action (323):	0, 0, 0, 0, 1, 3, 2
	Synaptics Click Action (324):	1, 3, 2
	Synaptics Circular Scrolling (325):	0
	Synaptics Circular Scrolling Distance (326):	0.100000
	Synaptics Circular Scrolling Trigger (327):	0
	Synaptics Circular Pad (328):	0
	Synaptics Palm Detection (329):	0
	Synaptics Palm Dimensions (330):	10, 200
	Synaptics Coasting Speed (331):	20.000000, 50.000000
	Synaptics Pressure Motion (332):	30, 160
	Synaptics Pressure Motion Factor (333):	1.000000, 1.000000
	Synaptics Grab Event Device (334):	0
	Synaptics Gestures (335):	1
	Synaptics Capabilities (336):	1, 0, 0, 1, 1, 1, 1
	Synaptics Pad Resolution (337):	42, 42
	Synaptics Area (338):	0, 0, 0, 0
	Synaptics Soft Button Areas (339):	3292, 0, 3397, 0, 0, 0, 0, 0
	Synaptics Secondary Soft Button Areas (340):	3583, 0, 0, 1771, 3000, 3583, 0, 1771
	Synaptics Noise Cancellation (341):	8, 8
	Device Product ID (265):	2, 7
	Device Node (266):	"/dev/input/event16"

Is there some additional property which I forgot to configure?
Comment 6 Peter Hutterer 2015-03-08 21:01:29 UTC
ok, so what exactly works and what doesn't work? kernel output looks correct, and the synaptics properties have top and bottom software buttons set. so both should work. Can you provide a detailed account of what you expect to work and how it's not working right now?

you cut off the evemu-describe output, so it's hard to judge if the coordinates are out of whack.
Comment 7 Peter Hutterer 2015-04-15 04:12:03 UTC
ping?
Comment 8 blash 2015-04-19 13:00:37 UTC
(In reply to Peter Hutterer from comment #6)
> ok, so what exactly works and what doesn't work? kernel output looks

clickpad itself is working well by default: the entire clickpad behaves like on large button. clicking with one, two and three fingers distinguish between left, right and middle button. No top or bottom buttons are defined/used at all.

That's all great as long as I'm using only the clickpad for every mouse input. :) 

> correct, and the synaptics properties have top and bottom software buttons
> set. so both should work. Can you provide a detailed account of what you
> expect to work and how it's not working right now?

Unfortunately the same clicking behavior occurs while I'm using the trackpoint: Single button and 1-3 finger for left, right middle click.
Operating the trackpoint and right or middle click with only one hand is not possible, I need to use the second hand for clicking.

In the case (active trackpoint) I would like to use clickpads top buttons. They should work like single mechanical buttons activated by a single finger (thumb). (e.g. pressed middle top button and trackpoint moving activates content scrolling.)

> 
> you cut off the evemu-describe output, so it's hard to judge if the
> coordinates are out of whack.

complete output:

blash@S440 ~ % sudo evemu-describe
Available devices:
/dev/input/event0:	Power Button
/dev/input/event1:	Lid Switch
/dev/input/event2:	Power Button
/dev/input/event3:	Video Bus
/dev/input/event4:	Video Bus
/dev/input/event5:	AT Translated Set 2 keyboard
/dev/input/event6:	PC Speaker
/dev/input/event7:	HDA Intel HDMI HDMI/DP,pcm=3
/dev/input/event8:	HDA Intel HDMI HDMI/DP,pcm=7
/dev/input/event9:	HDA Intel HDMI HDMI/DP,pcm=8
/dev/input/event10:	ThinkPad Extra Buttons
/dev/input/event11:	HDA Digital PCBeep
/dev/input/event12:	HDA Intel PCH Mic
/dev/input/event13:	HDA Intel PCH Front Headphone
/dev/input/event14:	SynPS/2 Synaptics TouchPad
/dev/input/event15:	TPPS/2 IBM TrackPoint
/dev/input/event16:	ELAN Touchscreen
/dev/input/event17:	Integrated Camera
Select the device event number [0-17]: 14
# EVEMU 1.2
# Input device name: "SynPS/2 Synaptics TouchPad"
# Input device ID: bus 0x11 vendor 0x02 product 0x07 version 0x1b1
# Supported events:
#   Event type 0 (EV_SYN)
#     Event code 0 (SYN_REPORT)
#     Event code 1 (SYN_CONFIG)
#     Event code 2 (SYN_MT_REPORT)
#     Event code 3 (SYN_DROPPED)
#     Event code 4 ((null))
#     Event code 5 ((null))
#     Event code 6 ((null))
#     Event code 7 ((null))
#     Event code 8 ((null))
#     Event code 9 ((null))
#     Event code 10 ((null))
#     Event code 11 ((null))
#     Event code 12 ((null))
#     Event code 13 ((null))
#     Event code 14 ((null))
#   Event type 1 (EV_KEY)
#     Event code 272 (BTN_LEFT)
#     Event code 325 (BTN_TOOL_FINGER)
#     Event code 328 (BTN_TOOL_QUINTTAP)
#     Event code 330 (BTN_TOUCH)
#     Event code 333 (BTN_TOOL_DOUBLETAP)
#     Event code 334 (BTN_TOOL_TRIPLETAP)
#     Event code 335 (BTN_TOOL_QUADTAP)
#   Event type 3 (EV_ABS)
#     Event code 0 (ABS_X)
#       Value   4531
#       Min     1024
#       Max     5112
#       Fuzz       0
#       Flat       0
#       Resolution 42
#     Event code 1 (ABS_Y)
#       Value   2021
#       Min     1024
#       Max     3834
#       Fuzz       0
#       Flat       0
#       Resolution 42
#     Event code 24 (ABS_PRESSURE)
#       Value      0
#       Min        0
#       Max      255
#       Fuzz       0
#       Flat       0
#       Resolution 0
#     Event code 28 (ABS_TOOL_WIDTH)
#       Value      0
#       Min        0
#       Max       15
#       Fuzz       0
#       Flat       0
#       Resolution 0
#     Event code 47 (ABS_MT_SLOT)
#       Value      0
#       Min        0
#       Max        1
#       Fuzz       0
#       Flat       0
#       Resolution 0
#     Event code 53 (ABS_MT_POSITION_X)
#       Value      0
#       Min     1024
#       Max     5112
#       Fuzz       8
#       Flat       0
#       Resolution 42
#     Event code 54 (ABS_MT_POSITION_Y)
#       Value      0
#       Min     1024
#       Max     3834
#       Fuzz       8
#       Flat       0
#       Resolution 42
#     Event code 57 (ABS_MT_TRACKING_ID)
#       Value      0
#       Min        0
#       Max    65535
#       Fuzz       0
#       Flat       0
#       Resolution 0
#     Event code 58 (ABS_MT_PRESSURE)
#       Value      0
#       Min        0
#       Max      255
#       Fuzz       0
#       Flat       0
#       Resolution 0
# Properties:
#   Property  type 0 (INPUT_PROP_POINTER)
#   Property  type 2 (INPUT_PROP_BUTTONPAD)
#   Property  type 4 (INPUT_PROP_TOPBUTTONPAD)
N: SynPS/2 Synaptics TouchPad
I: 0011 0002 0007 01b1
P: 15 00 00 00 00 00 00 00
B: 00 0b 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 01 00 00 00 00 00
B: 01 20 e5 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 02 00 00 00 00 00 00 00 00
B: 03 03 00 00 11 00 80 60 06
B: 04 00 00 00 00 00 00 00 00
B: 05 00 00 00 00 00 00 00 00
B: 11 00 00 00 00 00 00 00 00
B: 12 00 00 00 00 00 00 00 00
B: 14 00 00 00 00 00 00 00 00
B: 15 00 00 00 00 00 00 00 00
B: 15 00 00 00 00 00 00 00 00
A: 00 1024 5112 0 0 42
A: 01 1024 3834 0 0 42
A: 18 0 255 0 0 0
A: 1c 0 15 0 0 0
A: 2f 0 1 0 0 0
A: 35 1024 5112 8 0 42
A: 36 1024 3834 8 0 42
A: 39 0 65535 0 0 0
A: 3a 0 255 0 0 0
Comment 9 Peter Hutterer 2015-04-19 23:17:44 UTC
(In reply to blash from comment #8)
> > correct, and the synaptics properties have top and bottom software buttons
> > set. so both should work. Can you provide a detailed account of what you
> > expect to work and how it's not working right now?
> 
> Unfortunately the same clicking behavior occurs while I'm using the
> trackpoint: Single button and 1-3 finger for left, right middle click.
> Operating the trackpoint and right or middle click with only one hand is not
> possible, I need to use the second hand for clicking.
> 
> In the case (active trackpoint) I would like to use clickpads top buttons.
> They should work like single mechanical buttons activated by a single finger
> (thumb). (e.g. pressed middle top button and trackpoint moving activates
> content scrolling.)

I honestly don't know what's happening here. both synaptics and libinput should just support this without any further configuration out of the box. libinput has some palm detection so that certain touches will be ignored while you're using the trackpoint. but if both devices don't work then I don't know what's going on here.

I recommend getting libinput from git and running the ./tools/event-debug helper, you can easily gdb it to figure out where the events are disappearing to, or what configuration isn't happy. run it with --verbose, that gives you the software button state machine which may be enough to show what's going on here.
Comment 10 blash 2015-07-07 18:49:11 UTC
Since version 0.18 it is working fine.
Thanks! :)

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.