Skip to contentSkip to conversation

Elantech touchpad detected as Logitech PS2 Wheel Mouse

DISCUSSION Nicola Alessi 3 participants 7 messages May 20, 2012 – May 21, 2012

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

Hi,

I'm running debian wheezy with latest kernel (uname -a gives me: Linux ehehehpc 3.2.0-2-686-pae #1 SMP Sun May 13 07:51:23 UTC 2012 i686 GNU/Linux).
While I'm expecting the kernel to correctly detect my touchpad, it's detected as a mouse. No scrolling, no multitouch.
Below there's a snippet of my /proc/bus/input/devices:

[...]
I: Bus=0011 Vendor=0002 Product=0001 Version=0063
N: Name="PS/2 Logitech Wheel Mouse"
P: Phys=isa0060/serio4/input0
S: Sysfs=/devices/platform/i8042/serio4/input/input7
U: Uniq=
H: Handlers=mouse0 event7
B: PROP=0
B: EV=7
B: KEY=70000 0 0 0 0 0 0 0 0
B: REL=103
[...]

The notebook I'm using is a Fujitsu Siemens Amilo pi2515. I also tried kernel version 3.3.6 with same results. In both cases grep ELANTECH .config gives me:

CONFIG_MOUSE_PS2_ELANTECH=y

so I suppose it shouldn't be a kernel configuration problem. I opened a bug on http://bugs.debian.org/673588
You can find more information and preliminary testing there. Thank you very much for your attention.
Regards.

Nicola

#1 lore raw
Quoted 3 lines · Nicola Alessi

While I'm expecting the kernel to correctly detect my touchpad, it's detected as a mouse. No scrolling, no multitouch.
Below there's a snippet of my /proc/bus/input/devices:

Kernel log:

http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=15;filename=dmesg.txt;att=3;bug=673588

[...]

Quoted 2 lines

The notebook I'm using is a Fujitsu Siemens Amilo pi2515. I also tried kernel version 3.3.6 with same results.

Can you get a log with the following patch applied?

Thanks,
Jonathan

drivers/input/mouse/elantech.c +1 -0
index d2c0db159b18..a1d59e11e2d3 100644
@@ -10,6 +10,7 @@
  * Trademarks are the property of their respective owners.
  */
 
+#define DEBUG
 #include <linux/delay.h>
 #include <linux/slab.h>
 #include <linux/module.h>
#2 lore raw

I applied the patch. Now my kernel (3.3.6) log says:

[    6.734445] psmouse serio4: elantech: unexpected magic knock result

0x3c, 0x03, 0x3c.

I hope this can help.

Nicola

Il 20/05/12 21:20, Jonathan Nieder ha scritto:

Quoted 17 lines

Can you get a log with the following patch applied?

Thanks,
Jonathan

drivers/input/mouse/elantech.c +1 -0
index d2c0db159b18..a1d59e11e2d3 100644
@@ -10,6 +10,7 @@
  * Trademarks are the property of their respective owners.
  */
 
+#define DEBUG
 #include <linux/delay.h>
 #include <linux/slab.h>
 #include <linux/module.h>
#3 lore raw
Quoted 3 lines · Nicola Alessi
[    6.734445] psmouse serio4: elantech: unexpected magic knock result 0x3c, 0x03, 0x3c.

I hope this can help.

Yes, thanks much.

One more question: how do you know this touchpad is an Elantech pad? E.g., is there another OS with a driver that detects it as Elantech?

Based on [1] it seems the Amilo Pi 2515 ships with a variety of different touchpad models.

Jonathan

[1] https://bugzilla.kernel.org/show_bug.cgi?id=10942

#4 lore raw

Hi Jonathan and Nicola,

Quoted 4 lines · Jonathan Nieder
Quoted 2 lines · Nicola Alessi
[    6.734445] psmouse serio4: elantech: unexpected magic knock

result 0x3c, 0x03, 0x3c.

           ^^^^^^^^^^^^^^^^^

Yes, from this, the touchpad is probably Elan.

But it is meant to be used as such, a basic pointing device. Some NB vendors may not require the multi-finger functions, for cost reason or others. Elan touchpad reports this magic knock when it only supports the basic mouse functions. With these touchpads, the multi-finger functons are NOT TESTED and thus NOT SUPPORTED.

We used to have a "force_elantech" module param to force the TP to be detected as Elan, but I removed it when I was updating elantech.c to support newer models. Maybe you can convince Dmitry to add it back, but still, this kind of Elan touchpads is not supported as multi-touch pointing device, so I wouldn't recommand it.

I hope this helps.

Best regards,
-JJ

Quoted 14 lines
Quoted 2 lines

I hope this can help.

Yes, thanks much.

One more question: how do you know this touchpad is an Elantech pad? E.g., is there another OS with a driver that detects it as Elantech?

Based on [1] it seems the Amilo Pi 2515 ships with a variety of different touchpad models.

Jonathan

[1] https://bugzilla.kernel.org/show_bug.cgi?id=10942

#5 lore raw
Quoted 5 lines · JJ Ding

We used to have a "force_elantech" module param to force the TP to be detected as Elan, but I removed it when I was updating elantech.c to support newer models. Maybe you can convince Dmitry to add it back, but still, this kind of Elan touchpads is not supported as multi-touch pointing device, so I wouldn't recommand it.

Neat.

Quoted 1 line

I hope this helps.

Definitely; thanks for explaining. Nicola, I'm still curious about the following:

Quoted 1 line
Quoted 1 line

E.g., is there another OS with a driver that detects it as Elantech?

If another OS offers more functionality, then we would know the hardware is capable of it.

The patch JJ described follows, in case you want to experiment.

-- >8 --
Subject: Input: elantech - allow forcing Elantech protocol when knock fails

This does not quite revert 4af61e90270e35bafa9e99a3c48fb3f363da592d ("Input: elantech - remove module parameter force_elantech") --- the old force_elantech parameter was about ignoring an unrecognized response to ETP_FW_VERSION_QUERY, while this one is about ignoring unrecognized responses to the magic knock.

This patch is just for experimentation and is not meant for inclusion.

---
 drivers/input/mouse/elantech.c |   16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)
drivers/input/mouse/elantech.c +12 -4
index d2c0db159b18..55ac1aa5e943 100644
@@ -27,6 +27,10 @@
 					fmt, ##__VA_ARGS__);		\
 	} while (0)
 
+static bool force_elantech;
+module_param_named(force_elantech, force_elantech, bool, 0644);
+MODULE_PARM_DESC(force_elantech, "Force the Elantech PS/2 protocol extension to be used, 1 = enabled, 0 = disabled (default).");
+
 /*
  * Send a Synaptics style sliced query command
  */
@@ -1195,10 +1199,14 @@ int elantech_detect(struct psmouse *psmouse, bool set_properties)
 	 */
 	if (param[0] != 0x3c || param[1] != 0x03 ||
 	    (param[2] != 0xc8 && param[2] != 0x00)) {
-		psmouse_dbg(psmouse,
-			    "unexpected magic knock result 0x%02x, 0x%02x, 0x%02x.\n",
-			    param[0], param[1], param[2]);
-		return -1;
+		if (!force_elantech) {
+			psmouse_dbg(psmouse,
+				    "unexpected magic knock result 0x%02x, 0x%02x, 0x%02x.\n",
+				    param[0], param[1], param[2]);
+			return -1;
+		}
+		psmouse_warning(psmouse, "Unexpected magic knock result.\n");
+		psmouse_info(psmouse, "Enabling anyway due to force_elantech.\n");
 	}
 
 	/*
Signature · 1 line
1.7.10.2
#6 lore raw

Hi,

I'd like to thank you all for the time you dedicated to this problem. I'll try to experiment with the patch and I'll report if something interesting happens.

@Jonathan: there are two things that make me think to have a elantech touchpad. First, a sticker from the manufacturer below laptop's battery pack (in the slot, you can see it only if you remove the battery) labeled "ELANTEK". Second, I think more important, I've played around (about two months ago) with dkms and patches to psmouse. More in detail, I tried the patch from Seth Forshee (see
https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/681904/comments/111).
Through it didn't fix the issue (the touchpad was totally unusable due to continuous "sync lost" messages) the touchpad was recognized as an elantech (I don't remember the details, but I could try to build the module again and mail some info).

Thanks again,

Nicola

Il 21/05/12 10:28, Jonathan Nieder ha scritto:

Quoted 70 lines
Quoted 5 lines · JJ Ding

We used to have a "force_elantech" module param to force the TP to be detected as Elan, but I removed it when I was updating elantech.c to support newer models. Maybe you can convince Dmitry to add it back, but still, this kind of Elan touchpads is not supported as multi-touch pointing device, so I wouldn't recommand it.

Neat.

Quoted 1 line

I hope this helps.

Definitely; thanks for explaining. Nicola, I'm still curious about the following:

Quoted 1 line
Quoted 1 line

E.g., is there another OS with a driver that detects it as Elantech?

If another OS offers more functionality, then we would know the hardware is capable of it.

The patch JJ described follows, in case you want to experiment.

-- >8 --
Subject: Input: elantech - allow forcing Elantech protocol when knock fails

This does not quite revert 4af61e90270e35bafa9e99a3c48fb3f363da592d ("Input: elantech - remove module parameter force_elantech") --- the old force_elantech parameter was about ignoring an unrecognized response to ETP_FW_VERSION_QUERY, while this one is about ignoring unrecognized responses to the magic knock.

This patch is just for experimentation and is not meant for inclusion.

---
 drivers/input/mouse/elantech.c |   16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)
drivers/input/mouse/elantech.c +12 -4
index d2c0db159b18..55ac1aa5e943 100644
@@ -27,6 +27,10 @@
 					fmt, ##__VA_ARGS__);		\
 	} while (0)
 
+static bool force_elantech;
+module_param_named(force_elantech, force_elantech, bool, 0644);
+MODULE_PARM_DESC(force_elantech, "Force the Elantech PS/2 protocol extension to be used, 1 = enabled, 0 = disabled (default).");
+
 /*
  * Send a Synaptics style sliced query command
  */
@@ -1195,10 +1199,14 @@ int elantech_detect(struct psmouse *psmouse, bool set_properties)
 	 */
 	if (param[0] != 0x3c || param[1] != 0x03 ||
 	    (param[2] != 0xc8 && param[2] != 0x00)) {
-		psmouse_dbg(psmouse,
-			    "unexpected magic knock result 0x%02x, 0x%02x, 0x%02x.\n",
-			    param[0], param[1], param[2]);
-		return -1;
+		if (!force_elantech) {
+			psmouse_dbg(psmouse,
+				    "unexpected magic knock result 0x%02x, 0x%02x, 0x%02x.\n",
+				    param[0], param[1], param[2]);
+			return -1;
+		}
+		psmouse_warning(psmouse, "Unexpected magic knock result.\n");
+		psmouse_info(psmouse, "Enabling anyway due to force_elantech.\n");
 	}
 
 	/*