+++ /dev/null
-From e4e6efd2df4b5754bd519b516207eb723d1f17df Mon Sep 17 00:00:00 2001
-From: Daniel Drake <dsd@laptop.org>
-Date: Thu, 7 Jan 2010 01:52:39 -0800
-Subject: Input: psmouse - fix Synaptics detection when protocol is disabled
-
-From: Daniel Drake <dsd@laptop.org>
-
-commit e4e6efd2df4b5754bd519b516207eb723d1f17df upstream.
-
-For configurations where Synaptics hardware is present but the Synaptics
-extensions support is not compiled in, the mouse is reprobed and a new
-device is allocated on every suspend/resume.
-
-During probe, psmouse_switch_protocol() calls psmouse_extensions() with
-set_properties=1. This calls the dummy synaptics_init() which returns an
-error code, instructing us not to use the synaptics extensions.
-
-During resume, psmouse_reconnect() calls psmouse_extensions() with
-set_properties=0, in which case call to synaptics_init() is bypassed and
-PSMOUSE_SYNAPTICS is returned. Since the result is different from previous
-attempt psmouse_reconnect() fails and full re-probe happens.
-
-Fix this by tweaking the set_properties=0 codepath in psmouse_extensions()
-to be more careful about offering PSMOUSE_SYNAPTICS extensions.
-
-Signed-off-by: Daniel Drake <dsd@laptop.org>
-Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/input/mouse/psmouse-base.c | 9 ++++++++-
- drivers/input/mouse/synaptics.c | 10 ++++++++++
- drivers/input/mouse/synaptics.h | 1 +
- 3 files changed, 19 insertions(+), 1 deletion(-)
-
---- a/drivers/input/mouse/psmouse-base.c
-+++ b/drivers/input/mouse/psmouse-base.c
-@@ -611,8 +611,15 @@ static int psmouse_extensions(struct psm
- synaptics_hardware = true;
-
- if (max_proto > PSMOUSE_IMEX) {
-- if (!set_properties || synaptics_init(psmouse) == 0)
-+/*
-+ * Try activating protocol, but check if support is enabled first, since
-+ * we try detecting Synaptics even when protocol is disabled.
-+ */
-+ if (synaptics_supported() &&
-+ (!set_properties || synaptics_init(psmouse) == 0)) {
- return PSMOUSE_SYNAPTICS;
-+ }
-+
- /*
- * Some Synaptics touchpads can emulate extended protocols (like IMPS/2).
- * Unfortunately Logitech/Genius probes confuse some firmware versions so
---- a/drivers/input/mouse/synaptics.c
-+++ b/drivers/input/mouse/synaptics.c
-@@ -738,6 +738,11 @@ int synaptics_init(struct psmouse *psmou
- return -1;
- }
-
-+bool synaptics_supported(void)
-+{
-+ return true;
-+}
-+
- #else /* CONFIG_MOUSE_PS2_SYNAPTICS */
-
- int synaptics_init(struct psmouse *psmouse)
-@@ -745,5 +750,10 @@ int synaptics_init(struct psmouse *psmou
- return -ENOSYS;
- }
-
-+bool synaptics_supported(void)
-+{
-+ return false;
-+}
-+
- #endif /* CONFIG_MOUSE_PS2_SYNAPTICS */
-
---- a/drivers/input/mouse/synaptics.h
-+++ b/drivers/input/mouse/synaptics.h
-@@ -108,5 +108,6 @@ struct synaptics_data {
- int synaptics_detect(struct psmouse *psmouse, bool set_properties);
- int synaptics_init(struct psmouse *psmouse);
- void synaptics_reset(struct psmouse *psmouse);
-+bool synaptics_supported(void);
-
- #endif /* _SYNAPTICS_H */