lkml.org 
[lkml]   [2012]   [Mar]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[34-longterm 116/196] Input: elantech - discard the first 2 positions on some firmwares
    Date
    From: Éric Piel <E.A.B.Piel@tudelft.nl>

    -------------------
    This is a commit scheduled for the next v2.6.34 longterm release.
    If you see a problem with using this for longterm, please comment.
    -------------------

    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: Paul Gortmaker <paul.gortmaker@windriver.com>
    ---
    drivers/input/mouse/elantech.c | 21 ++++++++++-----------
    drivers/input/mouse/elantech.h | 7 ++++---
    2 files changed, 14 insertions(+), 14 deletions(-)

    diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
    index 4400369..a0c19c2 100644
    --- a/drivers/input/mouse/elantech.c
    +++ b/drivers/input/mouse/elantech.c
    @@ -183,7 +183,6 @@ static void elantech_report_absolute_v1(struct psmouse *psmouse)
    struct elantech_data *etd = psmouse->private;
    unsigned char *packet = psmouse->packet;
    int fingers;
    - static int old_fingers;

    if (etd->fw_version < 0x020000) {
    /*
    @@ -201,10 +200,13 @@ static void elantech_report_absolute_v1(struct psmouse *psmouse)
    }

    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;
    }
    }

    @@ -236,9 +238,6 @@ static void elantech_report_absolute_v1(struct psmouse *psmouse)
    }

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

    /*
    @@ -734,14 +733,14 @@ int elantech_init(struct psmouse *psmouse)
    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)) {
    diff --git a/drivers/input/mouse/elantech.h b/drivers/input/mouse/elantech.h
    index ac57bde..aa4aac5 100644
    --- 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];
    };

    --
    1.7.9.3
    --
    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: 2012-03-13 01:49    [W:0.026 / U:29.208 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site