diff mbox

[resend] Input: psmouse - Fix a synaptics protocol detection mistake

Message ID 20100103145633.E2E9C9D400D@zog.reactivated.net (mailing list archive)
State New, archived
Headers show

Commit Message

Daniel Drake Jan. 3, 2010, 2:56 p.m. UTC
None
diff mbox

Patch

diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
index 401ac6b..613a55a 100644
--- a/drivers/input/mouse/psmouse-base.c
+++ b/drivers/input/mouse/psmouse-base.c
@@ -627,8 +627,12 @@  static int psmouse_extensions(struct psmouse *psmouse,
 		synaptics_hardware = true;
 
 		if (max_proto > PSMOUSE_IMEX) {
-			if (!set_properties || synaptics_init(psmouse) == 0)
+			/* be careful to only offer the synaptics protocol for use when
+			 * the support is available */
+			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
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
index 05689e7..b4d38f5 100644
--- a/drivers/input/mouse/synaptics.c
+++ b/drivers/input/mouse/synaptics.c
@@ -743,6 +743,11 @@  int synaptics_init(struct psmouse *psmouse)
 	return -1;
 }
 
+int synaptics_supported(void)
+{
+	return 1;
+}
+
 #else /* CONFIG_MOUSE_PS2_SYNAPTICS */
 
 void __init synaptics_module_init(void)
@@ -754,5 +759,10 @@  int synaptics_init(struct psmouse *psmouse)
 	return -ENOSYS;
 }
 
+int synaptics_supported(void)
+{
+	return 0;
+}
+
 #endif /* CONFIG_MOUSE_PS2_SYNAPTICS */
 
diff --git a/drivers/input/mouse/synaptics.h b/drivers/input/mouse/synaptics.h
index 838e7f2..d53ffe6 100644
--- a/drivers/input/mouse/synaptics.h
+++ b/drivers/input/mouse/synaptics.h
@@ -109,5 +109,6 @@  void synaptics_module_init(void);
 int synaptics_detect(struct psmouse *psmouse, bool set_properties);
 int synaptics_init(struct psmouse *psmouse);
 void synaptics_reset(struct psmouse *psmouse);
+int synaptics_supported(void);
 
 #endif /* _SYNAPTICS_H */