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,22 @@ void ir_input_keydown(struct input_dev *
 		ir->keypressed = 0;
 		ir_input_key_event(dev,ir);
 	}
-	if (!ir->keypressed) {
+
+	if (ir->ir_raw == ir_raw) {
+		/* same RC5 code -> it is a repeated key */
+		if (ir->keypressed == 1) {
+			/* discard the first repeat event */
+			ir->keypressed = 2;
+			return;
+		}
+	} else {
+		ir->keypressed = 1;
 		ir->ir_key  = ir_key;
 		ir->ir_raw  = ir_raw;
 		ir->keycode = keycode;
-		ir->keypressed = 1;
-		ir_input_key_event(dev,ir);
 	}
+
+	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
@@ -471,6 +471,7 @@ int cx88_ir_init(struct cx88_core *core,
 	}
 
 	/* all done */
+	input_dev->rep[REP_DELAY] = input_dev->rep[REP_PERIOD] = 1;
 	input_register_device(ir->input);
 
 	return 0;
@@ -572,7 +573,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;
 	}
 
