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: unknown key: key=0x%02x down=%d\n",
+                      dev->name, ir->ir_key, ir->keypressed);
                return;
        }
        IR_dprintk(1,"%s: key event code=%d down=%d\n",
 void ir_input_init(struct input_dev *dev, struct ir_input_state *ir,
                   int ir_type, struct ir_scancode_table *ir_codes)
 {
-       int i;
-
        ir->ir_type = ir_type;
 
-       memset(ir->ir_codes, 0, sizeof(ir->ir_codes));
-
-       /*
-        * FIXME: This is a temporary workaround to use the new IR tables
-        * with the old approach. Later patches will replace this to a
-        * proper method
-        */
-
-       if (ir_codes)
-               for (i = 0; i < ir_codes->size; i++)
-                       if (ir_codes->scan[i].scancode < IR_KEYTAB_SIZE)
-                               ir->ir_codes[ir_codes->scan[i].scancode] = ir_codes->scan[i].keycode;
+       ir_set_keycode_table(dev, ir_codes);
 
-       dev->keycode     = ir->ir_codes;
-       dev->keycodesize = sizeof(IR_KEYTAB_TYPE);
-       dev->keycodemax  = IR_KEYTAB_SIZE;
-       for (i = 0; i < IR_KEYTAB_SIZE; i++)
-               set_bit(ir->ir_codes[i], dev->keybit);
        clear_bit(0, dev->keybit);
 
        set_bit(EV_KEY, dev->evbit);
 EXPORT_SYMBOL_GPL(ir_input_nokey);
 
 void ir_input_keydown(struct input_dev *dev, struct ir_input_state *ir,
-                     u32 ir_key, u32 ir_raw)
+                     u32 ir_key)
 {
-       u32 keycode = IR_KEYCODE(ir->ir_codes, ir_key);
+       u32 keycode = ir_g_keycode_from_table(dev, ir_key);
 
        if (ir->keypressed && ir->keycode != keycode) {
                ir->keypressed = 0;
        }
        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);
                                IR_dprintk(1, "ir-common: instruction %x, toggle %x\n", instr,
                                        toggle);
                                ir_input_nokey(ir->dev, &ir->ir);
-                               ir_input_keydown(ir->dev, &ir->ir, instr,
-                                                instr);
+                               ir_input_keydown(ir->dev, &ir->ir, instr);
                        }
 
                        /* Set/reset key-up timer */
 
 
        return KEY_UNKNOWN;
 }
-EXPORT_SYMBOL_GPL(ir_g_keycode_from_table);
 
 /**
  * ir_set_keycode_table() - sets the IR keycode table and add the handlers
 
        return 0;
 }
-EXPORT_SYMBOL_GPL(ir_set_keycode_table);
 
 
        data = (ircom >> 8) & 0x7f;
 
-       ir_input_keydown(ir->input_dev, &ir->ir, data, data);
+       ir_input_keydown(ir->input_dev, &ir->ir, data);
        ir_input_nokey(ir->input_dev, &ir->ir);
 }
 
 
        if (budget_ci->ir.last_raw != raw || !timer_pending(&budget_ci->ir.timer_keyup)) {
                ir_input_nokey(dev, &budget_ci->ir.state);
                ir_input_keydown(dev, &budget_ci->ir.state,
-                                budget_ci->ir.ir_key, raw);
+                                budget_ci->ir.ir_key);
                budget_ci->ir.last_raw = raw;
        }
 
 
 
        if ((ir->mask_keydown  &&  (0 != (gpio & ir->mask_keydown))) ||
            (ir->mask_keyup    &&  (0 == (gpio & ir->mask_keyup)))) {
-               ir_input_keydown(ir->dev,&ir->ir,data,data);
+               ir_input_keydown(ir->dev, &ir->ir, data);
        } else {
                /* HACK: Probably, ir->mask_keydown is missing
                   for this board */
                if (btv->c.type == BTTV_BOARD_WINFAST2000)
-                       ir_input_keydown(ir->dev, &ir->ir, data, data);
+                       ir_input_keydown(ir->dev, &ir->ir, data);
 
                ir_input_nokey(ir->dev,&ir->ir);
        }
                        gpio, data,
                        (gpio & ir->mask_keyup) ? " up" : "up/down");
 
-               ir_input_keydown(ir->dev, &ir->ir, data, data);
+               ir_input_keydown(ir->dev, &ir->ir, data);
                if (keyup)
                        ir_input_nokey(ir->dev, &ir->ir);
        } else {
                if (keyup)
                        ir_input_nokey(ir->dev, &ir->ir);
                else
-                       ir_input_keydown(ir->dev, &ir->ir, data, data);
+                       ir_input_keydown(ir->dev, &ir->ir, data);
        }
 
        ir->last_gpio = data | keyup;
 
 
        if (do_sendkey) {
                dprintk("sending keypress\n");
-               ir_input_keydown(ir->input, &ir->ir, poll_result.rc_data[0],
-                                poll_result.rc_data[0]);
+               ir_input_keydown(ir->input, &ir->ir, poll_result.rc_data[0]);
                ir_input_nokey(ir->input, &ir->ir);
        }
 
 
            RC5_START(ir_input->last_rc5) == 0) {
                /* This keypress is differnet: not an auto repeat */
                ir_input_nokey(ir_input->dev, &ir_input->ir);
-               ir_input_keydown(ir_input->dev, &ir_input->ir,
-                                command, ir_input->code);
+               ir_input_keydown(ir_input->dev, &ir_input->ir, command);
        }
        ir_input->last_rc5 = rc5;
 
 
 
                data = (data << 4) | ((gpio_key & 0xf0) >> 4);
 
-               ir_input_keydown(ir->input, &ir->ir, data, data);
+               ir_input_keydown(ir->input, &ir->ir, data);
                ir_input_nokey(ir->input, &ir->ir);
 
        } else if (ir->mask_keydown) {
                /* bit set on keydown */
                if (gpio & ir->mask_keydown) {
-                       ir_input_keydown(ir->input, &ir->ir, data, data);
+                       ir_input_keydown(ir->input, &ir->ir, data);
                } else {
                        ir_input_nokey(ir->input, &ir->ir);
                }
        } else if (ir->mask_keyup) {
                /* bit cleared on keydown */
                if (0 == (gpio & ir->mask_keyup)) {
-                       ir_input_keydown(ir->input, &ir->ir, data, data);
+                       ir_input_keydown(ir->input, &ir->ir, data);
                } else {
                        ir_input_nokey(ir->input, &ir->ir);
                }
 
        } else {
                /* can't distinguish keydown/up :-/ */
-               ir_input_keydown(ir->input, &ir->ir, data, data);
+               ir_input_keydown(ir->input, &ir->ir, data);
                ir_input_nokey(ir->input, &ir->ir);
        }
 }
 
                ir_dprintk("Key Code: %x\n", (ircode >> 16) & 0x7f);
 
-               ir_input_keydown(ir->input, &ir->ir, (ircode >> 16) & 0x7f, (ircode >> 16) & 0xff);
+               ir_input_keydown(ir->input, &ir->ir, (ircode >> 16) & 0x7f);
                ir->release = jiffies + msecs_to_jiffies(120);
                break;
        case CX88_BOARD_HAUPPAUGE:
                if ( dev != 0x1e && dev != 0x1f )
                        /* not a hauppauge remote */
                        break;
-               ir_input_keydown(ir->input, &ir->ir, code, ircode);
+               ir_input_keydown(ir->input, &ir->ir, code);
                ir->release = jiffies + msecs_to_jiffies(120);
                break;
        case CX88_BOARD_PINNACLE_PCTV_HD_800i:
                ir_dprintk("biphase decoded: %x\n", ircode);
                if ((ircode & 0xfffff000) != 0x3000)
                        break;
-               ir_input_keydown(ir->input, &ir->ir, ircode & 0x3f, ircode);
+               ir_input_keydown(ir->input, &ir->ir, ircode & 0x3f);
                ir->release = jiffies + msecs_to_jiffies(120);
                break;
        }
 
 
        if (do_sendkey) {
                dprintk("sending keypress\n");
-               ir_input_keydown(ir->input, &ir->ir, poll_result.rc_data[0],
-                                poll_result.rc_data[0]);
+               ir_input_keydown(ir->input, &ir->ir, poll_result.rc_data[0]);
                ir_input_nokey(ir->input, &ir->ir);
        }
 
 
        if (0 == rc) {
                ir_input_nokey(ir->input, &ir->ir);
        } else {
-               ir_input_keydown(ir->input, &ir->ir, ir_key, ir_raw);
+               ir_input_keydown(ir->input, &ir->ir, ir_key);
        }
 }
 
 
                if (data == ir->mask_keycode)
                        ir_input_nokey(ir->dev, &ir->ir);
                else
-                       ir_input_keydown(ir->dev, &ir->ir, data, data);
+                       ir_input_keydown(ir->dev, &ir->ir, data);
                return 0;
        }
 
        if (ir->polling) {
                if ((ir->mask_keydown  &&  (0 != (gpio & ir->mask_keydown))) ||
                    (ir->mask_keyup    &&  (0 == (gpio & ir->mask_keyup)))) {
-                       ir_input_keydown(ir->dev, &ir->ir, data, data);
+                       ir_input_keydown(ir->dev, &ir->ir, data);
                } else {
                        ir_input_nokey(ir->dev, &ir->ir);
                }
        else {  /* IRQ driven mode - handle key press and release in one go */
                if ((ir->mask_keydown  &&  (0 != (gpio & ir->mask_keydown))) ||
                    (ir->mask_keyup    &&  (0 == (gpio & ir->mask_keyup)))) {
-                       ir_input_keydown(ir->dev, &ir->ir, data, data);
+                       ir_input_keydown(ir->dev, &ir->ir, data);
                        ir_input_nokey(ir->dev, &ir->ir);
                }
        }
                dprintk("scancode = 0x%02x (code = 0x%02x, notcode= 0x%02x)\n",
                         ir->code, ircode, not_code);
 
-               ir_input_keydown(ir->dev, &ir->ir, ir->code, ir->code);
+               ir_input_keydown(ir->dev, &ir->ir, ir->code);
        } else
                dprintk("Repeat last key\n");
 
 
        IR_KEYTAB_TYPE     ir_codes[IR_KEYTAB_SIZE];
 
        /* key info */
-       u32                ir_raw;      /* raw data */
-       u32                ir_key;      /* ir key code */
+       u32                ir_key;      /* ir scancode */
        u32                keycode;     /* linux key code */
        int                keypressed;  /* current state */
 };
                   int ir_type, struct ir_scancode_table *ir_codes);
 void ir_input_nokey(struct input_dev *dev, struct ir_input_state *ir);
 void ir_input_keydown(struct input_dev *dev, struct ir_input_state *ir,
-                     u32 ir_key, u32 ir_raw);
+                     u32 ir_key);
 u32  ir_extract_bits(u32 data, u32 mask);
 int  ir_dump_samples(u32 *samples, int count);
 int  ir_decode_biphase(u32 *samples, int count, int low, int high);