lkml.org 
[lkml]   [2011]   [Jul]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] [31/98] Input: elantech - discard the first 2 positions on some firmwares
    Date
    2.6.35-longterm review patch.  If anyone has any objections, please let me know.

    ------------------
    From: Éric Piel <eric.piel@tremplin-utc.net>

    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 <eric.piel@tremplin-utc.net>
    Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
    Signed-off-by: Andi Kleen <ak@linux.intel.com>
    [bwh: Adjust for 2.6.32]
    [ak: adjust for 2.6.35]
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
    ---
    drivers/input/mouse/elantech.c | 21 ++++++++++-----------
    drivers/input/mouse/elantech.h | 7 ++++---
    2 files changed, 14 insertions(+), 14 deletions(-)

    Index: linux-2.6.35.y/drivers/input/mouse/elantech.c
    ===================================================================
    --- linux-2.6.35.y.orig/drivers/input/mouse/elantech.c
    +++ linux-2.6.35.y/drivers/input/mouse/elantech.c
    @@ -185,7 +185,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) {
    /*
    @@ -203,11 +202,14 @@ static void elantech_report_absolute_v1(
    }

    if (etd->jumpy_cursor) {
    - /* Discard packets that are likely to have bogus coordinates */
    - if (fingers > old_fingers) {
    - elantech_debug("discarding packet\n");
    - goto discard_packet_v1;
    - }
    + 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");
    + return;
    + }
    }

    input_report_key(dev, BTN_TOUCH, fingers != 0);
    @@ -238,9 +240,6 @@ static void elantech_report_absolute_v1(
    }

    input_sync(dev);
    -
    - discard_packet_v1:
    - old_fingers = fingers;
    }

    /*
    @@ -733,13 +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("firmware version 2.0.34 detected, enabling jumpy cursor workaround\n");
    - etd->jumpy_cursor = 1;
    + 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 = true;
    }

    if (elantech_set_absolute_mode(psmouse)) {
    Index: linux-2.6.35.y/drivers/input/mouse/elantech.h
    ===================================================================
    --- linux-2.6.35.y.orig/drivers/input/mouse/elantech.h
    +++ linux-2.6.35.y/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];
    };

    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2011-07-27 02:39    [W:0.025 / U:6.004 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site