diff options
-rw-r--r-- | drivers/input/keyboard/mp900_kbd.c | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/drivers/input/keyboard/mp900_kbd.c b/drivers/input/keyboard/mp900_kbd.c index 337ec3bbf810de..7a714368f1fff1 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,12 +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: /* Axim X30 reports its special keys here */ + printk(KERN_ERR "btuart : received unsupported packetsize of %d with packet_buffer[0]=%x\n", i, packet_buffer[0]); + mp900_kb_decode(packet_buffer, i); + + if (keydown) { + if (exiting == 0) { + schedule_delayed_work(&mp900_kb_work, 2); + } + } + + break; - case 14: + case 14: /* Nec Mobilepro 900/c reports keys here */ if (packet_buffer[0] == 0x13) { /* Keyboard poll packet */ mp900_kb_decode(packet_buffer, i); @@ -328,10 +336,9 @@ static irqreturn_t mp900_kb_interrupt(int irq,void *dev_id) } } break; -// case 15: -// printk(KERN_ERR "btuart : Package size 15\n"); -// printk(KERN_ERR "btuart_log : %s\n", packet_buffer); -// break; + case 15: + printk(KERN_ERR "btuart : received unsupported packetsize of %d with packet_buffer[0]=%x\n", i, packet_buffer[0]); + break; default: /* make sure ts is clear to transmit */ @@ -343,7 +350,7 @@ static irqreturn_t mp900_kb_interrupt(int irq,void *dev_id) 2); } } else { - printk(KERN_ERR "unhandled size of package (size=%d) with [0]=%x\n", i, packet_buffer[0]); + printk(KERN_ERR "btuart : received unsupported paketsize of %d with packet_buffer[0]=%x\n", i, packet_buffer[0]); } break; } |