This is a note to let you know that I've just added the patch titled

    Input: elantech - discard the first 2 positions on some firmwares

to the 2.6.32-longterm tree which can be found at:
    
http://www.kernel.org/git/?p=linux/kernel/git/longterm/longterm-queue-2.6.32.git;a=summary

The filename of the patch is:
     input-elantech-discard-the-first-2-positions-on-some.patch
and it can be found in the queue-2.6.32 subdirectory.

If you, or anyone else, feels it should not be added to the 2.6.32 longterm 
tree,
please let <[email protected]> know about it.


From 2892ef1cac854df4b238d6958833c631f492d2e9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C3=89ric=20Piel?= <[email protected]>
Date: Thu, 5 Aug 2010 23:51:49 -0700
Subject: Input: elantech - discard the first 2 positions on some firmwares
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

From: Éric Piel <[email protected]>

commit 7f29f17b57255b6395046805a98bc663ded63fb8 upstream.

According to the Dell/Ubuntu driver, what was previously observed as
"jumpy cursor" corresponds to the hardware sending incorrect data for
the first two reports of a one touch finger. So let's use the same
workaround as in the other driver. Also, detect another firmware
version with the same behaviour, as in the other driver.

Signed-off-by: Éric Piel <[email protected]>
Signed-off-by: Dmitry Torokhov <[email protected]>
[bwh: Adjust for 2.6.32]
Signed-off-by: Greg Kroah-Hartman <[email protected]>
---
 drivers/input/mouse/elantech.c |   21 ++++++++++-----------
 drivers/input/mouse/elantech.h |    7 ++++---
 2 files changed, 14 insertions(+), 14 deletions(-)

--- a/drivers/input/mouse/elantech.c
+++ b/drivers/input/mouse/elantech.c
@@ -182,7 +182,6 @@ static void elantech_report_absolute_v1(
        struct elantech_data *etd = psmouse->private;
        unsigned char *packet = psmouse->packet;
        int fingers;
-       static int old_fingers;
 
        if (etd->fw_version < 0x020000) {
                /*
@@ -200,10 +199,13 @@ static void elantech_report_absolute_v1(
        }
 
        if (etd->jumpy_cursor) {
-               /* Discard packets that are likely to have bogus coordinates */
-               if (fingers > old_fingers) {
+               if (fingers != 1) {
+                       etd->single_finger_reports = 0;
+               } else if (etd->single_finger_reports < 2) {
+                       /* Discard first 2 reports of one finger, bogus */
+                       etd->single_finger_reports++;
                        elantech_debug("elantech.c: discarding packet\n");
-                       goto discard_packet_v1;
+                       return;
                }
        }
 
@@ -235,9 +237,6 @@ static void elantech_report_absolute_v1(
        }
 
        input_sync(dev);
-
- discard_packet_v1:
-       old_fingers = fingers;
 }
 
 /*
@@ -733,14 +732,14 @@ int elantech_init(struct psmouse *psmous
        etd->capabilities = param[0];
 
        /*
-        * This firmware seems to suffer from misreporting coordinates when
+        * This firmware suffers from misreporting coordinates when
         * a touch action starts causing the mouse cursor or scrolled page
         * to jump. Enable a workaround.
         */
-       if (etd->fw_version == 0x020022) {
-               pr_info("elantech.c: firmware version 2.0.34 detected, "
+       if (etd->fw_version == 0x020022 || etd->fw_version == 0x020600) {
+               pr_info("elantech.c: firmware version 2.0.34/2.6.0 detected, "
                        "enabling jumpy cursor workaround\n");
-               etd->jumpy_cursor = 1;
+               etd->jumpy_cursor = true;
        }
 
        if (elantech_set_absolute_mode(psmouse)) {
--- a/drivers/input/mouse/elantech.h
+++ b/drivers/input/mouse/elantech.h
@@ -100,10 +100,11 @@ struct elantech_data {
        unsigned char reg_26;
        unsigned char debug;
        unsigned char capabilities;
-       unsigned char paritycheck;
-       unsigned char jumpy_cursor;
+       bool paritycheck;
+       bool jumpy_cursor;
        unsigned char hw_version;
-       unsigned int  fw_version;
+       unsigned int fw_version;
+       unsigned int single_finger_reports;
        unsigned char parity[256];
 };
 


Patches currently in longterm-queue-2.6.32 which might be from 
[email protected] are

/home/gregkh/linux/longterm/longterm-queue-2.6.32/queue-2.6.32/input-elantech-discard-the-first-2-positions-on-some.patch

_______________________________________________
stable mailing list
[email protected]
http://linux.kernel.org/mailman/listinfo/stable

Reply via email to