diff -rup linux-2.6.15.2/drivers/media/common/ir-common.c linux-2.6.15.2-cx88_input/drivers/media/common/ir-common.c --- linux-2.6.15.2/drivers/media/common/ir-common.c 2006-01-31 08:25:07.000000000 +0200 +++ linux-2.6.15.2-cx88_input/drivers/media/common/ir-common.c 2006-02-06 23:46:12.000000000 +0200 @@ -298,7 +298,7 @@ static void ir_input_key_event(struct in } dprintk(1,"%s: key event code=%d down=%d\n", dev->name,ir->keycode,ir->keypressed); - input_report_key(dev,ir->keycode,ir->keypressed); + input_event(dev, EV_KEY, ir->keycode, ir->keypressed); input_sync(dev); } @@ -343,13 +343,12 @@ void ir_input_keydown(struct input_dev * ir->keypressed = 0; ir_input_key_event(dev,ir); } - if (!ir->keypressed) { - ir->ir_key = ir_key; - ir->ir_raw = ir_raw; - ir->keycode = keycode; - ir->keypressed = 1; - ir_input_key_event(dev,ir); - } + /* same RC5 code -> it is a repeated key */ + ir->keypressed = ir->ir_raw == ir_raw ? 2 : 1; + ir->ir_key = ir_key; + ir->ir_raw = ir_raw; + ir->keycode = keycode; + ir_input_key_event(dev,ir); } /* -------------------------------------------------------------------------- */ diff -rup linux-2.6.15.2/drivers/media/video/cx88/cx88-input.c linux-2.6.15.2-cx88_input/drivers/media/video/cx88/cx88-input.c --- linux-2.6.15.2/drivers/media/video/cx88/cx88-input.c 2006-01-31 08:25:07.000000000 +0200 +++ linux-2.6.15.2-cx88_input/drivers/media/video/cx88/cx88-input.c 2006-02-06 23:04:39.000000000 +0200 @@ -289,6 +289,11 @@ MODULE_PARM_DESC(ir_debug, "enable debug #define ir_dprintk(fmt, arg...) if (ir_debug) \ printk(KERN_DEBUG "%s IR: " fmt , ir->core->name , ##arg) +static void input_repeat_key(unsigned long data) +{ + /* dummy routine to disable autorepeat in the input driver */ +} + /* ---------------------------------------------------------------------- */ static void cx88_ir_handle_key(struct cx88_IR *ir) @@ -472,6 +477,7 @@ int cx88_ir_init(struct cx88_core *core, /* all done */ input_register_device(ir->input); + ir->input->timer.function = input_repeat_key; return 0; } @@ -572,7 +578,7 @@ void cx88_ir_irq(struct cx88_core *core) if ((ircode & 0xfffff000) != 0x3000) break; ir_input_keydown(ir->input, &ir->ir, ircode & 0x3f, ircode); - ir->release = jiffies + msecs_to_jiffies(120); + ir->release = jiffies + msecs_to_jiffies(280); break; }