2003-05-01 21:48:21 UTC
it is my very first posting to this mailing list ...
I have written a *very small* patch against the linux 2.4.20 kernel and
I want to submit it now.
The short story
The trackpad on the MacIntosh iBook Notebooks have a feature that
prevents unintended trackpad input while typing on the keyboard. There
are no mouse-moves or mouse-taps for a short period of time after each
I believe that many people with i386 notebooks would like this feature
and I want to give it to the linux community.
First I had the idea of writing a loadable kernel module "trackpad" that
implements that feature and is loadable via
insmod keybd_irq=? mouse_irq=? delay=?
The long story
My first approach was - because I came from the bad old M$-DOS times -
write something like a "terminate and stay resident program"
Save the currentlly installed handlers for keyboard and mouse.
Install your own interrupt handlers for keyboard and mouse.
Stop and remove "reset-timer" if necessary
Restore the saved interrupt handlers for keyboard and mouse
Stop or modify "reset-timer" if necessary
Set global variable block_mouse_events=1
Start a timer that resets block_mouse_events=0 after ??? mSec
Call the old keyboard interrupt handler
if block_mouse_events>0 then
call ACK(mouse irq) if necessary
call old mouse interrupt handler
So I bought the book "Linux Device Drivers" written by Alessandro Rubini
& Jonathan Corbert. It is an excellent book about LKM, but I couldn't
find a way to "save and restore" irq-handlers as in the design
That's why I requested a little help in the newsgroup at
comp.os.linux.development.system. This ended up with some people who
said "don't mess around with irq-handlers in that way".
While trying to gain a deeper understanding of irq-handling - espically
for mouse and keyboard handlers - I found out that the keyboard and
mouse interrupts are handled *both* in
Ok, that is only true for PS/2 mice, but the majority of notebooks on
the market have a PS/2 trackpad. On modifiying the pc_keyb.c file there
is no longer a need to save/restore Interrupt handlers or to call them
indirecty via a function pointer. Unfortunatly it has to be compiled in
the kernel and cannot be written as a LKM module.
But anyway - I sad down and got a working solution very quickly! I'm
very glad with it! I needed not more than 45 minutes to get this
working! Works in textmode (gpm) and under X11 as expected!
I have tested my patch only on my own notebook (Compaq M300). It would
help a lot if there are some volunteers...
[x] make the "disable trackpad time" configurable via the /proc
filesystem. Do you think that /proc/sys/kernel/trackpad is a good place
for it? There are other files under the /proc/sys/kernel directory that
fall in the category "keyboard handling", e.g. ctrl-alt-del or sysrq.
[x] make a /proc entry to allow "disable trackpad" and "enable
trackpad". That would allow to turn the builtin trackpad off when an
external mouse is pluged in, and to re-enable it when an external mouse
is unplugged again.
Here is the patch