KWorld Global TV Terminator rc hack.patch

From MythTV

Jump to: navigation, search
--- linux/drivers/media/common/ir-functions.c.orig	2007-02-14 02:25:44.000000000 -0800
+++ linux/drivers/media/common/ir-functions.c	2007-02-20 20:33:31.000000000 -0800
@@ -44,13 +44,119 @@
 
 static void ir_input_key_event(struct input_dev *dev, struct ir_input_state *ir)
 {
-	if (KEY_RESERVED == ir->keycode) {
-		printk(KERN_INFO "%s: unknown key: key=0x%02x raw=0x%02x down=%d\n",
-		       dev->name,ir->ir_key,ir->ir_raw,ir->keypressed);
+	printk(KERN_INFO "%s: keycode=0x%02x key=0x%02x raw=0x%02x down=%d\n",
+	       dev->name, ir->keycode, ir->ir_key, ir->ir_raw, ir->keypressed);
+	/* ignore events from saa7134 IR (V-Stream Studio TV) */
+	if (ir->keycode == 0xa7) {
 		return;
 	}
-	dprintk(1,"%s: key event code=%d down=%d\n",
-		dev->name,ir->keycode,ir->keypressed);
+	/* translate events from i2c IR (KNC One) */
+	switch (ir->ir_key) {
+		case 0:
+			ir->keycode = KEY_RECORD;
+			break;		
+		case 1:
+			ir->keycode = KEY_KP1;
+			break;		
+		case 2:
+			ir->keycode = KEY_KP0;
+			break;		
+		case 3:
+			ir->keycode = KEY_RADIO;
+			break;		
+		case 4:
+			ir->keycode = KEY_BACK;
+			break;		
+		case 5:
+			ir->keycode = KEY_KP4;
+			break;		
+		case 6:
+			ir->keycode = KEY_KP7;
+			break;		
+		case 7:
+			ir->keycode = KEY_TUNER;
+			break;		
+		case 8:
+			ir->keycode = KEY_STOP;
+			break;		
+		case 9:
+			ir->keycode = KEY_KP5;
+			break;		
+		case 10:
+			ir->keycode = KEY_KP8;
+			break;		
+		case 11:
+			ir->keycode = KEY_KP2;
+			break;		
+		case 12:
+			ir->keycode = KEY_FORWARD;
+			break;		
+		case 13:
+			ir->keycode = KEY_LANGUAGE;
+			break;		
+		case 14:
+			ir->keycode = KEY_MENU;
+			break;		
+		case 15:
+			ir->keycode = KEY_CLOSE;
+			break;		
+		case 16:
+			ir->keycode = KEY_KPPLUS;
+			break;		
+		case 17:
+			ir->keycode = KEY_PLAY;
+			break;		
+		case 18:
+			ir->keycode = KEY_KP9;
+			break;		
+		case 19:
+			ir->keycode = KEY_AGAIN;
+			break;		
+		case 20:
+			ir->keycode = KEY_VOLUMEDOWN;
+			break;
+		case 21:
+			ir->keycode = KEY_KP6;
+			break;		
+		case 22:
+			ir->keycode = KEY_VOLUMEUP;
+			break;		
+		case 23:
+			ir->keycode = KEY_CHANNELDOWN;
+			break;		
+		case 24:
+			ir->keycode = KEY_MUTE;
+			break;		
+		case 25:
+			ir->keycode = KEY_ZOOM;
+			break;		
+		case 26:
+			ir->keycode = KEY_SHUFFLE;
+			break;		
+		case 27:
+			ir->keycode = KEY_KP3;
+			break;		
+		case 28:
+			ir->keycode = KEY_SEARCH;
+			break;		
+		case 29:
+			ir->keycode = KEY_RESTART;
+			break;		
+		case 30:
+			ir->keycode = KEY_POWER;
+			break;
+		case 31:
+			ir->keycode = KEY_CHANNELUP;
+			break;
+		default:
+			/* keycode that noone should expect from this remote */
+			ir->keycode = KEY_PROPS;
+			break;
+	}
+	/* make sure that input layer does not discard event */
+	set_bit(EV_KEY, dev->evbit);
+	set_bit(ir->keycode, dev->keybit);
+	/* send event to input event core */
 	input_report_key(dev,ir->keycode,ir->keypressed);
 	input_sync(dev);
 }
Personal tools