From MythTV
--- 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);
}