[kernel/f21] Add support for touchpad in Asus X450 and X550 (rhbz 1110011)
Josh Boyer
jwboyer at fedoraproject.org
Thu Sep 11 14:08:59 UTC 2014
commit 5fd278390638ccde3f2c9543f4390780569f8471
Author: Josh Boyer <jwboyer at fedoraproject.org>
Date: Thu Sep 11 08:25:00 2014 -0400
Add support for touchpad in Asus X450 and X550 (rhbz 1110011)
...store-the-aux-firmware-id-in-multi-plexed.patch | 32 ++++
kernel.spec | 13 ++
...dd-psmouse_matches_pnp_id-helper-function.patch | 100 ++++++++++++
...-support-for-detecting-FocalTech-PS-2-tou.patch | 159 ++++++++++++++++++++
4 files changed, 304 insertions(+), 0 deletions(-)
---
diff --git a/i8042-Also-store-the-aux-firmware-id-in-multi-plexed.patch b/i8042-Also-store-the-aux-firmware-id-in-multi-plexed.patch
new file mode 100644
index 0000000..f2a5454
--- /dev/null
+++ b/i8042-Also-store-the-aux-firmware-id-in-multi-plexed.patch
@@ -0,0 +1,32 @@
+From ef15224bce9875f9a5fbc93a2823219df6936a18 Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede at redhat.com>
+Date: Wed, 30 Jul 2014 17:56:05 +0200
+Subject: [PATCH 1/3] i8042: Also store the aux firmware id in multi-plexed aux
+ ports
+
+So that firmware-id matching can be used with multiplexed aux ports too.
+
+Bugzilla: 1110011
+Upstream-status: sent for 3.17/3.18
+
+Signed-off-by: Hans de Goede <hdegoede at redhat.com>
+---
+ drivers/input/serio/i8042.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
+index f1aeb0240d6e..4b5015f27f9e 100644
+--- a/drivers/input/serio/i8042.c
++++ b/drivers/input/serio/i8042.c
+@@ -1253,6 +1253,8 @@ static int __init i8042_create_aux_port(int idx)
+ } else {
+ snprintf(serio->name, sizeof(serio->name), "i8042 AUX%d port", idx);
+ snprintf(serio->phys, sizeof(serio->phys), I8042_MUX_PHYS_DESC, idx + 1);
++ strlcpy(serio->firmware_id, i8042_aux_firmware_id,
++ sizeof(serio->firmware_id));
+ }
+
+ port->serio = serio;
+--
+1.9.3
+
diff --git a/kernel.spec b/kernel.spec
index f37b37b..439b7de 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -632,6 +632,11 @@ Patch26019: Input-wacom-Add-support-for-the-Cintiq-Companion.patch
# CVE-2014-3631 rhbz 1116347
Patch26020: KEYS-Fix-termination-condition-in-assoc-array-garbag.patch
+#rhbz 1110011
+Patch26021: i8042-Also-store-the-aux-firmware-id-in-multi-plexed.patch
+Patch26022: psmouse-Add-psmouse_matches_pnp_id-helper-function.patch
+Patch26023: psmouse-Add-support-for-detecting-FocalTech-PS-2-tou.patch
+
# git clone ssh://git.fedorahosted.org/git/kernel-arm64.git, git diff master...devel
Patch30000: kernel-arm64.patch
@@ -1357,6 +1362,11 @@ ApplyPatch Input-wacom-Add-support-for-the-Cintiq-Companion.patch
# CVE-2014-3631 rhbz 1116347
ApplyPatch KEYS-Fix-termination-condition-in-assoc-array-garbag.patch
+#rhbz 1110011
+ApplyPatch i8042-Also-store-the-aux-firmware-id-in-multi-plexed.patch
+ApplyPatch psmouse-Add-psmouse_matches_pnp_id-helper-function.patch
+ApplyPatch psmouse-Add-support-for-detecting-FocalTech-PS-2-tou.patch
+
%if 0%{?aarch64patches}
ApplyPatch kernel-arm64.patch
%ifnarch aarch64 # this is stupid, but i want to notice before secondary koji does.
@@ -2233,6 +2243,9 @@ fi
# ||----w |
# || ||
%changelog
+* Thu Sep 11 2014 Josh Boyer <jwboyer at fedoraproject.org>
+- Add support for touchpad in Asus X450 and X550 (rhbz 1110011)
+
* Wed Sep 10 2014 Josh Boyer <jwboyer at fedoraproject.org> - 3.16.2-301
- CVE-2014-3631 Add patch to fix oops on keyring gc (rhbz 1116347)
diff --git a/psmouse-Add-psmouse_matches_pnp_id-helper-function.patch b/psmouse-Add-psmouse_matches_pnp_id-helper-function.patch
new file mode 100644
index 0000000..899a20b
--- /dev/null
+++ b/psmouse-Add-psmouse_matches_pnp_id-helper-function.patch
@@ -0,0 +1,100 @@
+From d0d1fbdb2d34a669ffbec814893696909381ac0e Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede at redhat.com>
+Date: Fri, 27 Jun 2014 18:46:42 +0200
+Subject: [PATCH 2/3] psmouse: Add psmouse_matches_pnp_id helper function
+
+The matches_pnp_id function from the synaptics driver is useful for other
+drivers too. Make it a generic psmouse helper function.
+
+Bugzilla: 1110011
+Upstream-status: sent for 3.17/3.18
+
+Signed-off-by: Hans de Goede <hdegoede at redhat.com>
+---
+ drivers/input/mouse/psmouse-base.c | 14 ++++++++++++++
+ drivers/input/mouse/psmouse.h | 1 +
+ drivers/input/mouse/synaptics.c | 17 +++--------------
+ 3 files changed, 18 insertions(+), 14 deletions(-)
+
+diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
+index cff065f6261c..bc1bc2653f15 100644
+--- a/drivers/input/mouse/psmouse-base.c
++++ b/drivers/input/mouse/psmouse-base.c
+@@ -462,6 +462,20 @@ static int psmouse_poll(struct psmouse *psmouse)
+ PSMOUSE_CMD_POLL | (psmouse->pktsize << 8));
+ }
+
++/*
++ * psmouse_matches_pnp_id - check if psmouse matches one of the passed in ids.
++ */
++bool psmouse_matches_pnp_id(struct psmouse *psmouse, const char * const ids[])
++{
++ int i;
++
++ if (!strncmp(psmouse->ps2dev.serio->firmware_id, "PNP:", 4))
++ for (i = 0; ids[i]; i++)
++ if (strstr(psmouse->ps2dev.serio->firmware_id, ids[i]))
++ return true;
++
++ return false;
++}
+
+ /*
+ * Genius NetMouse magic init.
+diff --git a/drivers/input/mouse/psmouse.h b/drivers/input/mouse/psmouse.h
+index 2f0b39d59a9b..f4cf664c7db3 100644
+--- a/drivers/input/mouse/psmouse.h
++++ b/drivers/input/mouse/psmouse.h
+@@ -108,6 +108,7 @@ void psmouse_set_resolution(struct psmouse *psmouse, unsigned int resolution);
+ psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse);
+ int psmouse_activate(struct psmouse *psmouse);
+ int psmouse_deactivate(struct psmouse *psmouse);
++bool psmouse_matches_pnp_id(struct psmouse *psmouse, const char * const ids[]);
+
+ struct psmouse_attribute {
+ struct device_attribute dattr;
+diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
+index e8573c68f77e..854caca6e86e 100644
+--- a/drivers/input/mouse/synaptics.c
++++ b/drivers/input/mouse/synaptics.c
+@@ -185,18 +185,6 @@ static const char * const topbuttonpad_pnp_ids[] = {
+ NULL
+ };
+
+-static bool matches_pnp_id(struct psmouse *psmouse, const char * const ids[])
+-{
+- int i;
+-
+- if (!strncmp(psmouse->ps2dev.serio->firmware_id, "PNP:", 4))
+- for (i = 0; ids[i]; i++)
+- if (strstr(psmouse->ps2dev.serio->firmware_id, ids[i]))
+- return true;
+-
+- return false;
+-}
+-
+ /*****************************************************************************
+ * Synaptics communications functions
+ ****************************************************************************/
+@@ -362,7 +350,8 @@ static int synaptics_resolution(struct psmouse *psmouse)
+ }
+
+ for (i = 0; min_max_pnpid_table[i].pnp_ids; i++) {
+- if (matches_pnp_id(psmouse, min_max_pnpid_table[i].pnp_ids)) {
++ if (psmouse_matches_pnp_id(psmouse,
++ min_max_pnpid_table[i].pnp_ids)) {
+ priv->x_min = min_max_pnpid_table[i].x_min;
+ priv->x_max = min_max_pnpid_table[i].x_max;
+ priv->y_min = min_max_pnpid_table[i].y_min;
+@@ -1456,7 +1445,7 @@ static void set_input_params(struct psmouse *psmouse,
+
+ if (SYN_CAP_CLICKPAD(priv->ext_cap_0c)) {
+ __set_bit(INPUT_PROP_BUTTONPAD, dev->propbit);
+- if (matches_pnp_id(psmouse, topbuttonpad_pnp_ids))
++ if (psmouse_matches_pnp_id(psmouse, topbuttonpad_pnp_ids))
+ __set_bit(INPUT_PROP_TOPBUTTONPAD, dev->propbit);
+ /* Clickpads report only left button */
+ __clear_bit(BTN_RIGHT, dev->keybit);
+--
+1.9.3
+
diff --git a/psmouse-Add-support-for-detecting-FocalTech-PS-2-tou.patch b/psmouse-Add-support-for-detecting-FocalTech-PS-2-tou.patch
new file mode 100644
index 0000000..3282cc6
--- /dev/null
+++ b/psmouse-Add-support-for-detecting-FocalTech-PS-2-tou.patch
@@ -0,0 +1,159 @@
+From 4ab16f30317966f892342e8821a6dc26070d1a06 Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede at redhat.com>
+Date: Fri, 27 Jun 2014 18:50:33 +0200
+Subject: [PATCH 3/3] psmouse: Add support for detecting FocalTech PS/2
+ touchpads
+
+The Asus X450 and X550 laptops use a PS/2 touchpad from a new manufacturer
+called FocalTech:
+
+https://bugzilla.kernel.org/show_bug.cgi?id=77391
+https://bugzilla.redhat.com/show_bug.cgi?id=1110011
+
+The protocol for these devices is not known at this time, but even without
+knowing the protocol they need some special handling. They get upset by some
+of our other PS/2 device probing, and once upset generate random mouse events
+making things unusable even with an external mouse.
+
+This patch adds detection of these devices based on their pnp ids, and when
+they are detected, treats them as a bare ps/2 mouse. Doing things this way
+they at least work in their ps/2 mouse emulation mode.
+
+Signed-off-by: Hans de Goede <hdegoede at redhat.com>
+---
+ drivers/input/mouse/Makefile | 2 +-
+ drivers/input/mouse/focaltech.c | 44 ++++++++++++++++++++++++++++++++++++++
+ drivers/input/mouse/focaltech.h | 21 ++++++++++++++++++
+ drivers/input/mouse/psmouse-base.c | 10 +++++++++
+ 4 files changed, 76 insertions(+), 1 deletion(-)
+ create mode 100644 drivers/input/mouse/focaltech.c
+ create mode 100644 drivers/input/mouse/focaltech.h
+
+diff --git a/drivers/input/mouse/Makefile b/drivers/input/mouse/Makefile
+index c25efdb3f288..dda507f8b3a2 100644
+--- a/drivers/input/mouse/Makefile
++++ b/drivers/input/mouse/Makefile
+@@ -23,7 +23,7 @@ obj-$(CONFIG_MOUSE_SYNAPTICS_I2C) += synaptics_i2c.o
+ obj-$(CONFIG_MOUSE_SYNAPTICS_USB) += synaptics_usb.o
+ obj-$(CONFIG_MOUSE_VSXXXAA) += vsxxxaa.o
+
+-psmouse-objs := psmouse-base.o synaptics.o
++psmouse-objs := psmouse-base.o synaptics.o focaltech.o
+
+ psmouse-$(CONFIG_MOUSE_PS2_ALPS) += alps.o
+ psmouse-$(CONFIG_MOUSE_PS2_ELANTECH) += elantech.o
+diff --git a/drivers/input/mouse/focaltech.c b/drivers/input/mouse/focaltech.c
+new file mode 100644
+index 000000000000..d83a23554d63
+--- /dev/null
++++ b/drivers/input/mouse/focaltech.c
+@@ -0,0 +1,44 @@
++/*
++ * Focaltech TouchPad PS/2 mouse driver
++ *
++ * Copyright (c) 2014 Red Hat Inc.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * Red Hat authors:
++ *
++ * Hans de Goede <hdegoede at redhat.com>
++ */
++
++/*
++ * The Focaltech PS/2 touchpad protocol is unknown. This drivers deals with
++ * detection only, to avoid further detection attempts confusing the touchpad
++ * this way it at least works in PS/2 mouse compatibility mode.
++ */
++
++#include <linux/device.h>
++#include <linux/libps2.h>
++#include "psmouse.h"
++
++static const char * const focaltech_pnp_ids[] = {
++ "FLT0101",
++ "FLT0102",
++ "FLT0103",
++ NULL
++};
++
++int focaltech_detect(struct psmouse *psmouse, bool set_properties)
++{
++ if (!psmouse_matches_pnp_id(psmouse, focaltech_pnp_ids))
++ return -ENODEV;
++
++ if (set_properties) {
++ psmouse->vendor = "FocalTech";
++ psmouse->name = "FocalTech Touchpad in mouse emulation mode";
++ }
++
++ return 0;
++}
+diff --git a/drivers/input/mouse/focaltech.h b/drivers/input/mouse/focaltech.h
+new file mode 100644
+index 000000000000..0d0fc49451fe
+--- /dev/null
++++ b/drivers/input/mouse/focaltech.h
+@@ -0,0 +1,21 @@
++/*
++ * Focaltech TouchPad PS/2 mouse driver
++ *
++ * Copyright (c) 2014 Red Hat Inc.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * Red Hat authors:
++ *
++ * Hans de Goede <hdegoede at redhat.com>
++ */
++
++#ifndef _FOCALTECH_H
++#define _FOCALTECH_H
++
++int focaltech_detect(struct psmouse *psmouse, bool set_properties);
++
++#endif
+diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
+index bc1bc2653f15..0730209cddb0 100644
+--- a/drivers/input/mouse/psmouse-base.c
++++ b/drivers/input/mouse/psmouse-base.c
+@@ -35,6 +35,7 @@
+ #include "elantech.h"
+ #include "sentelic.h"
+ #include "cypress_ps2.h"
++#include "focaltech.h"
+
+ #define DRIVER_DESC "PS/2 mouse driver"
+
+@@ -720,6 +721,13 @@ static int psmouse_extensions(struct psmouse *psmouse,
+ {
+ bool synaptics_hardware = false;
+
++/* Always check for focaltech, this is safe as it uses pnp-id matching */
++ if (psmouse_do_detect(focaltech_detect, psmouse, set_properties) == 0) {
++ /* Not supported yet, use bare protocol */
++ psmouse_max_proto = max_proto = PSMOUSE_PS2;
++ goto reset_to_defaults;
++ }
++
+ /*
+ * We always check for lifebook because it does not disturb mouse
+ * (it only checks DMI information).
+@@ -871,6 +879,8 @@ static int psmouse_extensions(struct psmouse *psmouse,
+ }
+ }
+
++reset_to_defaults:
++
+ /*
+ * Reset to defaults in case the device got confused by extended
+ * protocol probes. Note that we follow up with full reset because
+--
+1.9.3
+
More information about the scm-commits
mailing list