* Or, point your browser to http://www.gnu.org/copyleft/gpl.html
  *
  *
- * the project's page is at http://www.linuxtv.org/ 
+ * the project's page is at http://www.linuxtv.org/
  */
 
 #include <linux/module.h>
        int rc5_device;
        u32 ir_key;
        bool have_command;
+       bool full_rc5;          /* Outputs a full RC5 code */
 };
 
 struct budget_ci {
                return;
        budget_ci->ir.have_command = false;
 
-       /* FIXME: We should generate complete scancodes with device info */
        if (budget_ci->ir.rc5_device != IR_DEVICE_ANY &&
            budget_ci->ir.rc5_device != (command & 0x1f))
                return;
 
+       if (budget_ci->ir.full_rc5) {
+               rc_keydown(dev,
+                          budget_ci->ir.rc5_device <<8 | budget_ci->ir.ir_key,
+                          (command & 0x20) ? 1 : 0);
+               return;
+       }
+
+       /* FIXME: We should generate complete scancodes for all devices */
        rc_keydown(dev, budget_ci->ir.ir_key, (command & 0x20) ? 1 : 0);
 }
 
        case 0x1011:
        case 0x1012:
                /* The hauppauge keymap is a superset of these remotes */
-               dev->map_name = RC_MAP_HAUPPAUGE_NEW;
+               dev->map_name = RC_MAP_HAUPPAUGE;
+               budget_ci->ir.full_rc5 = true;
 
                if (rc5_device < 0)
                        budget_ci->ir.rc5_device = 0x1f;
 
                        rc-gadmei-rm008z.o \
                        rc-genius-tvgo-a11mce.o \
                        rc-gotview7135.o \
-                       rc-hauppauge-new.o \
                        rc-imon-mce.o \
                        rc-imon-pad.o \
                        rc-iodata-bctv7e.o \
 
+++ /dev/null
-/* hauppauge-new.h - Keytable for hauppauge_new Remote Controller
- *
- * keymap imported from ir-keymaps.c
- *
- * Copyright (c) 2010 by Mauro Carvalho Chehab <mchehab@redhat.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- */
-
-#include <media/rc-map.h>
-
-/* Hauppauge: the newer, gray remotes (seems there are multiple
- * slightly different versions), shipped with cx88+ivtv cards.
- * almost rc5 coding, but some non-standard keys */
-
-static struct rc_map_table hauppauge_new[] = {
-       /* Keys 0 to 9 */
-       { 0x00, KEY_0 },
-       { 0x01, KEY_1 },
-       { 0x02, KEY_2 },
-       { 0x03, KEY_3 },
-       { 0x04, KEY_4 },
-       { 0x05, KEY_5 },
-       { 0x06, KEY_6 },
-       { 0x07, KEY_7 },
-       { 0x08, KEY_8 },
-       { 0x09, KEY_9 },
-
-       { 0x0a, KEY_TEXT },             /* keypad asterisk as well */
-       { 0x0b, KEY_RED },              /* red button */
-       { 0x0c, KEY_RADIO },
-       { 0x0d, KEY_MENU },
-       { 0x0e, KEY_SUBTITLE },         /* also the # key */
-       { 0x0f, KEY_MUTE },
-       { 0x10, KEY_VOLUMEUP },
-       { 0x11, KEY_VOLUMEDOWN },
-       { 0x12, KEY_PREVIOUS },         /* previous channel */
-       { 0x14, KEY_UP },
-       { 0x15, KEY_DOWN },
-       { 0x16, KEY_LEFT },
-       { 0x17, KEY_RIGHT },
-       { 0x18, KEY_VCR },              /* Videos */
-       { 0x19, KEY_AUDIO },            /* Music */
-       /* 0x1a: Pictures - presume this means
-          "Multimedia Home Platform" -
-          no "PICTURES" key in input.h
-        */
-       { 0x1a, KEY_CAMERA },
-
-       { 0x1b, KEY_EPG },              /* Guide */
-       { 0x1c, KEY_TV },
-       { 0x1e, KEY_NEXTSONG },         /* skip >| */
-       { 0x1f, KEY_EXIT },             /* back/exit */
-       { 0x20, KEY_CHANNELUP },        /* channel / program + */
-       { 0x21, KEY_CHANNELDOWN },      /* channel / program - */
-       { 0x22, KEY_VIDEO },            /* source (old black remote) */
-       { 0x24, KEY_PREVIOUSSONG },     /* replay |< */
-       { 0x25, KEY_ENTER },            /* OK */
-       { 0x26, KEY_SLEEP },            /* minimize (old black remote) */
-       { 0x29, KEY_BLUE },             /* blue key */
-       { 0x2e, KEY_GREEN },            /* green button */
-       { 0x30, KEY_PAUSE },            /* pause */
-       { 0x32, KEY_REWIND },           /* backward << */
-       { 0x34, KEY_FASTFORWARD },      /* forward >> */
-       { 0x35, KEY_PLAY },
-       { 0x36, KEY_STOP },
-       { 0x37, KEY_RECORD },           /* recording */
-       { 0x38, KEY_YELLOW },           /* yellow key */
-       { 0x3b, KEY_SELECT },           /* top right button */
-       { 0x3c, KEY_ZOOM },             /* full */
-       { 0x3d, KEY_POWER },            /* system power (green button) */
-};
-
-static struct rc_map_list hauppauge_new_map = {
-       .map = {
-               .scan    = hauppauge_new,
-               .size    = ARRAY_SIZE(hauppauge_new),
-               .rc_type = RC_TYPE_UNKNOWN,     /* Legacy IR type */
-               .name    = RC_MAP_HAUPPAUGE_NEW,
-       }
-};
-
-static int __init init_rc_map_hauppauge_new(void)
-{
-       return rc_map_register(&hauppauge_new_map);
-}
-
-static void __exit exit_rc_map_hauppauge_new(void)
-{
-       rc_map_unregister(&hauppauge_new_map);
-}
-
-module_init(init_rc_map_hauppauge_new)
-module_exit(exit_rc_map_hauppauge_new)
-
-MODULE_LICENSE("GPL");
-MODULE_AUTHOR("Mauro Carvalho Chehab <mchehab@redhat.com>");
 
        /* Our default information for ir-kbd-i2c.c to use */
        switch (hw) {
        case CX18_HW_Z8F0811_IR_RX_HAUP:
-               init_data->ir_codes = RC_MAP_HAUPPAUGE_NEW;
+               init_data->ir_codes = RC_MAP_HAUPPAUGE;
                init_data->internal_get_key_func = IR_KBD_GET_KEY_HAUP_XVR;
                init_data->type = RC_TYPE_RC5;
                init_data->name = cx->card_name;
 
        case CX88_BOARD_PCHDTV_HD3000:
        case CX88_BOARD_PCHDTV_HD5500:
        case CX88_BOARD_HAUPPAUGE_IRONLY:
-               ir_codes = RC_MAP_HAUPPAUGE_NEW;
+               ir_codes = RC_MAP_HAUPPAUGE;
                ir->sampling = 1;
                break;
        case CX88_BOARD_WINFAST_DTV2000H:
                if (*addrp == 0x71) {
                        /* Hauppauge XVR */
                        core->init_data.name = "cx88 Hauppauge XVR remote";
-                       core->init_data.ir_codes = RC_MAP_HAUPPAUGE_NEW;
+                       core->init_data.ir_codes = RC_MAP_HAUPPAUGE;
                        core->init_data.type = RC_TYPE_RC5;
                        core->init_data.internal_get_key_func = IR_KBD_GET_KEY_HAUP_XVR;
 
 
                .mts_firmware = 1,
                .has_dvb      = 1,
                .dvb_gpio     = hauppauge_wintv_hvr_900_digital,
-               .ir_codes     = RC_MAP_HAUPPAUGE_NEW,
+               .ir_codes     = RC_MAP_HAUPPAUGE,
                .decoder      = EM28XX_TVP5150,
                .input        = { {
                        .type     = EM28XX_VMUX_TELEVISION,
                .tuner_type   = TUNER_XC2028,
                .tuner_gpio   = default_tuner_gpio,
                .mts_firmware = 1,
-               .ir_codes     = RC_MAP_HAUPPAUGE_NEW,
+               .ir_codes     = RC_MAP_HAUPPAUGE,
                .decoder      = EM28XX_TVP5150,
                .input        = { {
                        .type     = EM28XX_VMUX_TELEVISION,
                .mts_firmware   = 1,
                .has_dvb        = 1,
                .dvb_gpio       = hauppauge_wintv_hvr_900_digital,
-               .ir_codes       = RC_MAP_HAUPPAUGE_NEW,
+               .ir_codes       = RC_MAP_HAUPPAUGE,
                .decoder        = EM28XX_TVP5150,
                .input          = { {
                        .type     = EM28XX_VMUX_TELEVISION,
 
        };
 
        /* Our default information for ir-kbd-i2c.c to use */
-       init_data->ir_codes = RC_MAP_HAUPPAUGE_NEW;
+       init_data->ir_codes = RC_MAP_HAUPPAUGE;
        init_data->internal_get_key_func = IR_KBD_GET_KEY_HAUP_XVR;
        init_data->type = RC_TYPE_RC5;
        init_data->name = "HD-PVR";
 
                ir->get_key = get_key_haup;
                rc_type     = RC_TYPE_RC5;
                if (hauppauge == 1) {
-                       ir_codes    = RC_MAP_HAUPPAUGE_NEW;
+                       ir_codes    = RC_MAP_HAUPPAUGE;
                } else {
                        ir_codes    = RC_MAP_RC5_TV;
                }
                name        = "Hauppauge/Zilog Z8";
                ir->get_key = get_key_haup_xvr;
                rc_type     = RC_TYPE_RC5;
-               ir_codes    = hauppauge ? RC_MAP_HAUPPAUGE_NEW : RC_MAP_RC5_TV;
+               ir_codes    = hauppauge ? RC_MAP_HAUPPAUGE : RC_MAP_RC5_TV;
                break;
        }
 
 
                break;
        case IVTV_HW_Z8F0811_IR_RX_HAUP:
                /* Default to grey remote */
-               init_data->ir_codes = RC_MAP_HAUPPAUGE_NEW;
+               init_data->ir_codes = RC_MAP_HAUPPAUGE;
                init_data->internal_get_key_func = IR_KBD_GET_KEY_HAUP_XVR;
                init_data->type = RC_TYPE_RC5;
                init_data->name = itv->card_name;
 
        switch (hdw->ir_scheme_active) {
        case PVR2_IR_SCHEME_24XXX: /* FX2-controlled IR */
        case PVR2_IR_SCHEME_29XXX: /* Original 29xxx device */
-               init_data->ir_codes              = RC_MAP_HAUPPAUGE_NEW;
+               init_data->ir_codes              = RC_MAP_HAUPPAUGE;
                init_data->internal_get_key_func = IR_KBD_GET_KEY_HAUP;
                init_data->type                  = RC_TYPE_RC5;
                init_data->name                  = hdw->hdw_desc->description;
                break;
        case PVR2_IR_SCHEME_ZILOG:     /* HVR-1950 style */
        case PVR2_IR_SCHEME_24XXX_MCE: /* 24xxx MCE device */
-               init_data->ir_codes              = RC_MAP_HAUPPAUGE_NEW;
+               init_data->ir_codes              = RC_MAP_HAUPPAUGE;
                init_data->internal_get_key_func = IR_KBD_GET_KEY_HAUP_XVR;
                init_data->type                  = RC_TYPE_RC5;
                init_data->name                  = hdw->hdw_desc->description;
 
        case SAA7134_BOARD_HAUPPAUGE_HVR1110:
                dev->init_data.name = "HVR 1110";
                dev->init_data.get_key = get_key_hvr1110;
-               dev->init_data.ir_codes = RC_MAP_HAUPPAUGE_NEW;
+               dev->init_data.ir_codes = RC_MAP_HAUPPAUGE;
                info.addr = 0x71;
                break;
        case SAA7134_BOARD_BEHOLD_607FM_MK3: