aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKristoffer Ericson <kristoffer@boggieman.(none)>2010-01-02 18:52:40 +0100
committerKristoffer Ericson <kristoffer.ericson@gmail.com>2011-12-10 11:02:42 +0100
commit4b358e55a8e8b0606f88e0e87a768a6cb365bded (patch)
tree5811aa17b0fd24ddb9fa8c29d792876826d6845e
parenta4275c07e3f8c254e376be5d25e8cc793d89d7e5 (diff)
downloadlinux-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.c35
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;
}