Input: appletouch - improve finger detection
authorJeremy Huddleston <jeremyhu@freedesktop.org>
Wed, 3 Jun 2009 14:29:39 +0000 (07:29 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Wed, 3 Jun 2009 14:37:54 +0000 (07:37 -0700)
The appletouch driver is prone to reporting multiple fingers when only
one is pressing.  The appletouch driver queries an array of pressure
sensors and counts local maxima in pressure to determine the number of
fingers.  It just does this on the raw values, so a data stream like:

0 100 250 300 299 300 250 100 0

actually registers as 2 fingers.

This patch updates the logic to ignore small dips in pressure that are
less than the threshold.

Signed-off-by: Jeremy Huddleston <jeremyhu@freedesktop.org>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
drivers/input/mouse/appletouch.c

index e0140fdc02a57c26a610cd8df76a4ac33b670258..908b5b44052f2e0961fcbde9a98cf19518e978c9 100644 (file)
@@ -361,7 +361,7 @@ static int atp_calculate_abs(int *xy_sensors, int nb_sensors, int fact,
                    (!is_increasing && xy_sensors[i - 1] < xy_sensors[i])) {
                        (*fingers)++;
                        is_increasing = 1;
-               } else if (i > 0 && xy_sensors[i - 1] >= xy_sensors[i]) {
+               } else if (i > 0 && (xy_sensors[i - 1] - xy_sensors[i] > threshold)) {
                        is_increasing = 0;
                }