Re: [PATCH] psmouse: added BYD touchpad driver

From: Chris Diamand
Date: Wed Feb 03 2016 - 03:58:26 EST


Hi Richard,

> Reporting absolute position allows the synaptics and libinput xorg drivers
> to treat the BYD touchpad as a touchpad, rather than a mouse. This allows
> edge scrolling, tap to click, natural scrolling and any other location
> based single touch gesture to work.
>
> I opted to completely disable the hardware multitouch gesture recognition
> (including two finger scroll) for a couple of reasons:
>
> 1. time delta between gesture packets was very large resulting in a rather
> jerky scrolling experience, especially compared to touchpad with real
> multitouch reporting.
> 2. Reporting absolute position and touch support enables the users to
> configure the touchpad in the touchpad settings section of gnome, cinnamon,
> etc because those applets configure synaptics and libinput. Otherwise xorg
> thinks it's just a mouse.

This all sounds good - I look forward to trying your patch!

Also, how did you figure out how to enable the absolute packets? I couldn't
find anything like that with the Windows driver I was using.

> 3. Enabling multitouch gesture recognition results in the mouse cursor
> freezing up when the user uses two fingers, one to move the mouse cursor
> and another to click. This is because movement packets stop getting sent
> while a gesture (such as pinch, rotate, etc) is being detected and/or
> reported.

So with your patch, how will this gesture work, if it can only recognise one
finger at a time? I guess you'd have to enable the "double-tap then drag"
thing in synaptics and use that?

> Disabling all hardware gesture detection, including two finger
> scroll, provides the most fluid user experience.

Yep, I agree that if it works, good one-finger scrolling would be much better
than the touchpad's internal gesture recognition.

> Regarding serio_pause_rx(), I was following a pattern similar to another
> touchpad driver in psmouse. That whole callback mechanism is required to
> report the touch had ended, since the BYD hardware only sends packets when
> a touch is occurring. Is there a better way?

You're right, actually - I was worried that the input_report_* functions might
sleep, but I just had a proper look and they don't.

> I'll try to rebase and post an updated patch tonight.

Cheers!
Chris