Fixing an erratic or unresponsive touchpad

I have a Dell Inspiron 4100 that suffers from an unresponsive or erratic Synaptics touchpad under linux. Sometimes the mouse pointer begins to lag behind as if there is a lot of latency and the mouse buttons must be pressed several times before they work. Other times the mouse just jumps around or even stops moving.

From what I have found on the net, some other Dell laptops seem to have the same problem.

The problem is the track point

Now, this laptop has a Synaptics touchpad with a pass-through track point. The track point evidently gets stuck somehow and begins spewing interrupts, causing all these problems. This can be seen by inspecting /proc/interrupts. When the problems occur, the number of interrupts, for irq 12 and an i8042 on this machine, grows to almost 600 per second. Normally, interrupts only happen when I move the mouse.

Don't initialize the track point

To solve the problem in the 2.6.12 kernel (and in kernels before 2.6.11), comment out the track point initialization in drivers/input/mouse/synaptics.c: int synaptics_init(struct psmouse *psmouse). Specifically, comment out the two lines:

          if (SYN_CAP_PASS_THROUGH(priv->capabilities))

In the 2.6.11 kernel, deactivate any pass-through ports in the psmouse_activate function in drivers/input/mouse/psmouse-base.c. You should also move the psmouse_deactivate function before psmouse_activate.

        static void psmouse_activate(struct psmouse *psmouse)
	        /* Deactivate all pass-through ports */
                struct serio *serio = psmouse->ps2dev.serio;
                if ((serio->type & SERIO_TYPE) == SERIO_PS_PSTHRU) {

        	if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE))
        		printk(KERN_WARNING "psmouse.c: Failed to enable mouse on %s\n",

        	psmouse_set_state(psmouse, PSMOUSE_ACTIVATED);

I have had this problem since 2.4 something. Before I knew of the Synaptics driver for X, the mouse just went off to one side of the screen and stayed there.