Correctly Recognize Alps Touchpad on Dell E6510 in Linux

Laptops which use newer Alps touchpad hardware may experience some lack of functionality as a result of a regression in the kernel psmouse driver — the touchpad is detected and works as a pointing device, but only functions with basic features. Scrolling, disabling tap-to-click, off when typing, and multi-touch (on supported devices) are some of the missing functionality. This appears to be the case with E5510, E6410, M6400, and other Dell (potentially all E2) and some non-Dell models.

From Simon Dierl:

Apparently, newer ALPS touchpads use a new, undocumented and unsupported protocol. The touchpad falls back to a legacy emulation mode, resulting in faulty detections. The kernel.org bug lists some efforts to reverse-engineer the protocol and has some patches based on DELL contributions that enable ImPS/2 emulation (scrolling works). This, however, still does not allow for synaptics support (turn off when typing, horizontal scroll, etc.). Additionally, some people report problems on suspend/resume. [sic]

The best way to notice if you have a machine which is affected by this bug, is to go to System > Preferences > Mouse and look for a Touchpad tab. If it’s absent, you are probably affected by this bug.

Another way to see if you are affected by this bug is to run lsinput and look for something like the following:

/dev/input/event9
bustype : BUS_I8042
vendor  : 0x2
product : 0x1
version : 0
name    : "PS/2 Generic Mouse"
phys    : "isa0060/serio1/input0"
bits ev : EV_SYN EV_KEY EV_REL

The above output shows the touchpad being identified and driven by the PS/2 driver.

This bug has been entered into Launchpad as bug #606238 and has its roots in Kernel bug #14660. Since it’s a mainline kernel bug, it’s likely to affect every Linux distribution. So far, it’s still a work-in-progress and there’s not been an accepted patch submitted to the Linux kernel team. There’s a discussion on ubuntuforums.org that this is a regression, and this was working in older kernel versions.

The below is based on a patch from cmg238 which, at the very least, causes the kernel to correctly recognize the device as a touchpad and enable some missing functionality. I have made adjustments to the instructions for clarity and explanation.

Download kernel source (to /usr/src):

sudo apt-get build-dep --no-install-recommends linux-image-$(uname -r)
apt-get source linux-image-$(uname -r)

(Note: in Ubuntu Precise 12.04, do the following instead, based on this LaunchPad comment)

sudo apt-get build-dep --no-install-recommends linux-image-$(uname -r)
sudo git clone git://github.com/bgamari/linux.git
cd linux
sudo git checkout origin/alps
sudo cp /boot/config-$(uname -r) .config

Also note that on Ubuntu Precise 12.04, you will be asked a bunch of additional questions at make-time. Accept the defaults, unless you have a reason to do otherwise.

Read about how to “undo” an apt-get build-dep and uninstall previously installed packages here.

Patch drivers/input/mouse/alps.c by locating alps_model_info and adding the additional line below, as follows:

static const struct alps_model_info alps_model_data[] = {
	{ { 0x73, 0x02, 0x64 }, 0xcf, 0xcf, ALPS_PASS | ALPS_DUALPOINT | ALPS_PS2_INTERLEAVED }, /* Dell Latitude E6510 */

Compile psmouse.ko module

cd src/drivers/input/mouse
make -C /lib/modules/`uname -r`/build M=`pwd` psmouse.ko

(On Ubuntu Precise 12.04, use the following instead:)

cd /usr/src/linux/drivers/input/mouse
make -C /lib/modules/`uname -r`/build M=`pwd` psmouse.ko

The following steps will cause you to lose mouse functionality until the modprobe psmouse statement. Be prepared. Also, You may want to backup your existing /lib/modules/(kernel version)/kernel/drivers/input/mouse/psmouse.ko before doing this!

rmmod psmouse
cp psmouse.ko /lib/modules/`uname -r`/kernel/drivers/input/mouse/
modprobe psmouse

The last thing to mention is if you update your kernel you will receive the distributed psmouse.ko module. If the kernel does not include a fix for this bug you will need to follow the directions in this post again to recompile the above patch back into the kernel.

Since this is a mainline kernel issue, I would ask that any reader who is able to, please visit the links within this post and contribute where ever you can to help in getting this resolved. You are welcome and encouraged to share your thoughts and feedback in the comments below as well.

About these ads

, , , , , , , , ,

  1. #1 by Debianero on April 21, 2011 - 8:20 am

    Hello. I have a Dell Inspiron M5030 and exactly the same problem. Might this solution work for me? In case no, what should I do?

    Thank you very much for all this information.

    • #2 by Mike on April 21, 2011 - 8:27 am

      I’m not exactly familiar with the hardware used on the M5030, so I couldn’t give you an answer with any certainty. You can try, just make sure you backup your existing psmouse.ko somewhere else on your drive, and are familiar enough with the Linux command line to restore it in case something goes awry.

      • #3 by Debianero on April 21, 2011 - 8:46 am

        Faster than a burger, man. It uses alps touchpad hardware too.

        Well, I’m not familiar with the command line at all, but I’m like a human wreck since I can’t scroll, so the only solution will be to try.

        Actually I don’t have useful data in my Linux partition because I’m only testing how to make it work before migrating definetly.

        Thank you very much again.

        • #4 by Debianero on April 21, 2011 - 8:48 am

          LMDE uses .38 kernel and it has the same problem, so waiting for Natty wouldn’t be a good idea, don’t?

          • #5 by Mike on April 21, 2011 - 9:03 pm

            I’m gathering from everything I’m reading that this is a bug rooted in the Linux kernel, so it affects every current distro. You could wait for Natty, but no information that the fix I mention has been patched into the kernel. My guess is it will still take some time.

            I guess those of us with Alps touchpads are going to have to sit on them a while before we get full functionality.

  2. #6 by Avi Romanoff on April 27, 2011 - 11:52 am

    Mike, thank you _so_ much for doing the detective work and figuring out the roots of this nasty and annoying bug. I’m not very pleased to report that this bug affects my new laptop, a Dell Vostro 3550, running both fully-upgraded Natty and ArchLinux. I’m re-installing Natty as we speak, with the intent of trying out your patch. I’ll definitely post my results here when I do that. I’m very curious, though, how exactly did the person who created the patch work out the correct interface to talk with the driver? I’m a non-professional programmer, but I would very much like to help if I can; and I have a copy of Windows 7 with the working Dell/ALPS driver so I can help reverse-engineer the new protocol if possible.

    Thanks again, here’s to hoping this gets fixed asap ;)

    • #7 by Mike on April 27, 2011 - 12:27 pm

      Avi,

      My sincerest thanks for your comment and your willingness to help on this issue!

      I’m not very pleased to report that this bug affects my new laptop, a Dell Vostro 3550…

      I’m also not pleased that it affects my new E6510 as well. To Dell’s benefit, I believe the blame lies in the Alps hardware and protocol.

      I’m very curious, though, how exactly did the person who created the patch work out the correct interface to talk with the driver?

      I’m not sure exactly. The referenced patch doesn’t have any accompanying documentation or rationale. I can only assume it was either reverse-engineering or brute-forcing.

      I’m a non-professional programmer, but I would very much like to help if I can; and I have a copy of Windows 7 with the working Dell/ALPS driver so I can help reverse-engineer the new protocol if possible.

      I’m sure the Linux community would greatly appreciate the assistance :) I’m not going to share your contact information, but I will encourage you to subscribe to the comments here (if you haven’t already) and engage the developers through the bug trackers referenced above. I’d also encourage anyone else who is reading to share any thoughts here — as well as the bug trackers — so that we can work together to getting this resolved.

      Unfortunately my ability to help is severely limited — I use my laptop as my main computer and I’ve been burned by testing patches in the past.

  3. #8 by Avi Romanoff on April 27, 2011 - 2:16 pm

    :)

    So I’m happy to report that running `lsinput` now reports the following:


    /dev/input/event8
    bustype : BUS_I8042
    vendor : 0x2
    product : 0x5
    version : 29478
    name : "ImPS/2 ALPS DualPoint TouchPad"
    phys : "isa0060/serio1/input0"
    bits ev : EV_SYN EV_KEY EV_REL

    after applying the above patch that is. Seems like a step in the right direction, but nothing outside of the identifier change seems have to be different; everything is still as non-functioning as before, but I don’t think that patch set out to affect that.

    FYI: `uname -a` reports the following:

    Linux hades 2.6.38-8-generic #42-Ubuntu SMP Mon Apr 11 03:31:24 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

    Kudos to the patcher.. so far a success!

    • #9 by Mike on April 27, 2011 - 3:25 pm

      From my limited testing, I was able to do the same. If you look under System > Preferences > Mouse, the Touchpad tab now appears as well. Unfortunately, none of the advanced functions, such as disable touchpad while typing and disabling tap-to-click, work.

      From my understanding this is because the kernel lacks the appropriate Alps-specific protocol extensions. So it looks like we know how to ‘see’ the device correctly, thanks to the patch.

      Hopefully the protocol implementation comes quickly as well :)

  4. #10 by Edward on May 7, 2011 - 3:06 pm

    I’m guessing this is starting to affect many many laptops from a host of manufacturers. Mine is an Acer AO721-3574.

    eherr@quark:~$ dmesg | grep mouse
    mousedev: PS/2 mouse device common for all mice
    eherr@quark:~$ dmesg | grep i8042
    i8042: PNP: PS/2 Controller [PNP0303:KBD0,PNP0f13:PS2M] at 0x60,0x64 irq 1,12
    serio: i8042 KBD port at 0x60,0x64 irq 1
    serio: i8042 AUX port at 0x60,0x64 irq 12
    input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input5
    input: PS/2 Generic Mouse as /devices/platform/i8042/serio1/input/input9
    eherr@quark:~$ xinput --list
    ⎡ Virtual core pointer id=2 [master pointer (3)]
    ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
    ⎜ ↳ PS/2 Generic Mouse id=12 [slave pointer (2)]
    ⎣ Virtual core keyboard id=3 [master keyboard (2)]
    ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
    ↳ Power Button id=6 [slave keyboard (3)]
    ↳ Video Bus id=7 [slave keyboard (3)]
    ↳ Power Button id=8 [slave keyboard (3)]
    ↳ Sleep Button id=9 [slave keyboard (3)]
    ↳ 1.3M WebCam id=10 [slave keyboard (3)]
    ↳ AT Translated Set 2 keyboard id=11 [slave keyboard (3)]
    ↳ Acer WMI hotkeys id=13 [slave keyboard (3)]

  5. #11 by Jacob Greenstein on June 27, 2011 - 3:56 am

    Thank you very much! This patch resolved a similar issue I had with Dell Latitude E6250 (Fedora 15, kernel 2.6.38.8).

    • #12 by Mike on June 27, 2011 - 8:21 am

      @Jacob

      E6250? Did you mean the E6520?

  6. #13 by ed on October 19, 2011 - 8:18 pm

    I have this exact same problem with my HP dm3. It’s my main machine and I have recently abandoned windows. While I have been using linux for about a year the touchpad scrolling problem has been one that I have not been able to fix. Today I decided to solve it once and for all. Not much luck to be had, except for these patches. I am very interested in hearing if it works. But as I don’t want to mess things up I would like to know does the fact that it’s no longer regarded as ps/2 mean that 2finger scrolling will work?

    http://pj.freefaculty.org/blog/alps-touchpad-linux-final-statement-now

    https://bugs.launchpad.net/ubuntu/+source/linux/+bug/565543

    All the best. I hope this eventually gets fixed for good.

    • #14 by Mike on January 1, 2012 - 12:59 am

      Unfortunately, even when using the patch above, multi-touch (two finger) does not work.

      I am positive the hardware supports it because it works in Windows with the drivers, but does not in Linux. The lack of proper Linux Alps driver support is the issue.

  7. #15 by vainssanlt on December 31, 2011 - 7:37 am

    Congratulations and Thanks!!
    This patch works perfectly on a Dell E6320 using kernel 3.0.4

    PS. happy new year 2012…

    • #16 by Mike on January 1, 2012 - 12:55 am

      Happy New Year indeed! Thank you, and I’m glad to hear it’s working for you.

  8. #17 by ben on January 17, 2012 - 5:39 pm

    I tried just about everything ON EARTH to solve this problem, and FINALLY there is a .deb that someone put together that solved the problem on my dell N5030. I saw in a different discussion thread that people had success with psmouse-alps-dkms_0.10_all.deb which I installed and my touchpad is FINALLY now recognized with full scroll and tap-to-click configurability enabled. So for anyone using a debian-based release, give it a try

  9. #18 by victor on August 19, 2012 - 10:40 pm

    Hello. I’m running Mint 13 kernel 3.2.0-23-generic, (no scrolling, no touchpad detected). When i run the first command, i get this error: E: You must put some ‘source’ URIs in your sources.list
    help??

  10. #19 by victor on August 20, 2012 - 12:51 am

    Ok, I fixed that but now im getting

    Picking ‘linux’ as source package instead of ‘linux-image-3.2.0-23-generic’
    E: Unable to find a source package for linux

  11. #20 by pemar1986 on March 25, 2013 - 8:32 pm

    https://docs.google.com/file/d/0B15E7g2uSFyuTmNFUkc2NW9fUzg/edit?usp=sharing

    Descargen este .deb que solo funciona en sistema a 64bits.

    Despues instalen java jre para su respectiva configuracion.

  1. Correctly Recognize Alps Touchpad on Dell E6510 in Linux » Mike Beach | Linux Affinity
Follow

Get every new post delivered to your Inbox.

%d bloggers like this: