ALPS touchpad ot correctly recognized: GlidePoint vs DualPoint

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dear Kernel Hackers,

I hope this is the correct place to post this. If not, please forgive me
and feel free to forward it to someplace else. Thank you very much!

I have a ThinkPad with a touchpad that looks exactly like this:
https://www.camerongray.me/wp-content/uploads/2015/02/SCotlGg.jpg

The three pyhsical buttons on top do not work on my debian stretch
(4.9). I think it isn't being recognized correctly. I see a "Rejected
trackstick packet from non DualPoint device" in my syslog whenever I
click on one of them. On the other hand on a Ubuntu 16.04 (4.4 - patched
by Ubuntu y guess) the buttons *do* work. Interestingly enough, it
doesn't work on 17.04 (4.10).

I have noticed that the touchpad gets assigned different names on both
distros. On debian it is recognized as a GlidePoint and on Ubuntu as a
DualPoint. In an upstream kernel 4.13 which I just built, it's also
recognized as a GlidePoint. Unfortunately it doesn't work either.

I am not sure if the device is actually a DualPoint or not (I don't
really understand the terminology here), but the thing is that the
buttons work when the kernel believes it to be one.

This is the info I have managed to find about the device while running
on the non-working debian:

dmesg:
[    2.914806] input: AlpsPS/2 ALPS GlidePoint as
/devices/platform/i8042/serio1/input/input2

lsinput:
/dev/input/event11
   bustype : BUS_I8042
   vendor  : 0x2
   product : 0x8
   version : 1792
   name    : "AlpsPS/2 ALPS GlidePoint"
   phys    : "isa0060/serio1/input0"
   bits ev : (null) (null) (null)

I have played around with the drivers/input/mouse/alps.c file and found
out the following:

e7 and ec are important (although I don't know what these are exactly)
and have the following values:

e7: 73 03 0a
ec: 88 b0 13

This combination is recognized as an ALPS touchpad, but isn't assigned
the ALPS_DUALPOINT flag. As far as I can see, it is actually being
*removed* at this point:

if (alps_probe_trackstick_v3_v7(psmouse, ALPS_REG_BASE_V7) < 0)
            priv->flags &= ~ALPS_DUALPOINT;

The bit that says it has a trackpoint (I don't know what this is) is
apparently saying my device doesn't have one and is removing the
ALPS_DUALPOINT flag.

This flag makes the buttons work. I am not sure if it breaks other stuff.

I have written a pretty dummy patch which actually adds the flag again
making the buttons work. Again, I am not sure if it breaks other stuff
but my system isn't whining. Here is the patch:

diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
index 850b00e3ad8e..17aba42e846f 100644
--- a/drivers/input/mouse/alps.c
+++ b/drivers/input/mouse/alps.c
@@ -2804,6 +2804,9 @@ static int alps_set_protocol(struct psmouse *psmouse,
                if (alps_probe_trackstick_v3_v7(psmouse,
ALPS_REG_BASE_V7) < 0)
                        priv->flags &= ~ALPS_DUALPOINT;

+               if (priv->fw_ver[1] == 0xb0)
+                       priv->flags |= ALPS_DUALPOINT;
+
                break;

        case ALPS_PROTO_V8:

After applying this patch dmesg and lsinput say this:

[    8.226543] input: AlpsPS/2 ALPS DualPoint Stick as
/devices/platform/i8042/serio1/input/input13
[    8.247595] input: AlpsPS/2 ALPS DualPoint TouchPad as
/devices/platform/i8042/serio1/input/input2

/dev/input/event11
   bustype : BUS_I8042
   vendor  : 0x2
   product : 0x8
   version : 1792
   name    : "AlpsPS/2 ALPS DualPoint Stick"
   phys    : "isa0060/serio1/input1"
   bits ev : (null) (null) (null)

/dev/input/event12
   bustype : BUS_I8042
   vendor  : 0x2
   product : 0x8
   version : 1792
   name    : "AlpsPS/2 ALPS DualPoint TouchPad"
   phys    : "isa0060/serio1/input0"
   bits ev : (null) (null) (null)

I am a total newbie to kernels and drivers so it would be great if
somebody who actually had some idea could take a look at this and
probably create a patch in a better place. I'll be glad to post more
info if necessary.

Thank you very much!

Cheers,
Juanito

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux