Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 144409
b: refs/heads/master
c: 3f8c0df
h: refs/heads/master
i:
  144407: acdbf1d
v: v3
  • Loading branch information
Arjan Opmeer authored and Dmitry Torokhov committed Apr 19, 2009
1 parent 9b6bbd0 commit 67f247c
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 3deb649e654ff87b87de9e415ac43ca8afbdff07
refs/heads/master: 3f8c0df43dec51fbdfb2627f7574aa00a5fce98c
27 changes: 25 additions & 2 deletions trunk/drivers/input/mouse/elantech.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* Elantech Touchpad driver (v5)
* Elantech Touchpad driver (v6)
*
* Copyright (C) 2007-2008 Arjan Opmeer <arjan@opmeer.net>
* Copyright (C) 2007-2009 Arjan Opmeer <arjan@opmeer.net>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
Expand Down Expand Up @@ -178,6 +178,7 @@ 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_maj == 0x01) {
/* byte 0: D U p1 p2 1 p3 R L
Expand All @@ -190,6 +191,14 @@ static void elantech_report_absolute_v1(struct psmouse *psmouse)
fingers = (packet[0] & 0xc0) >> 6;
}

if (etd->jumpy_cursor) {
/* Discard packets that are likely to have bogus coordinates */
if (fingers > old_fingers) {
elantech_debug("elantech.c: discarding packet\n");
goto discard_packet_v1;
}
}

input_report_key(dev, BTN_TOUCH, fingers != 0);

/* byte 2: x7 x6 x5 x4 x3 x2 x1 x0
Expand All @@ -216,6 +225,9 @@ static void elantech_report_absolute_v1(struct psmouse *psmouse)
}

input_sync(dev);

discard_packet_v1:
old_fingers = fingers;
}

/*
Expand Down Expand Up @@ -662,6 +674,17 @@ int elantech_init(struct psmouse *psmouse)
param[0], param[1], param[2]);
etd->capabilities = param[0];

/*
* This firmware seems to suffer from misreporting coordinates when
* a touch action starts causing the mouse cursor or scrolled page
* to jump. Enable a workaround.
*/
if (etd->fw_version_maj == 0x02 && etd->fw_version_min == 0x22) {
pr_info("elantech.c: firmware version 2.34 detected, "
"enabling jumpy cursor workaround\n");
etd->jumpy_cursor = 1;
}

if (elantech_set_absolute_mode(psmouse)) {
pr_err("elantech.c: failed to put touchpad into absolute mode.\n");
goto init_fail;
Expand Down
5 changes: 3 additions & 2 deletions trunk/drivers/input/mouse/elantech.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* Elantech Touchpad driver (v5)
* Elantech Touchpad driver (v6)
*
* Copyright (C) 2007-2008 Arjan Opmeer <arjan@opmeer.net>
* Copyright (C) 2007-2009 Arjan Opmeer <arjan@opmeer.net>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
Expand Down Expand Up @@ -104,6 +104,7 @@ struct elantech_data {
unsigned char fw_version_min;
unsigned char hw_version;
unsigned char paritycheck;
unsigned char jumpy_cursor;
unsigned char parity[256];
};

Expand Down

0 comments on commit 67f247c

Please sign in to comment.