From 0a6c27ad881a9b41848346a9e39edce1a252f168 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Jul 29 2013 12:29:48 +0000 Subject: Add support for elantech v7 devices (rhbz 969473) --- diff --git a/Input-elantech-fix-for-newer-hardware-versions-v7.patch b/Input-elantech-fix-for-newer-hardware-versions-v7.patch new file mode 100644 index 0000000..b9495d7 --- /dev/null +++ b/Input-elantech-fix-for-newer-hardware-versions-v7.patch @@ -0,0 +1,70 @@ +From 9eebed7de660c0b5ab129a9de4f89d20b60de68c Mon Sep 17 00:00:00 2001 +From: Matteo Delfino +Date: Sat, 6 Jul 2013 21:52:26 -0700 +Subject: [PATCH] Input: elantech - fix for newer hardware versions (v7) + +* Fix version recognition in elantech_set_properties + + The new hardware reports itself as v7 but the packets' + structure is unaltered. + +* Fix packet type recognition in elantech_packet_check_v4 + + The bitmask used for v6 is too wide, only the last three bits of + the third byte in a packet (packet[3] & 0x03) are actually used to + distinguish between packet types. + Starting from v7, additional information (to be interpreted) is + stored in the remaining bits (packets[3] & 0x1c). + In addition, the value stored in (packet[0] & 0x0c) is no longer + a constant but contains additional information yet to be deciphered. + This change should be backwards compatible with v6 hardware. + +Additional-author: Giovanni Frigione +Signed-off-by: Matteo Delfino +Signed-off-by: Dmitry Torokhov +--- + drivers/input/mouse/elantech.c | 17 +++++++++-------- + 1 file changed, 9 insertions(+), 8 deletions(-) + +diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c +index 1e8e42f..57b2637 100644 +--- a/drivers/input/mouse/elantech.c ++++ b/drivers/input/mouse/elantech.c +@@ -694,18 +694,18 @@ static int elantech_packet_check_v3(struct psmouse *psmouse) + static int elantech_packet_check_v4(struct psmouse *psmouse) + { + unsigned char *packet = psmouse->packet; ++ unsigned char packet_type = packet[3] & 0x03; + +- if ((packet[0] & 0x0c) == 0x04 && +- (packet[3] & 0x1f) == 0x11) ++ switch (packet_type) { ++ case 0: ++ return PACKET_V4_STATUS; ++ ++ case 1: + return PACKET_V4_HEAD; + +- if ((packet[0] & 0x0c) == 0x04 && +- (packet[3] & 0x1f) == 0x12) ++ case 2: + return PACKET_V4_MOTION; +- +- if ((packet[0] & 0x0c) == 0x04 && +- (packet[3] & 0x1f) == 0x10) +- return PACKET_V4_STATUS; ++ } + + return PACKET_UNKNOWN; + } +@@ -1282,6 +1282,7 @@ static int elantech_set_properties(struct elantech_data *etd) + etd->hw_version = 3; + break; + case 6: ++ case 7: + etd->hw_version = 4; + break; + default: +-- +1.8.3.1 + diff --git a/kernel.spec b/kernel.spec index e266137..8fba9fe 100644 --- a/kernel.spec +++ b/kernel.spec @@ -817,6 +817,9 @@ Patch26000: cve-2013-4125.patch #rhbz 979581 Patch25069: iwlwifi-dvm-fix-calling-ieee80211_chswitch_done-with-NULL.patch +#rhbz 969473 +Patch25070: Input-elantech-fix-for-newer-hardware-versions-v7.patch + # END OF PATCH DEFINITIONS %endif @@ -1572,6 +1575,9 @@ ApplyPatch ipv6-call-udp_push_pending_frames-when-uncorking-a-socket-with-AF_INE #rhbz 979581 ApplyPatch iwlwifi-dvm-fix-calling-ieee80211_chswitch_done-with-NULL.patch +#rhbz 969473 +ApplyPatch Input-elantech-fix-for-newer-hardware-versions-v7.patch + # END OF PATCH APPLICATIONS %endif @@ -2417,6 +2423,9 @@ fi # ||----w | # || || %changelog +* Mon Jul 29 2013 Josh Boyer +- Add support for elantech v7 devices (rhbz 969473) + * Fri Jul 26 2013 Josh Boyer - Add patch to fix NULL deref in iwlwifi (rhbz 979581)