[PATCH xf86-input-synaptics 11/12] Don't use linear regression when calculating touchpad motion deltas
Peter Hutterer
peter.hutterer at who-t.net
Wed Feb 22 19:59:02 PST 2012
On Thu, Feb 09, 2012 at 06:53:05PM -0800, Chase Douglas wrote:
> The results depend on the data rate of the device. A device with a
> higher data rate, and thus lower individual deltas, will behave
> differently with the regression calculation.
>
> This can be verified on Synaptics semi-mt clickpads. The data rate is
> halved when two or more touches are on the device. When trying to press
> a button and drag the cursor with another touch, the motion will feel
> faster than dragging with only one touch on the device.
>
> Signed-off-by: Chase Douglas <chase.douglas at canonical.com>
> ---
> src/synaptics.c | 7 +++----
> 1 files changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/src/synaptics.c b/src/synaptics.c
> index dd138ea..9d8f3ee 100644
> --- a/src/synaptics.c
> +++ b/src/synaptics.c
> @@ -2046,9 +2046,8 @@ get_delta(SynapticsPrivate *priv, const struct SynapticsHwState *hw,
> int x_edge_speed = 0;
> int y_edge_speed = 0;
>
> - /* HIST is full enough: priv->count_packet_finger > 3 */
> - *dx = estimate_delta(hw->x, HIST(0).x, HIST(1).x, HIST(2).x);
> - *dy = estimate_delta(hw->y, HIST(0).y, HIST(1).y, HIST(2).y);
> + *dx = hw->x - HIST(0).x;
> + *dy = hw->y - HIST(0).y;
>
> if ((priv->tap_state == TS_DRAG) || para->edge_motion_use_always)
> get_edge_speed(priv, hw, edge, &x_edge_speed, &y_edge_speed);
> @@ -2118,7 +2117,7 @@ ComputeDeltas(SynapticsPrivate *priv, const struct SynapticsHwState *hw,
> * POLL_MS declaration. */
> delay = MIN(delay, POLL_MS);
>
> - if (priv->count_packet_finger <= 3) /* min. 3 packets, see get_delta() */
> + if (priv->count_packet_finger <= 1)
> goto out; /* skip the lot */
>
> if (priv->moving_state == MS_TRACKSTICK)
> --
> 1.7.8.3
>
uhm, that commit seems a bit too simple. how does this affect other devices?
Cheers,
Peter
More information about the xorg-devel
mailing list