diff options
author | Kristoffer Ericson <kristoffer@boggieman.(none)> | 2010-01-02 18:52:40 +0100 |
---|---|---|
committer | Kristoffer Ericson <kristoffer.ericson@gmail.com> | 2011-12-10 11:02:42 +0100 |
commit | 4b358e55a8e8b0606f88e0e87a768a6cb365bded (patch) | |
tree | 5811aa17b0fd24ddb9fa8c29d792876826d6845e | |
parent | a4275c07e3f8c254e376be5d25e8cc793d89d7e5 (diff) | |
download | linux-hpc-4b358e55a8e8b0606f88e0e87a768a6cb365bded.tar.gz |
AximX30 seems to get its input packet size = 10 so add some minor code to handle that. We need to make it more generic since other than mp900c are using it.
-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; } |