From 3b8a9f7cb97969853c165ee075e19d819679e688 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Wed, 11 Jun 2014 16:42:31 -0400 Subject: [PATCH] Fix elantech right click on Dell vostro 5470 (rhbz 1103528) --- ...th-clickpads-reporting-right-button-.patch | 79 +++++++++++++++++++ kernel.spec | 7 ++ 2 files changed, 86 insertions(+) create mode 100644 elantech-Deal-with-clickpads-reporting-right-button-.patch diff --git a/elantech-Deal-with-clickpads-reporting-right-button-.patch b/elantech-Deal-with-clickpads-reporting-right-button-.patch new file mode 100644 index 000000000..4da9e65b6 --- /dev/null +++ b/elantech-Deal-with-clickpads-reporting-right-button-.patch @@ -0,0 +1,79 @@ +Bugzilla: 1103528 +Upstream-status: Sent for 3.16 + +From 3b629bf4b018ece0c7b4d1c03bdc0eb69c884531 Mon Sep 17 00:00:00 2001 +From: Hans de Goede +Date: Thu, 5 Jun 2014 11:48:30 +0200 +Subject: [PATCH] elantech: Deal with clickpads reporting right button events + +At least the Dell Vostro 5470 elantech *clickpad* reports right button +clicks when clicked in the right bottom area. + +This is different from how (elantech) clickpads normally operate, +normally no matter where the user clicks on the pad the pad always reports +a left button event, since there is only 1 hardware button beneath the path. + +It is unknown if this is caused by Dell having put 2 buttons under the pad, +one under each bottom corner, or if this is something caused by the specific +firmware in this clickpad. + +Since this however still clearly is a real clickpad hardware-wise, we still +want to report it as such to userspace, so that things like finger movement +in the bottom area can be properly ignored as it should be on clickpads. + +So deal with this weirdness by simply mapping a right click to a left click +on elantech clickpads. As an added advantage this is something which we can +simply do on all elantech clickpads, so no need to add special quirks for +this weird model. + +Reported-by: Elder Marco +Signed-off-by: Hans de Goede +--- + drivers/input/mouse/elantech.c | 22 ++++++++++++++++++---- + 1 file changed, 18 insertions(+), 4 deletions(-) + +diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c +index 4d79821..846926d 100644 +--- a/drivers/input/mouse/elantech.c ++++ b/drivers/input/mouse/elantech.c +@@ -473,8 +473,15 @@ static void elantech_report_absolute_v3(struct psmouse *psmouse, + input_report_key(dev, BTN_TOOL_FINGER, fingers == 1); + input_report_key(dev, BTN_TOOL_DOUBLETAP, fingers == 2); + input_report_key(dev, BTN_TOOL_TRIPLETAP, fingers == 3); +- input_report_key(dev, BTN_LEFT, packet[0] & 0x01); +- input_report_key(dev, BTN_RIGHT, packet[0] & 0x02); ++ ++ /* For clickpads map both buttons to BTN_LEFT */ ++ if (etd->fw_version & 0x001000) { ++ input_report_key(dev, BTN_LEFT, packet[0] & 0x03); ++ } else { ++ input_report_key(dev, BTN_LEFT, packet[0] & 0x01); ++ input_report_key(dev, BTN_RIGHT, packet[0] & 0x02); ++ } ++ + input_report_abs(dev, ABS_PRESSURE, pres); + input_report_abs(dev, ABS_TOOL_WIDTH, width); + +@@ -484,10 +491,17 @@ static void elantech_report_absolute_v3(struct psmouse *psmouse, + static void elantech_input_sync_v4(struct psmouse *psmouse) + { + struct input_dev *dev = psmouse->dev; ++ struct elantech_data *etd = psmouse->private; + unsigned char *packet = psmouse->packet; + +- input_report_key(dev, BTN_LEFT, packet[0] & 0x01); +- input_report_key(dev, BTN_RIGHT, packet[0] & 0x02); ++ /* For clickpads map both buttons to BTN_LEFT */ ++ if (etd->fw_version & 0x001000) { ++ input_report_key(dev, BTN_LEFT, packet[0] & 0x03); ++ } else { ++ input_report_key(dev, BTN_LEFT, packet[0] & 0x01); ++ input_report_key(dev, BTN_RIGHT, packet[0] & 0x02); ++ } ++ + input_mt_report_pointer_emulation(dev, true); + input_sync(dev); + } +-- +2.0.0 + diff --git a/kernel.spec b/kernel.spec index 3683badc9..7f304fac0 100644 --- a/kernel.spec +++ b/kernel.spec @@ -734,6 +734,9 @@ Patch25099: NFS-populate-net-in-mount-data-when-remounting.patch #rhbz 1106856 Patch25100: dm-thin-update-discard_granularity-to-reflect-the-thin-pool-blocksize.patch +#rhbz 1103528 +Patch25101: elantech-Deal-with-clickpads-reporting-right-button-.patch + # END OF PATCH DEFINITIONS %endif @@ -1436,6 +1439,9 @@ ApplyPatch NFS-populate-net-in-mount-data-when-remounting.patch #rhbz 1106856 ApplyPatch dm-thin-update-discard_granularity-to-reflect-the-thin-pool-blocksize.patch +#rhbz 1103528 +ApplyPatch elantech-Deal-with-clickpads-reporting-right-button-.patch + # END OF PATCH APPLICATIONS %endif @@ -2249,6 +2255,7 @@ fi # || || %changelog * Wed Jun 11 2014 Josh Boyer +- Fix elantech right click on Dell vostro 5470 (rhbz 1103528) - Fix fstrim on dm-thin volume data (rhbz 1106856) - Fix NFS NULL pointer deref with ipv6 (rhbz 1099761) - Fix promisc mode on certain e1000e cards (rhbz 1064516)