aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/mouse
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-03-02 18:43:03 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2009-03-02 18:43:03 -0500
commit6b3bf2049180c4d4d6f4432f9148621410c179a9 (patch)
tree4f8d936d792ef3740d40189053155f7be331f7b0 /drivers/input/mouse
parent36b31106b725ac2ca4941d4ee8dbb67df72ed5dd (diff)
parent9ab7b25e6a30d2292bd6d4913b71c918ee1e21b4 (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: Input: elantech - touchpad driver miss-recognising logitech mice Input: synaptics - ensure we reset the device on resume Input: usbtouchscreen - fix eGalax HID ignoring Input: ambakmi - fix timeout handling in amba_kmi_write() Input: pxa930_trkball - fix write timeout handling Input: struct device - replace bus_id with dev_name(), dev_set_name() Input: bf54x-keys - fix debounce time validation Input: spitzkbd - mark probe function as __devinit Input: omap-keypad - mark probe function as __devinit Input: corgi_ts - mark probe function as __devinit Input: corgikbd - mark probe function as __devinit Input: uvc - the button on the camera is KEY_CAMERA Input: psmouse - make MOUSE_PS2_LIFEBOOK depend on X86 Input: atkbd - make forced_release_keys[] static Input: usbtouchscreen - allow reporting calibrated data
Diffstat (limited to 'drivers/input/mouse')
-rw-r--r--drivers/input/mouse/Kconfig2
-rw-r--r--drivers/input/mouse/elantech.c32
-rw-r--r--drivers/input/mouse/pxa930_trkball.c2
-rw-r--r--drivers/input/mouse/synaptics.c9
4 files changed, 30 insertions, 15 deletions
diff --git a/drivers/input/mouse/Kconfig b/drivers/input/mouse/Kconfig
index 093c8c1bca74..9705f3a00a3d 100644
--- a/drivers/input/mouse/Kconfig
+++ b/drivers/input/mouse/Kconfig
@@ -70,7 +70,7 @@ config MOUSE_PS2_SYNAPTICS
70config MOUSE_PS2_LIFEBOOK 70config MOUSE_PS2_LIFEBOOK
71 bool "Fujitsu Lifebook PS/2 mouse protocol extension" if EMBEDDED 71 bool "Fujitsu Lifebook PS/2 mouse protocol extension" if EMBEDDED
72 default y 72 default y
73 depends on MOUSE_PS2 73 depends on MOUSE_PS2 && X86
74 help 74 help
75 Say Y here if you have a Fujitsu B-series Lifebook PS/2 75 Say Y here if you have a Fujitsu B-series Lifebook PS/2
76 TouchScreen connected to your system. 76 TouchScreen connected to your system.
diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
index b9a25d57bc5e..6ab0eb1ada1c 100644
--- a/drivers/input/mouse/elantech.c
+++ b/drivers/input/mouse/elantech.c
@@ -542,7 +542,7 @@ int elantech_detect(struct psmouse *psmouse, int set_properties)
542 ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) || 542 ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) ||
543 ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) || 543 ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) ||
544 ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO)) { 544 ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO)) {
545 pr_err("elantech.c: sending Elantech magic knock failed.\n"); 545 pr_debug("elantech.c: sending Elantech magic knock failed.\n");
546 return -1; 546 return -1;
547 } 547 }
548 548
@@ -551,8 +551,27 @@ int elantech_detect(struct psmouse *psmouse, int set_properties)
551 * set of magic numbers 551 * set of magic numbers
552 */ 552 */
553 if (param[0] != 0x3c || param[1] != 0x03 || param[2] != 0xc8) { 553 if (param[0] != 0x3c || param[1] != 0x03 || param[2] != 0xc8) {
554 pr_info("elantech.c: unexpected magic knock result 0x%02x, 0x%02x, 0x%02x.\n", 554 pr_debug("elantech.c: "
555 param[0], param[1], param[2]); 555 "unexpected magic knock result 0x%02x, 0x%02x, 0x%02x.\n",
556 param[0], param[1], param[2]);
557 return -1;
558 }
559
560 /*
561 * Query touchpad's firmware version and see if it reports known
562 * value to avoid mis-detection. Logitech mice are known to respond
563 * to Elantech magic knock and there might be more.
564 */
565 if (synaptics_send_cmd(psmouse, ETP_FW_VERSION_QUERY, param)) {
566 pr_debug("elantech.c: failed to query firmware version.\n");
567 return -1;
568 }
569
570 pr_debug("elantech.c: Elantech version query result 0x%02x, 0x%02x, 0x%02x.\n",
571 param[0], param[1], param[2]);
572
573 if (param[0] == 0 || param[1] != 0) {
574 pr_debug("elantech.c: Probably not a real Elantech touchpad. Aborting.\n");
556 return -1; 575 return -1;
557 } 576 }
558 577
@@ -600,8 +619,7 @@ int elantech_init(struct psmouse *psmouse)
600 int i, error; 619 int i, error;
601 unsigned char param[3]; 620 unsigned char param[3];
602 621
603 etd = kzalloc(sizeof(struct elantech_data), GFP_KERNEL); 622 psmouse->private = etd = kzalloc(sizeof(struct elantech_data), GFP_KERNEL);
604 psmouse->private = etd;
605 if (!etd) 623 if (!etd)
606 return -1; 624 return -1;
607 625
@@ -610,14 +628,12 @@ int elantech_init(struct psmouse *psmouse)
610 etd->parity[i] = etd->parity[i & (i - 1)] ^ 1; 628 etd->parity[i] = etd->parity[i & (i - 1)] ^ 1;
611 629
612 /* 630 /*
613 * Find out what version hardware this is 631 * Do the version query again so we can store the result
614 */ 632 */
615 if (synaptics_send_cmd(psmouse, ETP_FW_VERSION_QUERY, param)) { 633 if (synaptics_send_cmd(psmouse, ETP_FW_VERSION_QUERY, param)) {
616 pr_err("elantech.c: failed to query firmware version.\n"); 634 pr_err("elantech.c: failed to query firmware version.\n");
617 goto init_fail; 635 goto init_fail;
618 } 636 }
619 pr_info("elantech.c: Elantech version query result 0x%02x, 0x%02x, 0x%02x.\n",
620 param[0], param[1], param[2]);
621 etd->fw_version_maj = param[0]; 637 etd->fw_version_maj = param[0];
622 etd->fw_version_min = param[2]; 638 etd->fw_version_min = param[2];
623 639
diff --git a/drivers/input/mouse/pxa930_trkball.c b/drivers/input/mouse/pxa930_trkball.c
index d297accf9a7f..1e827ad0afbe 100644
--- a/drivers/input/mouse/pxa930_trkball.c
+++ b/drivers/input/mouse/pxa930_trkball.c
@@ -83,7 +83,7 @@ static int write_tbcr(struct pxa930_trkball *trkball, int v)
83 83
84 __raw_writel(v, trkball->mmio_base + TBCR); 84 __raw_writel(v, trkball->mmio_base + TBCR);
85 85
86 while (i--) { 86 while (--i) {
87 if (__raw_readl(trkball->mmio_base + TBCR) == v) 87 if (__raw_readl(trkball->mmio_base + TBCR) == v)
88 break; 88 break;
89 msleep(1); 89 msleep(1);
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
index 865fc69e9bc3..f3e4f7b0240d 100644
--- a/drivers/input/mouse/synaptics.c
+++ b/drivers/input/mouse/synaptics.c
@@ -182,11 +182,6 @@ static int synaptics_identify(struct psmouse *psmouse)
182 182
183static int synaptics_query_hardware(struct psmouse *psmouse) 183static int synaptics_query_hardware(struct psmouse *psmouse)
184{ 184{
185 int retries = 0;
186
187 while ((retries++ < 3) && psmouse_reset(psmouse))
188 /* empty */;
189
190 if (synaptics_identify(psmouse)) 185 if (synaptics_identify(psmouse))
191 return -1; 186 return -1;
192 if (synaptics_model_id(psmouse)) 187 if (synaptics_model_id(psmouse))
@@ -582,6 +577,8 @@ static int synaptics_reconnect(struct psmouse *psmouse)
582 struct synaptics_data *priv = psmouse->private; 577 struct synaptics_data *priv = psmouse->private;
583 struct synaptics_data old_priv = *priv; 578 struct synaptics_data old_priv = *priv;
584 579
580 psmouse_reset(psmouse);
581
585 if (synaptics_detect(psmouse, 0)) 582 if (synaptics_detect(psmouse, 0))
586 return -1; 583 return -1;
587 584
@@ -640,6 +637,8 @@ int synaptics_init(struct psmouse *psmouse)
640 if (!priv) 637 if (!priv)
641 return -1; 638 return -1;
642 639
640 psmouse_reset(psmouse);
641
643 if (synaptics_query_hardware(psmouse)) { 642 if (synaptics_query_hardware(psmouse)) {
644 printk(KERN_ERR "Unable to query Synaptics hardware.\n"); 643 printk(KERN_ERR "Unable to query Synaptics hardware.\n");
645 goto init_fail; 644 goto init_fail;