rdev->priv             = data;
        rdev->driver_type      = RC_DRIVER_IR_RAW;
-       rdev->allowed_protocols = RC_BIT_ALL;
+       rdev->allowed_protocols = RC_BIT_ALL_IR_DECODER;
        rdev->open             = picolcd_cir_open;
        rdev->close            = picolcd_cir_close;
        rdev->input_name       = data->hdev->name;
 
 
        dev->priv = coredev;
        dev->driver_type = RC_DRIVER_IR_RAW;
-       dev->allowed_protocols = RC_BIT_ALL;
+       dev->allowed_protocols = RC_BIT_ALL_IR_DECODER;
        dev->map_name = sms_get_board(board_id)->rc_codes;
        dev->driver_name = MODULE_NAME;
 
 
        case CX23885_BOARD_HAUPPAUGE_HVR1250:
                /* Integrated CX2388[58] IR controller */
                driver_type = RC_DRIVER_IR_RAW;
-               allowed_protos = RC_BIT_ALL;
+               allowed_protos = RC_BIT_ALL_IR_DECODER;
                /* The grey Hauppauge RC-5 remote */
                rc_map = RC_MAP_HAUPPAUGE;
                break;
        case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL:
                /* Integrated CX23885 IR controller */
                driver_type = RC_DRIVER_IR_RAW;
-               allowed_protos = RC_BIT_ALL;
+               allowed_protos = RC_BIT_ALL_IR_DECODER;
                /* The grey Terratec remote with orange buttons */
                rc_map = RC_MAP_NEC_TERRATEC_CINERGY_XS;
                break;
        case CX23885_BOARD_TEVII_S470:
                /* Integrated CX23885 IR controller */
                driver_type = RC_DRIVER_IR_RAW;
-               allowed_protos = RC_BIT_ALL;
+               allowed_protos = RC_BIT_ALL_IR_DECODER;
                /* A guess at the remote */
                rc_map = RC_MAP_TEVII_NEC;
                break;
        case CX23885_BOARD_MYGICA_X8507:
                /* Integrated CX23885 IR controller */
                driver_type = RC_DRIVER_IR_RAW;
-               allowed_protos = RC_BIT_ALL;
+               allowed_protos = RC_BIT_ALL_IR_DECODER;
                /* A guess at the remote */
                rc_map = RC_MAP_TOTAL_MEDIA_IN_HAND_02;
                break;
        case CX23885_BOARD_TBS_6981:
                /* Integrated CX23885 IR controller */
                driver_type = RC_DRIVER_IR_RAW;
-               allowed_protos = RC_BIT_ALL;
+               allowed_protos = RC_BIT_ALL_IR_DECODER;
                /* A guess at the remote */
                rc_map = RC_MAP_TBS_NEC;
                break;
        case CX23885_BOARD_DVBSKY_T982:
                /* Integrated CX23885 IR controller */
                driver_type = RC_DRIVER_IR_RAW;
-               allowed_protos = RC_BIT_ALL;
+               allowed_protos = RC_BIT_ALL_IR_DECODER;
                rc_map = RC_MAP_DVBSKY;
                break;
        case CX23885_BOARD_TT_CT2_4500_CI:
                /* Integrated CX23885 IR controller */
                driver_type = RC_DRIVER_IR_RAW;
-               allowed_protos = RC_BIT_ALL;
+               allowed_protos = RC_BIT_ALL_IR_DECODER;
                rc_map = RC_MAP_TT_1500;
                break;
        default:
 
                learning_mode_force = false;
 
        rdev->driver_type = RC_DRIVER_IR_RAW;
-       rdev->allowed_protocols = RC_BIT_ALL;
+       rdev->allowed_protocols = RC_BIT_ALL_IR_DECODER;
        rdev->priv = dev;
        rdev->open = ene_open;
        rdev->close = ene_close;
 
        /* Set up the rc device */
        rdev->priv = fintek;
        rdev->driver_type = RC_DRIVER_IR_RAW;
-       rdev->allowed_protocols = RC_BIT_ALL;
+       rdev->allowed_protocols = RC_BIT_ALL_IR_DECODER;
        rdev->open = fintek_open;
        rdev->close = fintek_close;
        rdev->input_name = FINTEK_DESCRIPTION;
 
        if (pdata->allowed_protos)
                rcdev->allowed_protocols = pdata->allowed_protos;
        else
-               rcdev->allowed_protocols = RC_BIT_ALL;
+               rcdev->allowed_protocols = RC_BIT_ALL_IR_DECODER;
        rcdev->map_name = pdata->map_name ?: RC_MAP_EMPTY;
 
        gpio_dev->rcdev = rcdev;
 
         * This device can only store 36 pulses + spaces, which is not enough
         * for the NEC protocol and many others.
         */
-       rc->allowed_protocols = RC_BIT_ALL & ~(RC_BIT_NEC | RC_BIT_NECX |
-                       RC_BIT_NEC32 | RC_BIT_RC6_6A_20 |
+       rc->allowed_protocols = RC_BIT_ALL_IR_DECODER & ~(RC_BIT_NEC |
+                       RC_BIT_NECX | RC_BIT_NEC32 | RC_BIT_RC6_6A_20 |
                        RC_BIT_RC6_6A_24 | RC_BIT_RC6_6A_32 | RC_BIT_RC6_MCE |
                        RC_BIT_SONY20 | RC_BIT_MCE_KBD | RC_BIT_SANYO);
 
 
        usb_to_input_id(ir->udev, &rc->input_id);
        rc->dev.parent = &intf->dev;
        rc->driver_type = RC_DRIVER_IR_RAW;
-       rc->allowed_protocols = RC_BIT_ALL;
+       rc->allowed_protocols = RC_BIT_ALL_IR_DECODER;
        rc->priv = ir;
        rc->open = iguanair_open;
        rc->close = iguanair_close;
 
        priv->rate = clk_get_rate(priv->clock);
 
        rdev->driver_type = RC_DRIVER_IR_RAW;
-       rdev->allowed_protocols = RC_BIT_ALL;
+       rdev->allowed_protocols = RC_BIT_ALL_IR_DECODER;
        rdev->priv = priv;
        rdev->open = hix5hd2_ir_open;
        rdev->close = hix5hd2_ir_close;
 
        /* set up ir-core props */
        rdev->priv = itdev;
        rdev->driver_type = RC_DRIVER_IR_RAW;
-       rdev->allowed_protocols = RC_BIT_ALL;
+       rdev->allowed_protocols = RC_BIT_ALL_IR_DECODER;
        rdev->open = ite_open;
        rdev->close = ite_close;
        rdev->s_idle = ite_s_idle;
 
        rc->dev.parent = dev;
        rc->priv = ir;
        rc->driver_type = RC_DRIVER_IR_RAW;
-       rc->allowed_protocols = RC_BIT_ALL;
+       rc->allowed_protocols = RC_BIT_ALL_IR_DECODER;
        rc->timeout = MS_TO_NS(100);
        if (!ir->flags.no_tx) {
                rc->s_tx_mask = mceusb_set_tx_mask;
 
        ir->rc->map_name = map_name ? map_name : RC_MAP_EMPTY;
        ir->rc->dev.parent = dev;
        ir->rc->driver_type = RC_DRIVER_IR_RAW;
-       ir->rc->allowed_protocols = RC_BIT_ALL;
+       ir->rc->allowed_protocols = RC_BIT_ALL_IR_DECODER;
        ir->rc->rx_resolution = US_TO_NS(MESON_TRATE);
        ir->rc->timeout = MS_TO_NS(200);
        ir->rc->driver_name = DRIVER_NAME;
 
        /* Set up the rc device */
        rdev->priv = nvt;
        rdev->driver_type = RC_DRIVER_IR_RAW;
-       rdev->allowed_protocols = RC_BIT_ALL;
+       rdev->allowed_protocols = RC_BIT_ALL_IR_DECODER;
        rdev->open = nvt_open;
        rdev->close = nvt_close;
        rdev->tx_ir = nvt_tx_ir;
 
        rc->map_name            = RC_MAP_EMPTY;
        rc->priv                = &loopdev;
        rc->driver_type         = RC_DRIVER_IR_RAW;
-       rc->allowed_protocols   = RC_BIT_ALL;
+       rc->allowed_protocols   = RC_BIT_ALL_IR_DECODER;
        rc->timeout             = 100 * 1000 * 1000; /* 100 ms */
        rc->min_timeout         = 1;
        rc->max_timeout         = UINT_MAX;
 
        rc->dev.parent = dev;
        rc->priv = rr3;
        rc->driver_type = RC_DRIVER_IR_RAW;
-       rc->allowed_protocols = RC_BIT_ALL;
+       rc->allowed_protocols = RC_BIT_ALL_IR_DECODER;
        rc->min_timeout = MS_TO_NS(RR3_RX_MIN_TIMEOUT);
        rc->max_timeout = MS_TO_NS(RR3_RX_MAX_TIMEOUT);
        rc->timeout = US_TO_NS(redrat3_get_timeout(rr3));
 
        rcdev->close = serial_ir_close;
        rcdev->dev.parent = &serial_ir.pdev->dev;
        rcdev->driver_type = RC_DRIVER_IR_RAW;
-       rcdev->allowed_protocols = RC_BIT_ALL;
+       rcdev->allowed_protocols = RC_BIT_ALL_IR_DECODER;
        rcdev->driver_name = KBUILD_MODNAME;
        rcdev->map_name = RC_MAP_RC6_MCE;
        rcdev->min_timeout = 1;
 
        st_rc_hardware_init(rc_dev);
 
        rdev->driver_type = RC_DRIVER_IR_RAW;
-       rdev->allowed_protocols = RC_BIT_ALL;
+       rdev->allowed_protocols = RC_BIT_ALL_IR_DECODER;
        /* rx sampling rate is 10Mhz */
        rdev->rx_resolution = 100;
        rdev->timeout = US_TO_NS(MAX_SYMB_TIME);
 
        rdev->dev.parent = dev;
        rdev->priv = sz;
        rdev->driver_type = RC_DRIVER_IR_RAW;
-       rdev->allowed_protocols = RC_BIT_ALL;
+       rdev->allowed_protocols = RC_BIT_ALL_IR_DECODER;
        rdev->driver_name = DRIVER_NAME;
        rdev->map_name = RC_MAP_STREAMZAP;
 
 
        ir->rc->map_name = ir->map_name ?: RC_MAP_EMPTY;
        ir->rc->dev.parent = dev;
        ir->rc->driver_type = RC_DRIVER_IR_RAW;
-       ir->rc->allowed_protocols = RC_BIT_ALL;
+       ir->rc->allowed_protocols = RC_BIT_ALL_IR_DECODER;
        ir->rc->rx_resolution = SUNXI_IR_SAMPLE;
        ir->rc->timeout = MS_TO_NS(SUNXI_IR_TIMEOUT);
        ir->rc->driver_name = SUNXI_IR_DEV;
 
        usb_to_input_id(tt->udev, &rc->input_id);
        rc->dev.parent = &intf->dev;
        rc->driver_type = RC_DRIVER_IR_RAW;
-       rc->allowed_protocols = RC_BIT_ALL;
+       rc->allowed_protocols = RC_BIT_ALL_IR_DECODER;
        rc->priv = tt;
        rc->driver_name = DRIVER_NAME;
        rc->map_name = RC_MAP_TT_1500;
 
        data->dev->dev.parent = &device->dev;
        data->dev->timeout = MS_TO_NS(100);
        data->dev->rx_resolution = US_TO_NS(2);
-       data->dev->allowed_protocols = RC_BIT_ALL;
+       data->dev->allowed_protocols = RC_BIT_ALL_IR_DECODER;
        data->dev->allowed_wakeup_protocols = RC_BIT_NEC | RC_BIT_NECX |
                        RC_BIT_NEC32 | RC_BIT_RC5 | RC_BIT_RC6_0 |
                        RC_BIT_RC6_6A_20 | RC_BIT_RC6_6A_24 |
 
        /* load empty to enable rc */
        if (!rc->map_name)
                rc->map_name = RC_MAP_EMPTY;
-       rc->allowed_protos = RC_BIT_ALL;
+       rc->allowed_protos = RC_BIT_ALL_IR_DECODER;
        rc->driver_type = RC_DRIVER_IR_RAW;
        rc->query = rtl2832u_rc_query;
        rc->interval = 200;
 
                .rc_codes    = RC_MAP_TECHNISAT_USB2,
                .module_name = "technisat-usb2",
                .rc_query    = technisat_usb2_rc_query,
-               .allowed_protos = RC_BIT_ALL,
+               .allowed_protos = RC_BIT_ALL_IR_DECODER,
                .driver_type    = RC_DRIVER_IR_RAW,
        }
 };
 
                         RC_BIT_RC6_6A_20 | RC_BIT_RC6_6A_24 | \
                         RC_BIT_RC6_6A_32 | RC_BIT_RC6_MCE | RC_BIT_SHARP | \
                         RC_BIT_XMP | RC_BIT_CEC)
+/* All rc protocols for which we have decoders */
+#define RC_BIT_ALL_IR_DECODER \
+                       (RC_BIT_RC5 | RC_BIT_RC5X_20 | RC_BIT_RC5_SZ | \
+                        RC_BIT_JVC | \
+                        RC_BIT_SONY12 | RC_BIT_SONY15 | RC_BIT_SONY20 | \
+                        RC_BIT_NEC | RC_BIT_NECX | RC_BIT_NEC32 | \
+                        RC_BIT_SANYO | RC_BIT_MCE_KBD | RC_BIT_RC6_0 | \
+                        RC_BIT_RC6_6A_20 | RC_BIT_RC6_6A_24 | \
+                        RC_BIT_RC6_6A_32 | RC_BIT_RC6_MCE | RC_BIT_SHARP | \
+                        RC_BIT_XMP)
 
 
 #define RC_SCANCODE_UNKNOWN(x)                 (x)