[kernel/f21] Add patch to fix synaptics forcepad issues (rhbz 1153381)

Josh Boyer jwboyer at fedoraproject.org
Wed Oct 22 16:41:38 UTC 2014


commit f76263e7e70fb4364b9291024286d201ec6fb3ea
Author: Josh Boyer <jwboyer at fedoraproject.org>
Date:   Wed Oct 22 12:36:05 2014 -0400

    Add patch to fix synaptics forcepad issues (rhbz 1153381)

 ...aptics-gate-forcepad-support-by-DMI-check.patch |   97 ++++++++++++++++++++
 kernel.spec                                        |    7 ++
 2 files changed, 104 insertions(+), 0 deletions(-)
---
diff --git a/Input-synaptics-gate-forcepad-support-by-DMI-check.patch b/Input-synaptics-gate-forcepad-support-by-DMI-check.patch
new file mode 100644
index 0000000..a775eef
--- /dev/null
+++ b/Input-synaptics-gate-forcepad-support-by-DMI-check.patch
@@ -0,0 +1,97 @@
+From: Dmitry Torokhov <dmitry.torokhov at gmail.com>
+Date: Tue, 2 Sep 2014 09:49:18 -0700
+Subject: [PATCH] Input: synaptics - gate forcepad support by DMI check
+
+Unfortunately, ForcePad capability is not actually exported over PS/2, so
+we have to resort to DMI checks.
+
+Cc: stable at vger.kernel.org
+Reported-by: Nicole Faerber <nicole.faerber at kernelconcepts.de>
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov at gmail.com>
+---
+ drivers/input/mouse/synaptics.c | 22 +++++++++++++++++++++-
+ drivers/input/mouse/synaptics.h |  8 ++------
+ 2 files changed, 23 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
+index 6394d9b5bfd3..9031a0a28ea4 100644
+--- a/drivers/input/mouse/synaptics.c
++++ b/drivers/input/mouse/synaptics.c
+@@ -607,6 +607,8 @@ static void synaptics_parse_agm(const unsigned char buf[],
+ 	priv->agm_pending = true;
+ }
+ 
++static bool is_forcepad;
++
+ static int synaptics_parse_hw_state(const unsigned char buf[],
+ 				    struct synaptics_data *priv,
+ 				    struct synaptics_hw_state *hw)
+@@ -636,7 +638,7 @@ static int synaptics_parse_hw_state(const unsigned char buf[],
+ 		hw->left  = (buf[0] & 0x01) ? 1 : 0;
+ 		hw->right = (buf[0] & 0x02) ? 1 : 0;
+ 
+-		if (SYN_CAP_FORCEPAD(priv->ext_cap_0c)) {
++		if (is_forcepad) {
+ 			/*
+ 			 * ForcePads, like Clickpads, use middle button
+ 			 * bits to report primary button clicks.
+@@ -1667,11 +1669,29 @@ static const struct dmi_system_id __initconst cr48_dmi_table[] = {
+ 	{ }
+ };
+ 
++static const struct dmi_system_id forcepad_dmi_table[] __initconst = {
++#if defined(CONFIG_DMI) && defined(CONFIG_X86)
++	{
++		.matches = {
++			DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
++			DMI_MATCH(DMI_PRODUCT_NAME, "HP EliteBook Folio 1040 G1"),
++		},
++	},
++#endif
++	{ }
++};
++
+ void __init synaptics_module_init(void)
+ {
+ 	impaired_toshiba_kbc = dmi_check_system(toshiba_dmi_table);
+ 	broken_olpc_ec = dmi_check_system(olpc_dmi_table);
+ 	cr48_profile_sensor = dmi_check_system(cr48_dmi_table);
++
++	/*
++	 * Unfortunately ForcePad capability is not exported over PS/2,
++	 * so we have to resort to checking DMI.
++	 */
++	is_forcepad = dmi_check_system(forcepad_dmi_table);
+ }
+ 
+ static int __synaptics_init(struct psmouse *psmouse, bool absolute_mode)
+diff --git a/drivers/input/mouse/synaptics.h b/drivers/input/mouse/synaptics.h
+index fb2e076738ae..1bd01f21783b 100644
+--- a/drivers/input/mouse/synaptics.h
++++ b/drivers/input/mouse/synaptics.h
+@@ -77,12 +77,9 @@
+  *					for noise.
+  * 2	0x08	image sensor		image sensor tracks 5 fingers, but only
+  *					reports 2.
++ * 2	0x01	uniform clickpad	whole clickpad moves instead of being
++ *					hinged at the top.
+  * 2	0x20	report min		query 0x0f gives min coord reported
+- * 2	0x80	forcepad		forcepad is a variant of clickpad that
+- *					does not have physical buttons but rather
+- *					uses pressure above certain threshold to
+- *					report primary clicks. Forcepads also have
+- *					clickpad bit set.
+  */
+ #define SYN_CAP_CLICKPAD(ex0c)		((ex0c) & 0x100000) /* 1-button ClickPad */
+ #define SYN_CAP_CLICKPAD2BTN(ex0c)	((ex0c) & 0x000100) /* 2-button ClickPad */
+@@ -91,7 +88,6 @@
+ #define SYN_CAP_ADV_GESTURE(ex0c)	((ex0c) & 0x080000)
+ #define SYN_CAP_REDUCED_FILTERING(ex0c)	((ex0c) & 0x000400)
+ #define SYN_CAP_IMAGE_SENSOR(ex0c)	((ex0c) & 0x000800)
+-#define SYN_CAP_FORCEPAD(ex0c)		((ex0c) & 0x008000)
+ 
+ /* synaptics modes query bits */
+ #define SYN_MODE_ABSOLUTE(m)		((m) & (1 << 7))
+-- 
+1.9.3
+
diff --git a/kernel.spec b/kernel.spec
index 9763063..040d73b 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -659,6 +659,9 @@ Patch26056: ext4-fix-race-between-write-and-fcntl-F_SETFL.patch
 #rhbz 1089731
 Patch26058: asus-nb-wmi-Add-wapf4-quirk-for-the-X550VB.patch
 
+#rhbz 1153381
+Patch26059: Input-synaptics-gate-forcepad-support-by-DMI-check.patch
+
 # git clone ssh://git.fedorahosted.org/git/kernel-arm64.git, git diff master...devel
 Patch30000: kernel-arm64.patch
 
@@ -1431,6 +1434,9 @@ ApplyPatch ext4-fix-race-between-write-and-fcntl-F_SETFL.patch
 #rhbz 1089731
 ApplyPatch asus-nb-wmi-Add-wapf4-quirk-for-the-X550VB.patch
 
+#rhbz 1153381
+ApplyPatch Input-synaptics-gate-forcepad-support-by-DMI-check.patch
+
 %if 0%{?aarch64patches}
 ApplyPatch kernel-arm64.patch
 %ifnarch aarch64 # this is stupid, but i want to notice before secondary koji does.
@@ -2300,6 +2306,7 @@ fi
 #                                    ||     ||
 %changelog
 * Wed Oct 22 2014 Josh Boyer <jwboyer at fedoraproject.org>
+- Add patch to fix synaptics forcepad issues (rhbz 1153381)
 - Add patch to fix wifi on X550VB machines (rhbz 1089731)
 
 * Fri Oct 17 2014 Josh Boyer <jwboyer at fedoraproject.org> - 3.17.1-302


More information about the scm-commits mailing list