|
@@ -24,6 +24,7 @@
|
|
*/
|
|
*/
|
|
|
|
|
|
#include <linux/module.h>
|
|
#include <linux/module.h>
|
|
|
|
+#include <linux/dmi.h>
|
|
#include <linux/input.h>
|
|
#include <linux/input.h>
|
|
#include <linux/serio.h>
|
|
#include <linux/serio.h>
|
|
#include <linux/libps2.h>
|
|
#include <linux/libps2.h>
|
|
@@ -629,9 +630,10 @@ static int synaptics_reconnect(struct psmouse *psmouse)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-#if defined(__i386__)
|
|
|
|
-#include <linux/dmi.h>
|
|
|
|
-static const struct dmi_system_id toshiba_dmi_table[] = {
|
|
|
|
|
|
+static bool impaired_toshiba_kbc;
|
|
|
|
+
|
|
|
|
+static const struct dmi_system_id __initconst toshiba_dmi_table[] = {
|
|
|
|
+#if defined(CONFIG_DMI) && defined(CONFIG_X86)
|
|
{
|
|
{
|
|
.ident = "Toshiba Satellite",
|
|
.ident = "Toshiba Satellite",
|
|
.matches = {
|
|
.matches = {
|
|
@@ -664,8 +666,13 @@ static const struct dmi_system_id toshiba_dmi_table[] = {
|
|
|
|
|
|
},
|
|
},
|
|
{ }
|
|
{ }
|
|
-};
|
|
|
|
#endif
|
|
#endif
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+void __init synaptics_module_init(void)
|
|
|
|
+{
|
|
|
|
+ impaired_toshiba_kbc = dmi_check_system(toshiba_dmi_table);
|
|
|
|
+}
|
|
|
|
|
|
int synaptics_init(struct psmouse *psmouse)
|
|
int synaptics_init(struct psmouse *psmouse)
|
|
{
|
|
{
|
|
@@ -718,18 +725,16 @@ int synaptics_init(struct psmouse *psmouse)
|
|
if (SYN_CAP_PASS_THROUGH(priv->capabilities))
|
|
if (SYN_CAP_PASS_THROUGH(priv->capabilities))
|
|
synaptics_pt_create(psmouse);
|
|
synaptics_pt_create(psmouse);
|
|
|
|
|
|
-#if defined(__i386__)
|
|
|
|
/*
|
|
/*
|
|
* Toshiba's KBC seems to have trouble handling data from
|
|
* Toshiba's KBC seems to have trouble handling data from
|
|
* Synaptics as full rate, switch to lower rate which is roughly
|
|
* Synaptics as full rate, switch to lower rate which is roughly
|
|
* thye same as rate of standard PS/2 mouse.
|
|
* thye same as rate of standard PS/2 mouse.
|
|
*/
|
|
*/
|
|
- if (psmouse->rate >= 80 && dmi_check_system(toshiba_dmi_table)) {
|
|
|
|
|
|
+ if (psmouse->rate >= 80 && impaired_toshiba_kbc) {
|
|
printk(KERN_INFO "synaptics: Toshiba %s detected, limiting rate to 40pps.\n",
|
|
printk(KERN_INFO "synaptics: Toshiba %s detected, limiting rate to 40pps.\n",
|
|
dmi_get_system_info(DMI_PRODUCT_NAME));
|
|
dmi_get_system_info(DMI_PRODUCT_NAME));
|
|
psmouse->rate = 40;
|
|
psmouse->rate = 40;
|
|
}
|
|
}
|
|
-#endif
|
|
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
@@ -740,6 +745,10 @@ int synaptics_init(struct psmouse *psmouse)
|
|
|
|
|
|
#else /* CONFIG_MOUSE_PS2_SYNAPTICS */
|
|
#else /* CONFIG_MOUSE_PS2_SYNAPTICS */
|
|
|
|
|
|
|
|
+void __init synaptics_module_init(void)
|
|
|
|
+{
|
|
|
|
+}
|
|
|
|
+
|
|
int synaptics_init(struct psmouse *psmouse)
|
|
int synaptics_init(struct psmouse *psmouse)
|
|
{
|
|
{
|
|
return -ENOSYS;
|
|
return -ENOSYS;
|