Re: [Haifux] preventing caps lock at the kernel level

2010-03-30 Thread boazg
sorry for the slow update.
my controller is indeed the i8042. however, the current version of ubuntu
has kernel 2.6.31 which does not have the i8042_filter() function yet. the
advantige of keeping the kernel with ubutu's configuration is that all the
tuning they've done to get esoteric hardware to work out of the box remains.
as my laptop is mostly esoteric hardware (HP tx2000), it made more sense
then to try a new kernel and both try to debug my changes and the kernel
config options at the same time.

after some useful information from this
articlehttp://gunnarwrobel.de/wiki/Linux-and-the-keyboard.html and
the specification links it led to, i concluded that the scancode in my
system for caps lock is 0x3a, and placed the following code near the
beginning of the function i8042_interrupt().
if(data == 0x3a)
goto out;
while this fixed the caps-lock, it made the mouse and tablet go crazy. upon
further thought, i changed it to this:
  if(data == 0x3a  port_no == I8042_KBD_PORT_NO)
goto out;
a vast improvement. still, some special keys acted wrong, so i ended up
moving it to near the end of the code.

and thanks to rami for pointing me in the right direction.

On Sat, Mar 20, 2010 at 13:49, Rami Rosen rosenr...@gmail.com wrote:

 Hi, Boaz,

 I suggest that you'll look at the interrupt handler of the keyboard.
 Usually, the i8042 chip family is the keyboard controller in desktops
 and laptops.
 First make sure that i8042 is indeed the driver you are using; run cat
 /proc/interrupts and see whether
 interrupt number 1 (the keyboard interrupt) is handled by i8042.
 Then goto drivers/input/serio/i8042.c; i8042_interrupt() is the
 handler for  keyboard interrupts. You can try add a filter there for
 Caps Lock.

 Even better is try to add code in i8042_filter() method, which is
 called from i8042_interrupt(); this way you can be sure about locking.

 I think that you should **not** try to write a simple module which
 hookskeyboard interrupts. While this solution is usually better (you
 don't change kernel code), I think it won't work in this case.
 Namely, if you try something like this, in a kernel module:

 free_irq (1, NULL);
 res = request_irq (1, mykbdhandler, IRQF_SHARED, mykbd, dev_id);

 I think you will get an error, since
 interrupt 1 (the PC keyboard interrupt) is edge-triggered (see cat
 /proc/interrupts;
 for interrupt 1 it says:IO-APIC-edge ). In
 case of level-triggered interrupts this might have been OK.


 Rgs,
 Rami Rosen


 On Sat, Mar 20, 2010 at 3:19 AM, boazg boaz.ge...@gmail.com wrote:
  hi,
  i have a laptop in which due to a hardware problem, computer thinks the
 caps
  lock key is pressed about 5 times a second, at random. i've disabled caps
  lock at the X11 level, and it's now usable. however, a few programs still
  have problems with the fact that a key is pressed (regardless of it being
  caps lock). also, i can't use the consoles at ctrl+alt+f[1..6].
  i wanted to have the kernel filter out caps lock and have the userland
 never
  see that is was pressed. to this end i edited drivers/char/keyboard.c and
  added a few spots where i return if the key is caps lock. this doesn't
 seem
  to work.
  anyone have any better ideas as to where i should be looking?
 
  thanks
 
  boazg
 
  ___
  Haifux mailing list
  Haifux@haifux.org
  http://hamakor.org.il/cgi-bin/mailman/listinfo/haifux
 
 

___
Haifux mailing list
Haifux@haifux.org
http://hamakor.org.il/cgi-bin/mailman/listinfo/haifux


[Haifux] preventing caps lock at the kernel level

2010-03-19 Thread boazg
hi,
i have a laptop in which due to a hardware problem, computer thinks the caps
lock key is pressed about 5 times a second, at random. i've disabled caps
lock at the X11 level, and it's now usable. however, a few programs still
have problems with the fact that a key is pressed (regardless of it being
caps lock). also, i can't use the consoles at ctrl+alt+f[1..6].
i wanted to have the kernel filter out caps lock and have the userland never
see that is was pressed. to this end i edited drivers/char/keyboard.c and
added a few spots where i return if the key is caps lock. this doesn't seem
to work.
anyone have any better ideas as to where i should be looking?

thanks

boazg
___
Haifux mailing list
Haifux@haifux.org
http://hamakor.org.il/cgi-bin/mailman/listinfo/haifux