cx88-input: filter IR codes by address for Hauppauge cards, don't truncate name From: Darren Salt <linux@xxxxxxxxxxxxxxxxxxxxxxxxxxx> This patch adds IR codes filtering by RC5 address for Hauppauge cards. For now, I'm assuming that the remote control is an A415; this has address 0x1E, which the card supplied in bits 6-10 of the value read from its IR interface. It also adds a parameter, ir_any_address. If this is non-zero, no IR address checking is done. The input device name buffer is enlarged to avoid truncation. Signed-off-by: Darren Salt <linux@xxxxxxxxxxxxxxxxxxxxxxxxxxx> diff --git a/linux/drivers/media/video/cx88/cx88-input.c b/linux/drivers/media/video/cx88/cx88-input.c --- a/linux/drivers/media/video/cx88/cx88-input.c Thu Mar 23 02:27:41 2006 +++ b/linux/drivers/media/video/cx88/cx88-input.c Thu Mar 23 17:11:18 2006 @@ -40,7 +40,7 @@ struct cx88_core *core; struct input_dev *input; struct ir_input_state ir; - char name[32]; + char name[72]; char phys[32]; /* sample from gpio pin 16 */ @@ -64,6 +64,10 @@ module_param(ir_debug, int, 0644); /* debug level [IR] */ MODULE_PARM_DESC(ir_debug, "enable debug messages [IR]"); +static int ir_any_address = 0; +module_param(ir_any_address, int, 0644); +MODULE_PARM_DESC(ir_any_address, "allow any address code [IR]"); + #define ir_dprintk(fmt, arg...) if (ir_debug) \ printk(KERN_DEBUG "%s IR: " fmt , ir->core->name , ##arg) @@ -172,7 +176,7 @@ case CX88_BOARD_HAUPPAUGE_HVR1100: ir_codes = ir_codes_hauppauge_new; ir_type = IR_TYPE_RC5; - ir->sampling = 1; + ir->sampling = (0x1E<<6) | 1; /* address in b6..10 of IR code */ break; case CX88_BOARD_WINFAST2000XP_EXPERT: ir_codes = ir_codes_winfast; @@ -364,7 +368,8 @@ break; } - if ((ircode & 0xffff) != (ir->sampling & 0xffff)) { /* wrong address */ + if (!ir_any_address && + (ircode & 0xffff) != (ir->sampling & 0xffff)) { /* wrong address */ ir_dprintk("pulse distance decoded wrong address\n"); break; } @@ -387,6 +392,9 @@ ircode = ir_decode_biphase(ir->samples, ir->scount, 5, 7); ir_dprintk("biphase decoded: %x\n", ircode); if ((ircode & 0xfffff000) != 0x3000) + break; + if (!ir_any_address && + ((ircode ^ ir->sampling) & (0x1F << 6))) break; ir_input_keydown(ir->input, &ir->ir, ircode & 0x3f, ircode); ir->release = jiffies + msecs_to_jiffies(120); -- | Darren Salt | linux or ds at | nr. Ashington, | Toon | RISC OS, Linux | youmustbejoking,demon,co,uk | Northumberland | Army | + Output *more* particulate pollutants. BUFFER AGAINST GLOBAL WARMING. "Bother", said Pooh, as he kicked hell out of his modem. _______________________________________________ linux-dvb@xxxxxxxxxxx http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb