|
It looks like the keyboard is handled by the same interrupt, and a flood is happening inside the btuart buffer. This is most likely happening from input entering the buffer but we never take it out, leaving the buffer full and unable to accept further input (keyboard/touchscreen).
We really should start creating an own setup for the bsquare since we are adding up changes here.
Start with a fresh repository for 2.6.24-hpc (remove the stuff we added last time, usually by git checkout -f). And add this instead: diff --git a/drivers/input/keyboard/mp900_kbd.c b/drivers/input/keyboard/mp900_kbd.c index 337ec3b..079555d 100644 --- a/drivers/input/keyboard/mp900_kbd.c +++ b/drivers/input/keyboard/mp900_kbd.c @@ -139,15 +139,16 @@ static int keydown=0; static void mp900_kb_decode(char cur_buffer[], int packet_length) { int i, j, ff, keycount=0; + int length=packet_length; unsigned char keys_buffer[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; static unsigned char last_buffer[32] = {0x13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - - if (packet_length == 14) { + + if ((packet_length == 14) || (packet_length == 10)) { ff = 0; - for (i=1; i < 14; i++) { + for (i=1; i < length; i++) { keys_buffer[keycount] = cur_buffer[i] ^ last_buffer[i]; if (cur_buffer[i] == 0xff) ff++; @@ -177,7 +178,7 @@ static void mp900_kb_decode(char cur_buffer[], int packet_length) }
if (keycount) { - for (i=1;i<14;i++) { + for (i=1; i<length; i++) { last_buffer[i] = cur_buffer[i]; } } @@ -310,10 +311,19 @@ static irqreturn_t mp900_kb_interrupt(int irq,void *dev_id) } break;
-// case 10: -// printk(KERN_ERR "btuart : Package size 10\n"); -// printk(KERN_ERR "btuart_log : %s\n", packet_buffer); -// break; + case 10: + printk(KERN_ERR "btuart : Package size 10\n"); + printk(KERN_ERR "btuart_log : %s\n", packet_buffer); + printk(KERN_ERR "btuart_log : packate_buffer[0]=%d\n", packet_buffer[0]); + mp900_kb_decode(packet_buffer, i); + + if (keydown) { + if (exiting == 0) { + schedule_delayed_work(&mp900_kb_work, 2); + } + } + + break;
case 14: if (packet_buffer[0] == 0x13) { /* Keyboard poll packet */
|