Bug 873721

Summary: two-finger scrolling not working on hp8470p
Product: Red Hat Enterprise Linux 6 Reporter: Tomas Pelka <tpelka>
Component: xorg-x11-drv-synapticsAssignee: Peter Hutterer <peter.hutterer>
Status: CLOSED CANTFIX QA Contact: Desktop QE <desktop-qa-list>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 6.4   
Target Milestone: rc   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: Known Issue
Doc Text:
Two-finger scrolling is default for devices that announce two-finger capability. However, on certain machines, although the touchpad announces two-finger capability, events generated by the device only contain a single finger position at a time and two-finger scrolling therefore does not work. To work around this problem, use edge scrolling instead.
Story Points: ---
Clone Of: Environment:
Last Closed: 2013-05-22 22:31:12 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---
Bug Depends On: 903081    
Bug Blocks: 960058    
Attachments:
Description Flags
xorg.log
none
evemu-describe
none
edge-horizontal
none
edge-vertical
none
two-horizontal
none
two-vertical
none
twofinger-vertical-event.log
none
tmview-twofinger-scroll video none

Description Tomas Pelka 2012-11-06 14:47:49 UTC
Description of problem:
two-finger scrolling not working on hp8470p

Version-Release number of selected component (if applicable):
kernel-2.6.32-338.el6.x86_64
xorg-x11-drv-synaptics-1.6.2-11.el6.x86_64
xorg-x11-server-Xorg-1.13.0-7.el6

How reproducible:
100%

Steps to Reproduce:
1. system-preferences-mouse
2. touchpad tab
3. check Two-finger scrolling 
  
Actual results:
not able to scroll with two fingers

Expected results:
should be able to scroll

Additional info:
xinput list-props 'SynPS/2 Synaptics TouchPad'
Device 'SynPS/2 Synaptics TouchPad':
	Device Enabled (136):	1
	Coordinate Transformation Matrix (138):	1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
	Device Accel Profile (261):	1
	Device Accel Constant Deceleration (262):	2.500000
	Device Accel Adaptive Deceleration (263):	1.000000
	Device Accel Velocity Scaling (264):	12.500000
	Synaptics Edges (282):	1769, 5431, 1653, 4671
	Synaptics Finger (283):	25, 30, 256
	Synaptics Tap Time (284):	180
	Synaptics Tap Move (285):	242
	Synaptics Tap Durations (286):	180, 180, 100
	Synaptics ClickPad (287):	0
	Synaptics Tap FastTap (288):	0
	Synaptics Middle Button Timeout (289):	75
	Synaptics Two-Finger Pressure (290):	282
	Synaptics Two-Finger Width (291):	7
	Synaptics Scrolling Distance (292):	110, 110
	Synaptics Edge Scrolling (293):	1, 1, 0
	Synaptics Two-Finger Scrolling (294):	0, 0
	Synaptics Move Speed (295):	1.000000, 1.750000, 0.036265, 40.000000
	Synaptics Edge Motion Pressure (296):	30, 160
	Synaptics Edge Motion Speed (297):	1, 441
	Synaptics Edge Motion Always (298):	0
	Synaptics Off (299):	1
	Synaptics Locked Drags (300):	0
	Synaptics Locked Drags Timeout (301):	5000
	Synaptics Tap Action (302):	0, 0, 0, 0, 1, 3, 2
	Synaptics Click Action (303):	1, 1, 1
	Synaptics Circular Scrolling (304):	0
	Synaptics Circular Scrolling Distance (305):	0.100000
	Synaptics Circular Scrolling Trigger (306):	0
	Synaptics Circular Pad (307):	0
	Synaptics Palm Detection (308):	0
	Synaptics Palm Dimensions (309):	10, 200
	Synaptics Coasting Speed (310):	0.000000, 50.000000
	Synaptics Pressure Motion (311):	30, 160
	Synaptics Pressure Motion Factor (312):	1.000000, 1.000000
	Synaptics Grab Event Device (313):	1
	Synaptics Gestures (314):	1
	Synaptics Capabilities (315):	1, 1, 1, 1, 1, 1, 1
	Synaptics Pad Resolution (316):	1, 1
	Synaptics Area (317):	0, 0, 0, 0
	Synaptics Noise Cancellation (318):	27, 27
	Device Product ID (256):	2, 7
	Device Node (257):	"/dev/input/event7"

# evemu-describe /dev/input/event7
N: SynPS/2 Synaptics TouchPad
I: 0011 0002 0007 01b1
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 07 00 00 00 00 00
B: 01 20 64 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 02
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: 15 00 00 00 00 00 00 00 00
B: 15 00 00 00 00 00 00 00 00
A: 00 1472 5728 0 0
A: 01 1408 4916 0 0
A: 18 0 255 0 0
A: 1c 0 15 0 0
A: 2f 0 1 0 0
A: 35 1472 5728 0 0
A: 36 1408 4916 0 0
A: 39 0 65535 0 0

Please let me know if you need any other information.

Comment 1 Tomas Pelka 2012-11-06 14:55:37 UTC
Created attachment 639407 [details]
xorg.log

Comment 2 Peter Hutterer 2012-11-08 00:07:48 UTC
(In reply to comment #0)
> Additional info:
> xinput list-props 'SynPS/2 Synaptics TouchPad'
> Device 'SynPS/2 Synaptics TouchPad':
[...]
> 	Synaptics Edge Scrolling (293):	1, 1, 0
> 	Synaptics Two-Finger Scrolling (294):	0, 0

This makes me wonder - edge scrolling is still on, two-finger scrolling is still off. So this suggests a client-side issue.

does two-finger (vertical) scrolling work if you run
xinput set-prop "SynPS/2 Synaptics TouchPad" "Synaptics Edge Scrolling" 0 0 0
xinput set-prop "SynPS/2 Synaptics TouchPad" "Synaptics Two-Finger Scrolling" 0 1 0

use 1 1 if you want horiz scrolling as well

Comment 3 Tomas Pelka 2012-11-08 10:21:16 UTC
xinput set-prop "SynPS/2 Synaptics TouchPad" "Synaptics Two-Finger Scrolling" 0 1 1
X Error of failed request:  BadMatch (invalid parameter attributes)
  Major opcode of failed request:  131 (XInputExtension)
  Minor opcode of failed request:  57 ()
  Serial number of failed request:  20
  Current serial number in output stream:  21

xinput set-prop "SynPS/2 Synaptics TouchPad" "Synaptics Two-Finger Scrolling" 0 1 0
X Error of failed request:  BadMatch (invalid parameter attributes)
  Major opcode of failed request:  131 (XInputExtension)
  Minor opcode of failed request:  57 ()
  Serial number of failed request:  20
  Current serial number in output stream:  21

synclient 
Parameter settings:
    LeftEdge                = 1769
    RightEdge               = 5431
    TopEdge                 = 1653
    BottomEdge              = 4671
    FingerLow               = 25
    FingerHigh              = 30
    FingerPress             = 256
    MaxTapTime              = 180
    MaxTapMove              = 242
    MaxDoubleTapTime        = 180
    SingleTapTimeout        = 180
    ClickTime               = 100
    FastTaps                = 0
    EmulateMidButtonTime    = 75
    EmulateTwoFingerMinZ    = 282
    EmulateTwoFingerMinW    = 7
    VertScrollDelta         = 110
    HorizScrollDelta        = 110
    VertEdgeScroll          = 0
    HorizEdgeScroll         = 0
    CornerCoasting          = 0
    VertTwoFingerScroll     = 1
    HorizTwoFingerScroll    = 1
    MinSpeed                = 1
    MaxSpeed                = 1.75
    AccelFactor             = 0.0362647
    TrackstickSpeed         = 40
    EdgeMotionMinZ          = 30
    EdgeMotionMaxZ          = 160
    EdgeMotionMinSpeed      = 1
    EdgeMotionMaxSpeed      = 441
    EdgeMotionUseAlways     = 0
    TouchpadOff             = 1
    LockedDrags             = 0
    LockedDragTimeout       = 5000
    RTCornerButton          = 0
    RBCornerButton          = 0
    LTCornerButton          = 0
    LBCornerButton          = 0
    TapButton1              = 1
    TapButton2              = 3
    TapButton3              = 2
    ClickFinger1            = 1
    ClickFinger2            = 1
    ClickFinger3            = 1
    CircularScrolling       = 0
    CircScrollDelta         = 0.1
    CircScrollTrigger       = 0
    CircularPad             = 0
    PalmDetect              = 0
    PalmMinWidth            = 10
    PalmMinZ                = 200
    CoastingSpeed           = 0
    CoastingFriction        = 50
    PressureMotionMinZ      = 30
    PressureMotionMaxZ      = 160
    PressureMotionMinFactor = 1
    PressureMotionMaxFactor = 1
    GrabEventDevice         = 1
    TapAndDragGesture       = 1
    AreaLeftEdge            = 0
    AreaRightEdge           = 0
    AreaTopEdge             = 0
    AreaBottomEdge          = 0
    HorizHysteresis         = 27
    VertHysteresis          = 27
    ClickPad                = 0

Comment 4 Peter Hutterer 2012-11-13 05:23:15 UTC
(In reply to comment #3)
> xinput set-prop "SynPS/2 Synaptics TouchPad" "Synaptics Two-Finger
> Scrolling" 0 1 0
> X Error of failed request:  BadMatch (invalid parameter attributes)
>   Major opcode of failed request:  131 (XInputExtension)
>   Minor opcode of failed request:  57 ()
>   Serial number of failed request:  20
>   Current serial number in output stream:  21

sorry, my fault, this should only have two values, copy/paste error.
Try synclient VertEdgeScroll=1, that enables two-finger vertical scrolling too.

Comment 5 Tomas Pelka 2012-11-13 07:32:28 UTC
$ synclient | grep Scroll
    VertScrollDelta         = 110
    HorizScrollDelta        = 110
    VertEdgeScroll          = 1
    HorizEdgeScroll         = 0
    VertTwoFingerScroll     = 1
    HorizTwoFingerScroll    = 1
    CircularScrolling       = 0
    CircScrollDelta         = 0.1
    CircScrollTrigger       = 0

Hmm HorizontalEdge scrolling is working now even if it is on 0, TwoFinger scrolling still not working.

Comment 6 Peter Hutterer 2012-11-13 10:39:05 UTC
weird. can I get some evemu recordings please, as separate files:
* the device description
* two-finger scrolling, vertical
* two-finger scrolling, horizontal
* edge scroll, vertical
* edge scroll, horizontal

You'll need to do those from the tty to avoid the device grab.

RHEL rpms are here: http://people.redhat.com/~phuttere/rpms/evemu/

Comment 7 Tomas Pelka 2012-11-19 11:52:36 UTC
Created attachment 647712 [details]
evemu-describe

Comment 8 Tomas Pelka 2012-11-19 12:28:48 UTC
(In reply to comment #6)
> weird. can I get some evemu recordings please, as separate files:
> * the device description
attached
> * two-finger scrolling, vertical
> * two-finger scrolling, horizontal
> * edge scroll, vertical
> * edge scroll, horizontal
> 
> You'll need to do those from the tty to avoid the device grab.
> 
> RHEL rpms are here: http://people.redhat.com/~phuttere/rpms/evemu/

Not able to record with evemu-1.0.10-1.el6, evemu-record produce empty files.

Comment 9 Tomas Pelka 2012-11-19 13:10:14 UTC
(In reply to comment #8)
> (In reply to comment #6)
> > weird. can I get some evemu recordings please, as separate files:
> > * the device description
> attached
> > * two-finger scrolling, vertical
> > * two-finger scrolling, horizontal
> > * edge scroll, vertical
> > * edge scroll, horizontal
> > 
> > You'll need to do those from the tty to avoid the device grab.
> > 
> > RHEL rpms are here: http://people.redhat.com/~phuttere/rpms/evemu/
> 
> Not able to record with evemu-1.0.10-1.el6, evemu-record produce empty files.

OK I needed to be in VT to get records.

Comment 10 Tomas Pelka 2012-11-19 13:12:40 UTC
Created attachment 647749 [details]
edge-horizontal

Comment 11 Tomas Pelka 2012-11-19 13:18:02 UTC
Created attachment 647751 [details]
edge-vertical

Comment 12 Tomas Pelka 2012-11-19 13:19:33 UTC
Created attachment 647753 [details]
two-horizontal

Comment 13 Tomas Pelka 2012-11-19 13:20:08 UTC
Created attachment 647754 [details]
two-vertical

Comment 14 Peter Hutterer 2012-11-21 04:36:01 UTC
(In reply to comment #13)
> Created attachment 647754 [details]
> two-vertical

this one doesn't appear to have two touchpoints in it? afaict the two-finger scrolling does work with two-horizontal event sequence since it gives me button 4/5 events.

To clarify again:
synclient VertEdgeScroll=0 VertTwoFingerScroll=1
synclient HorizEdgeScroll=0 HorizTwoFingerScrol1=1

Then start a plain X server, xev -root and try to scroll. Does xev register any button 4/5/6/7 events when scrolling? This is the test case here and it works fine (minus that event sequence which only shows one touchpoint)

Comment 15 Tomas Pelka 2012-11-27 15:32:32 UTC
(In reply to comment #14)
> (In reply to comment #13)
> > Created attachment 647754 [details]
> > two-vertical
> 
> this one doesn't appear to have two touchpoints in it? afaict the two-finger
> scrolling does work with two-horizontal event sequence since it gives me
> button 4/5 events.
> 
> To clarify again:
> synclient VertEdgeScroll=0 VertTwoFingerScroll=1
> synclient HorizEdgeScroll=0 HorizTwoFingerScrol1=1
> 
> Then start a plain X server, xev -root and try to scroll. Does xev register
> any button 4/5/6/7 events when scrolling? This is the test case here and it
> works fine (minus that event sequence which only shows one touchpoint)

No output from xev.

Comment 17 Peter Hutterer 2013-01-22 04:59:41 UTC
I really need a new recording from this device, the two-finger vertical scroll recording only shows one touchpoint show up.

Comment 19 Tomas Pelka 2013-01-22 11:00:57 UTC
Created attachment 685042 [details]
twofinger-vertical-event.log

Comment 20 Peter Hutterer 2013-01-23 06:29:57 UTC
I think this is a hardware and/or kernel issue. I assume that you did try to do a two-finger scroll and while slot events show up (002f in third column), they only do so shortly and not as expected from a two-finger scroll event. The first event sequence is one finger moving down on the touchpad, then just 4 events with two fingers. On the next sequence there is only 2 overlapping events. This indicates incorrect tracking by the HW or the kernel.

A similar issue can also be found in the horizontal event sequence you submitted earlier.

You can run https://github.com/whot/mtview to show the touch events as they appear on the device.

If I replay your event sequence and record it, I get the same output, so we can rule out any issues in the re-playing (after fixing Bug 903081)

If I take a known good sequence (recorded on my touchpad) and re-play it through your device, two-finger scrolling works.

so yeah, this isn't a synaptics issue, it's hw or kernel. Has this device worked in 6.3?

Comment 21 Tomas Pelka 2013-01-23 11:05:28 UTC
(In reply to comment #20)
> I think this is a hardware and/or kernel issue. I assume that you did try to
> do a two-finger scroll and while slot events show up (002f in third column),
> they only do so shortly and not as expected from a two-finger scroll event.
> The first event sequence is one finger moving down on the touchpad, then
> just 4 events with two fingers. On the next sequence there is only 2
> overlapping events. This indicates incorrect tracking by the HW or the
> kernel.
> 
> A similar issue can also be found in the horizontal event sequence you
> submitted earlier.
> 
> You can run https://github.com/whot/mtview to show the touch events as they
> appear on the device.
> 
> If I replay your event sequence and record it, I get the same output, so we
> can rule out any issues in the re-playing (after fixing Bug 903081)
> 
> If I take a known good sequence (recorded on my touchpad) and re-play it
> through your device, two-finger scrolling works.
> 
> so yeah, this isn't a synaptics issue, it's hw or kernel. Has this device
> worked in 6.3?

Sorry Peter I'm not very clear what should I test, the machine wasn't ever tester against rhel6.3 but I can try.

Attachaing at least video with mtview, don't know what is an expected result.

Comment 22 Tomas Pelka 2013-01-23 11:08:56 UTC
Created attachment 685830 [details]
tmview-twofinger-scroll video

Comment 23 Peter Hutterer 2013-01-24 04:03:36 UTC
ok, this video definitely shows that this is a hw issue. That first two-finger horizonal movement (0:02 to 0:04) should show two lines. What you get instead is one touchpoint at a time, jumping between the two finger (and outliers as well, apparently).

This isn't something we can fix in the driver, especially not in the 6.4 timeframe.

I need to check if we can do legacy two-finger scrolling here (BTN_TOOL_DOUBLETAP) but the touchpad does announce multi-touch capabilities so the driver uses those by default.

Comment 24 Tomas Pelka 2013-01-24 09:27:44 UTC
OK so moving to 6.5.