[media] rc-core: add separate defines for protocol bitmaps and numbers
authorDavid Härdeman <david@hardeman.nu>
Thu, 11 Oct 2012 22:11:54 +0000 (19:11 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 27 Oct 2012 13:49:51 +0000 (11:49 -0200)
The RC_TYPE_* defines are currently used both where a single protocol is
expected and where a bitmap of protocols is expected.

Functions like rc_keydown() and functions which add/remove entries to the
keytable want a single protocol. Future userspace APIs would also
benefit from numeric protocols (rather than bitmap ones). Keytables are
smaller if they can use a small(ish) integer rather than a bitmap.

Other functions or struct members (e.g. allowed_protos,
enabled_protocols, etc) accept multiple protocols and need a bitmap.

Using different types reduces the risk of programmer error. Using a
protocol enum whereever possible also makes for a more future-proof
user-space API as we don't need to worry about a sufficient number of
bits being available (e.g. in structs used for ioctl() calls).

The use of both a number and a corresponding bit is dalso one in e.g.
the input subsystem as well (see all the references to set/clear bit when
changing keytables for example).

This patch separate the different usages in preparation for
upcoming patches.

Where a single protocol is expected, enum rc_type is used; where one or more
protocol(s) are expected, something like u64 is used.

The patch has been rewritten so that the format of the sysfs "protocols"
file is no longer altered (at the loss of some detail). The file itself
should probably be deprecated in the future though.

Signed-off-by: David Härdeman <david@hardeman.nu>
Cc: Andy Walls <awalls@md.metrocast.net>
Cc: Maxim Levitsky <maximlevitsky@gmail.com>
Cc: Antti Palosaari <crope@iki.fi>
Cc: Mike Isely <isely@pobox.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
56 files changed:
drivers/media/common/siano/smsir.c
drivers/media/i2c/ir-kbd-i2c.c
drivers/media/pci/cx18/cx18-i2c.c
drivers/media/pci/cx23885/cx23885-input.c
drivers/media/pci/cx88/cx88-input.c
drivers/media/pci/ivtv/ivtv-i2c.c
drivers/media/pci/saa7134/saa7134-input.c
drivers/media/rc/ati_remote.c
drivers/media/rc/ene_ir.c
drivers/media/rc/fintek-cir.c
drivers/media/rc/gpio-ir-recv.c
drivers/media/rc/iguanair.c
drivers/media/rc/imon.c
drivers/media/rc/ir-jvc-decoder.c
drivers/media/rc/ir-lirc-codec.c
drivers/media/rc/ir-mce_kbd-decoder.c
drivers/media/rc/ir-nec-decoder.c
drivers/media/rc/ir-rc5-decoder.c
drivers/media/rc/ir-rc5-sz-decoder.c
drivers/media/rc/ir-rc6-decoder.c
drivers/media/rc/ir-sanyo-decoder.c
drivers/media/rc/ir-sony-decoder.c
drivers/media/rc/ite-cir.c
drivers/media/rc/keymaps/rc-imon-mce.c
drivers/media/rc/keymaps/rc-rc6-mce.c
drivers/media/rc/mceusb.c
drivers/media/rc/nuvoton-cir.c
drivers/media/rc/rc-loopback.c
drivers/media/rc/rc-main.c
drivers/media/rc/redrat3.c
drivers/media/rc/streamzap.c
drivers/media/rc/ttusbir.c
drivers/media/rc/winbond-cir.c
drivers/media/usb/cx231xx/cx231xx-input.c
drivers/media/usb/dvb-usb-v2/af9015.c
drivers/media/usb/dvb-usb-v2/af9035.c
drivers/media/usb/dvb-usb-v2/anysee.c
drivers/media/usb/dvb-usb-v2/az6007.c
drivers/media/usb/dvb-usb-v2/dvb_usb.h
drivers/media/usb/dvb-usb-v2/it913x.c
drivers/media/usb/dvb-usb-v2/lmedm04.c
drivers/media/usb/dvb-usb-v2/rtl28xxu.c
drivers/media/usb/dvb-usb/dib0700.h
drivers/media/usb/dvb-usb/dib0700_core.c
drivers/media/usb/dvb-usb/dib0700_devices.c
drivers/media/usb/dvb-usb/dvb-usb.h
drivers/media/usb/dvb-usb/pctv452e.c
drivers/media/usb/dvb-usb/technisat-usb2.c
drivers/media/usb/dvb-usb/ttusb2.c
drivers/media/usb/em28xx/em28xx-input.c
drivers/media/usb/hdpvr/hdpvr-i2c.c
drivers/media/usb/pvrusb2/pvrusb2-i2c-core.c
drivers/media/usb/tm6000/tm6000-input.c
include/media/ir-kbd-i2c.h
include/media/rc-core.h
include/media/rc-map.h

index 37bc5c4b8ad87541e568a3c968635d0b8a289318..b8c5cad78537209b2409e687a4a5eb23b4c51b93 100644 (file)
@@ -88,7 +88,7 @@ int sms_ir_init(struct smscore_device_t *coredev)
 
        dev->priv = coredev;
        dev->driver_type = RC_DRIVER_IR_RAW;
-       dev->allowed_protos = RC_TYPE_ALL;
+       dev->allowed_protos = RC_BIT_ALL;
        dev->map_name = sms_get_board(board_id)->rc_codes;
        dev->driver_name = MODULE_NAME;
 
index 04f192a0398a2d025faa504fd890deeac84473c6..08ae067b2b6f19f503e46bf186105dbea61a9194 100644 (file)
@@ -284,7 +284,7 @@ static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id)
 {
        char *ir_codes = NULL;
        const char *name = NULL;
-       u64 rc_type = RC_TYPE_UNKNOWN;
+       u64 rc_type = RC_BIT_UNKNOWN;
        struct IR_i2c *ir;
        struct rc_dev *rc = NULL;
        struct i2c_adapter *adap = client->adapter;
@@ -303,7 +303,7 @@ static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id)
        case 0x64:
                name        = "Pixelview";
                ir->get_key = get_key_pixelview;
-               rc_type     = RC_TYPE_OTHER;
+               rc_type     = RC_BIT_OTHER;
                ir_codes    = RC_MAP_EMPTY;
                break;
        case 0x18:
@@ -311,31 +311,31 @@ static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id)
        case 0x1a:
                name        = "Hauppauge";
                ir->get_key = get_key_haup;
-               rc_type     = RC_TYPE_RC5;
+               rc_type     = RC_BIT_RC5;
                ir_codes    = RC_MAP_HAUPPAUGE;
                break;
        case 0x30:
                name        = "KNC One";
                ir->get_key = get_key_knc1;
-               rc_type     = RC_TYPE_OTHER;
+               rc_type     = RC_BIT_OTHER;
                ir_codes    = RC_MAP_EMPTY;
                break;
        case 0x6b:
                name        = "FusionHDTV";
                ir->get_key = get_key_fusionhdtv;
-               rc_type     = RC_TYPE_RC5;
+               rc_type     = RC_BIT_RC5;
                ir_codes    = RC_MAP_FUSIONHDTV_MCE;
                break;
        case 0x40:
                name        = "AVerMedia Cardbus remote";
                ir->get_key = get_key_avermedia_cardbus;
-               rc_type     = RC_TYPE_OTHER;
+               rc_type     = RC_BIT_OTHER;
                ir_codes    = RC_MAP_AVERMEDIA_CARDBUS;
                break;
        case 0x71:
                name        = "Hauppauge/Zilog Z8";
                ir->get_key = get_key_haup_xvr;
-               rc_type     = RC_TYPE_RC5;
+               rc_type     = RC_BIT_RC5;
                ir_codes    = RC_MAP_HAUPPAUGE;
                break;
        }
index 51609d5c88ce7962d765f0e5a3ea66e74bd69946..4908eb7bcf6c2396df57838c7351822afae14a34 100644 (file)
@@ -98,7 +98,7 @@ static int cx18_i2c_new_ir(struct cx18 *cx, struct i2c_adapter *adap, u32 hw,
        case CX18_HW_Z8F0811_IR_RX_HAUP:
                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->type = RC_BIT_RC5;
                init_data->name = cx->card_name;
                info.platform_data = init_data;
                break;
index 2c925f77cf2aa4baeb8288efba0b660448747cb8..2004039482dfe9c2f943618000b2a711b01329bd 100644 (file)
@@ -270,21 +270,21 @@ int cx23885_input_init(struct cx23885_dev *dev)
        case CX23885_BOARD_HAUPPAUGE_HVR1250:
                /* Integrated CX2388[58] IR controller */
                driver_type = RC_DRIVER_IR_RAW;
-               allowed_protos = RC_TYPE_ALL;
+               allowed_protos = RC_BIT_ALL;
                /* 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_TYPE_NEC;
+               allowed_protos = RC_BIT_NEC;
                /* 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_TYPE_ALL;
+               allowed_protos = RC_BIT_ALL;
                /* A guess at the remote */
                rc_map = RC_MAP_TEVII_NEC;
                break;
index ebf448c48ca3335ce6cdb0a0091270fcdb96bd57..f29e18c72f44ffa6462c09ae870445a67326431b 100644 (file)
@@ -248,7 +248,7 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci)
        struct cx88_IR *ir;
        struct rc_dev *dev;
        char *ir_codes = NULL;
-       u64 rc_type = RC_TYPE_OTHER;
+       u64 rc_type = RC_BIT_OTHER;
        int err = -ENOMEM;
        u32 hardware_mask = 0;  /* For devices with a hardware mask, when
                                 * used with a full-code IR table
@@ -416,7 +416,7 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci)
                break;
        case CX88_BOARD_TWINHAN_VP1027_DVBS:
                ir_codes         = RC_MAP_TWINHAN_VP1027_DVBS;
-               rc_type          = RC_TYPE_NEC;
+               rc_type          = RC_BIT_NEC;
                ir->sampling     = 0xff00; /* address */
                break;
        }
@@ -592,7 +592,7 @@ void cx88_i2c_init_ir(struct cx88_core *core)
        case CX88_BOARD_LEADTEK_PVR2000:
                addr_list = pvr2000_addr_list;
                core->init_data.name = "cx88 Leadtek PVR 2000 remote";
-               core->init_data.type = RC_TYPE_UNKNOWN;
+               core->init_data.type = RC_BIT_UNKNOWN;
                core->init_data.get_key = get_key_pvr2000;
                core->init_data.ir_codes = RC_MAP_EMPTY;
                break;
@@ -613,7 +613,7 @@ void cx88_i2c_init_ir(struct cx88_core *core)
                        /* Hauppauge XVR */
                        core->init_data.name = "cx88 Hauppauge XVR remote";
                        core->init_data.ir_codes = RC_MAP_HAUPPAUGE;
-                       core->init_data.type = RC_TYPE_RC5;
+                       core->init_data.type = RC_BIT_RC5;
                        core->init_data.internal_get_key_func = IR_KBD_GET_KEY_HAUP_XVR;
 
                        info.platform_data = &core->init_data;
index d47f41a0ef66482dde6eec7437120b8ec462862e..46e262becb6728615fad39494aea4bf48b978f2c 100644 (file)
@@ -200,21 +200,21 @@ static int ivtv_i2c_new_ir(struct ivtv *itv, u32 hw, const char *type, u8 addr)
                init_data->ir_codes = RC_MAP_AVERMEDIA_CARDBUS;
                init_data->internal_get_key_func =
                                        IR_KBD_GET_KEY_AVERMEDIA_CARDBUS;
-               init_data->type = RC_TYPE_OTHER;
+               init_data->type = RC_BIT_OTHER;
                init_data->name = "AVerMedia AVerTV card";
                break;
        case IVTV_HW_I2C_IR_RX_HAUP_EXT:
        case IVTV_HW_I2C_IR_RX_HAUP_INT:
                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->type = RC_BIT_RC5;
                init_data->name = itv->card_name;
                break;
        case IVTV_HW_Z8F0811_IR_RX_HAUP:
                /* Default to grey remote */
                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->type = RC_BIT_RC5;
                init_data->name = itv->card_name;
                break;
        case IVTV_HW_I2C_IR_RX_ADAPTEC:
@@ -222,7 +222,7 @@ static int ivtv_i2c_new_ir(struct ivtv *itv, u32 hw, const char *type, u8 addr)
                init_data->name = itv->card_name;
                /* FIXME: The protocol and RC_MAP needs to be corrected */
                init_data->ir_codes = RC_MAP_EMPTY;
-               init_data->type = RC_TYPE_UNKNOWN;
+               init_data->type = RC_BIT_UNKNOWN;
                break;
        }
 
index 0f78f5e537e22723a26d1a8036e69ed3e5cdd5e3..e761262f74750efe089cfd163d87eb0b2188909e 100644 (file)
@@ -990,7 +990,7 @@ void saa7134_probe_i2c_ir(struct saa7134_dev *dev)
                dev->init_data.name = "BeholdTV";
                dev->init_data.get_key = get_key_beholdm6xx;
                dev->init_data.ir_codes = RC_MAP_BEHOLD;
-               dev->init_data.type = RC_TYPE_NEC;
+               dev->init_data.type = RC_BIT_NEC;
                info.addr = 0x2d;
                break;
        case SAA7134_BOARD_AVERMEDIA_CARDBUS_501:
index 49bb356ed14cabb56a2af7c5b9df9dfcb3cd1674..2d6fb26a017094a1fa23828b7ce5c546a2cdad80 100644 (file)
@@ -784,7 +784,7 @@ static void ati_remote_rc_init(struct ati_remote *ati_remote)
 
        rdev->priv = ati_remote;
        rdev->driver_type = RC_DRIVER_SCANCODE;
-       rdev->allowed_protos = RC_TYPE_OTHER;
+       rdev->allowed_protos = RC_BIT_OTHER;
        rdev->driver_name = "ati_remote";
 
        rdev->open = ati_remote_rc_open;
index d05ac15b5de48673cafbd9825afa8925c3a3c5e7..7467a6da39ff19395932b14ffdd28101c42d6557 100644 (file)
@@ -1046,7 +1046,7 @@ static int ene_probe(struct pnp_dev *pnp_dev, const struct pnp_device_id *id)
                learning_mode_force = false;
 
        rdev->driver_type = RC_DRIVER_IR_RAW;
-       rdev->allowed_protos = RC_TYPE_ALL;
+       rdev->allowed_protos = RC_BIT_ALL;
        rdev->priv = dev;
        rdev->open = ene_open;
        rdev->close = ene_close;
index 52fd7696b1ba8c7e5bccc9321fd8bd7f4a8fd105..d2d93cbe628ce5566bbc278c1e074dd391b1cc23 100644 (file)
@@ -541,7 +541,7 @@ static int fintek_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id
        /* Set up the rc device */
        rdev->priv = fintek;
        rdev->driver_type = RC_DRIVER_IR_RAW;
-       rdev->allowed_protos = RC_TYPE_ALL;
+       rdev->allowed_protos = RC_BIT_ALL;
        rdev->open = fintek_open;
        rdev->close = fintek_close;
        rdev->input_name = FINTEK_DESCRIPTION;
index 04cb272db16a37fb11e2cd2cdeadb75b3d7b3760..ba1a1eb356cf765d47d48b0e829f37b0133b5259 100644 (file)
@@ -95,7 +95,7 @@ static int __devinit gpio_ir_recv_probe(struct platform_device *pdev)
        if (pdata->allowed_protos)
                rcdev->allowed_protos = pdata->allowed_protos;
        else
-               rcdev->allowed_protos = RC_TYPE_ALL;
+               rcdev->allowed_protos = RC_BIT_ALL;
        rcdev->map_name = pdata->map_name ?: RC_MAP_EMPTY;
 
        gpio_dev->rcdev = rcdev;
index 51d7057aca0443414f8325e119a1da81a2e03840..5a9163da63c36c2fbf8527996d9b24134d5ba79e 100644 (file)
@@ -499,7 +499,7 @@ static int __devinit iguanair_probe(struct usb_interface *intf,
        usb_to_input_id(ir->udev, &rc->input_id);
        rc->dev.parent = &intf->dev;
        rc->driver_type = RC_DRIVER_IR_RAW;
-       rc->allowed_protos = RC_TYPE_ALL;
+       rc->allowed_protos = RC_BIT_ALL;
        rc->priv = ir;
        rc->open = iguanair_open;
        rc->close = iguanair_close;
index 5dd0386604f0514d7421fe0b47f3b9097d6554df..8f6a28921ed413c718c0efea9ea70e437d2ac9d7 100644 (file)
@@ -1001,7 +1001,7 @@ static void imon_touch_display_timeout(unsigned long data)
  * it is not, so we must acquire it prior to calling send_packet, which
  * requires that the lock is held.
  */
-static int imon_ir_change_protocol(struct rc_dev *rc, u64 rc_type)
+static int imon_ir_change_protocol(struct rc_dev *rc, u64 *rc_type)
 {
        int retval;
        struct imon_context *ictx = rc->priv;
@@ -1010,31 +1010,27 @@ static int imon_ir_change_protocol(struct rc_dev *rc, u64 rc_type)
        unsigned char ir_proto_packet[] = {
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86 };
 
-       if (rc_type && !(rc_type & rc->allowed_protos))
+       if (*rc_type && !(*rc_type & rc->allowed_protos))
                dev_warn(dev, "Looks like you're trying to use an IR protocol "
                         "this device does not support\n");
 
-       switch (rc_type) {
-       case RC_TYPE_RC6:
+       if (*rc_type & RC_BIT_RC6_MCE) {
                dev_dbg(dev, "Configuring IR receiver for MCE protocol\n");
                ir_proto_packet[0] = 0x01;
-               break;
-       case RC_TYPE_UNKNOWN:
-       case RC_TYPE_OTHER:
+               *rc_type = RC_BIT_RC6_MCE;
+       } else if (*rc_type & RC_BIT_OTHER) {
                dev_dbg(dev, "Configuring IR receiver for iMON protocol\n");
                if (!pad_stabilize)
                        dev_dbg(dev, "PAD stabilize functionality disabled\n");
                /* ir_proto_packet[0] = 0x00; // already the default */
-               rc_type = RC_TYPE_OTHER;
-               break;
-       default:
+               *rc_type = RC_BIT_OTHER;
+       } else {
                dev_warn(dev, "Unsupported IR protocol specified, overriding "
                         "to iMON IR protocol\n");
                if (!pad_stabilize)
                        dev_dbg(dev, "PAD stabilize functionality disabled\n");
                /* ir_proto_packet[0] = 0x00; // already the default */
-               rc_type = RC_TYPE_OTHER;
-               break;
+               *rc_type = RC_BIT_OTHER;
        }
 
        memcpy(ictx->usb_tx_buf, &ir_proto_packet, sizeof(ir_proto_packet));
@@ -1048,7 +1044,7 @@ static int imon_ir_change_protocol(struct rc_dev *rc, u64 rc_type)
        if (retval)
                goto out;
 
-       ictx->rc_type = rc_type;
+       ictx->rc_type = *rc_type;
        ictx->pad_mouse = false;
 
 out:
@@ -1323,7 +1319,7 @@ static void imon_pad_to_keys(struct imon_context *ictx, unsigned char *buf)
                rel_x = buf[2];
                rel_y = buf[3];
 
-               if (ictx->rc_type == RC_TYPE_OTHER && pad_stabilize) {
+               if (ictx->rc_type == RC_BIT_OTHER && pad_stabilize) {
                        if ((buf[1] == 0) && ((rel_x != 0) || (rel_y != 0))) {
                                dir = stabilize((int)rel_x, (int)rel_y,
                                                timeout, threshold);
@@ -1390,7 +1386,7 @@ static void imon_pad_to_keys(struct imon_context *ictx, unsigned char *buf)
                buf[0] = 0x01;
                buf[1] = buf[4] = buf[5] = buf[6] = buf[7] = 0;
 
-               if (ictx->rc_type == RC_TYPE_OTHER && pad_stabilize) {
+               if (ictx->rc_type == RC_BIT_OTHER && pad_stabilize) {
                        dir = stabilize((int)rel_x, (int)rel_y,
                                        timeout, threshold);
                        if (!dir) {
@@ -1511,7 +1507,7 @@ static void imon_incoming_packet(struct imon_context *ictx,
                kc = imon_panel_key_lookup(scancode);
        } else {
                scancode = be32_to_cpu(*((u32 *)buf));
-               if (ictx->rc_type == RC_TYPE_RC6) {
+               if (ictx->rc_type == RC_BIT_RC6_MCE) {
                        ktype = IMON_KEY_IMON;
                        if (buf[0] == 0x80)
                                ktype = IMON_KEY_MCE;
@@ -1744,7 +1740,7 @@ static void imon_get_ffdc_type(struct imon_context *ictx)
 {
        u8 ffdc_cfg_byte = ictx->usb_rx_buf[6];
        u8 detected_display_type = IMON_DISPLAY_TYPE_NONE;
-       u64 allowed_protos = RC_TYPE_OTHER;
+       u64 allowed_protos = RC_BIT_OTHER;
 
        switch (ffdc_cfg_byte) {
        /* iMON Knob, no display, iMON IR + vol knob */
@@ -1775,13 +1771,13 @@ static void imon_get_ffdc_type(struct imon_context *ictx)
        case 0x9e:
                dev_info(ictx->dev, "0xffdc iMON VFD, MCE IR");
                detected_display_type = IMON_DISPLAY_TYPE_VFD;
-               allowed_protos = RC_TYPE_RC6;
+               allowed_protos = RC_BIT_RC6_MCE;
                break;
        /* iMON LCD, MCE IR */
        case 0x9f:
                dev_info(ictx->dev, "0xffdc iMON LCD, MCE IR");
                detected_display_type = IMON_DISPLAY_TYPE_LCD;
-               allowed_protos = RC_TYPE_RC6;
+               allowed_protos = RC_BIT_RC6_MCE;
                break;
        default:
                dev_info(ictx->dev, "Unknown 0xffdc device, "
@@ -1789,7 +1785,7 @@ static void imon_get_ffdc_type(struct imon_context *ictx)
                detected_display_type = IMON_DISPLAY_TYPE_VFD;
                /* We don't know which one it is, allow user to set the
                 * RC6 one from userspace if OTHER wasn't correct. */
-               allowed_protos |= RC_TYPE_RC6;
+               allowed_protos |= RC_BIT_RC6_MCE;
                break;
        }
 
@@ -1875,7 +1871,7 @@ static struct rc_dev *imon_init_rdev(struct imon_context *ictx)
 
        rdev->priv = ictx;
        rdev->driver_type = RC_DRIVER_SCANCODE;
-       rdev->allowed_protos = RC_TYPE_OTHER | RC_TYPE_RC6; /* iMON PAD or MCE */
+       rdev->allowed_protos = RC_BIT_OTHER | RC_BIT_RC6_MCE; /* iMON PAD or MCE */
        rdev->change_protocol = imon_ir_change_protocol;
        rdev->driver_name = MOD_NAME;
 
@@ -1893,7 +1889,7 @@ static struct rc_dev *imon_init_rdev(struct imon_context *ictx)
 
        imon_set_display_type(ictx);
 
-       if (ictx->rc_type == RC_TYPE_RC6)
+       if (ictx->rc_type == RC_BIT_RC6_MCE)
                rdev->map_name = RC_MAP_IMON_MCE;
        else
                rdev->map_name = RC_MAP_IMON_PAD;
index 035668e27f6b7798000428b4d2351c4908b93acc..69edffb9fe9af29056e74c843b5149d629071cb1 100644 (file)
@@ -47,7 +47,7 @@ static int ir_jvc_decode(struct rc_dev *dev, struct ir_raw_event ev)
 {
        struct jvc_dec *data = &dev->raw->jvc;
 
-       if (!(dev->raw->enabled_protocols & RC_TYPE_JVC))
+       if (!(dev->raw->enabled_protocols & RC_BIT_JVC))
                return 0;
 
        if (!is_timing_event(ev)) {
@@ -174,7 +174,7 @@ out:
 }
 
 static struct ir_raw_handler jvc_handler = {
-       .protocols      = RC_TYPE_JVC,
+       .protocols      = RC_BIT_JVC,
        .decode         = ir_jvc_decode,
 };
 
index 870c93052fd0a0a97dc2138f1f5694d52507feba..9945e5e7f61a6d58d94105c6f5a6a3c9555d93fb 100644 (file)
@@ -35,7 +35,7 @@ static int ir_lirc_decode(struct rc_dev *dev, struct ir_raw_event ev)
        struct lirc_codec *lirc = &dev->raw->lirc;
        int sample;
 
-       if (!(dev->raw->enabled_protocols & RC_TYPE_LIRC))
+       if (!(dev->raw->enabled_protocols & RC_BIT_LIRC))
                return 0;
 
        if (!dev->raw->lirc.drv || !dev->raw->lirc.drv->rbuf)
@@ -408,7 +408,7 @@ static int ir_lirc_unregister(struct rc_dev *dev)
 }
 
 static struct ir_raw_handler lirc_handler = {
-       .protocols      = RC_TYPE_LIRC,
+       .protocols      = RC_BIT_LIRC,
        .decode         = ir_lirc_decode,
        .raw_register   = ir_lirc_register,
        .raw_unregister = ir_lirc_unregister,
index 3784ebf80ec7d9e162b95aab58434ef40d9d21c8..33fafa4cf7cb472643a5fa682b78d326e28aea6a 100644 (file)
@@ -216,7 +216,7 @@ static int ir_mce_kbd_decode(struct rc_dev *dev, struct ir_raw_event ev)
        u32 scancode;
        unsigned long delay;
 
-       if (!(dev->raw->enabled_protocols & RC_TYPE_MCE_KBD))
+       if (!(dev->raw->enabled_protocols & RC_BIT_MCE_KBD))
                return 0;
 
        if (!is_timing_event(ev)) {
@@ -422,7 +422,7 @@ static int ir_mce_kbd_unregister(struct rc_dev *dev)
 }
 
 static struct ir_raw_handler mce_kbd_handler = {
-       .protocols      = RC_TYPE_MCE_KBD,
+       .protocols      = RC_BIT_MCE_KBD,
        .decode         = ir_mce_kbd_decode,
        .raw_register   = ir_mce_kbd_register,
        .raw_unregister = ir_mce_kbd_unregister,
index 2ca509e6e16b6c73cc09b0bc84616b8b1b1beafe..a47ee36349694aeef38c0e64a2b1a6d27440db25 100644 (file)
@@ -52,7 +52,7 @@ static int ir_nec_decode(struct rc_dev *dev, struct ir_raw_event ev)
        u8 address, not_address, command, not_command;
        bool send_32bits = false;
 
-       if (!(dev->raw->enabled_protocols & RC_TYPE_NEC))
+       if (!(dev->raw->enabled_protocols & RC_BIT_NEC))
                return 0;
 
        if (!is_timing_event(ev)) {
@@ -201,7 +201,7 @@ static int ir_nec_decode(struct rc_dev *dev, struct ir_raw_event ev)
 }
 
 static struct ir_raw_handler nec_handler = {
-       .protocols      = RC_TYPE_NEC,
+       .protocols      = RC_BIT_NEC,
        .decode         = ir_nec_decode,
 };
 
index 9ab663a507a4b7e13b216b9604d47f3692840ea5..5b4d1ddeac4ec30cffa5c78f97f9049bdca75dcc 100644 (file)
@@ -52,8 +52,8 @@ static int ir_rc5_decode(struct rc_dev *dev, struct ir_raw_event ev)
        u8 toggle;
        u32 scancode;
 
-        if (!(dev->raw->enabled_protocols & RC_TYPE_RC5))
-                return 0;
+       if (!(dev->raw->enabled_protocols & (RC_BIT_RC5 | RC_BIT_RC5X)))
+               return 0;
 
        if (!is_timing_event(ev)) {
                if (ev.reset)
@@ -128,6 +128,10 @@ again:
                if (data->wanted_bits == RC5X_NBITS) {
                        /* RC5X */
                        u8 xdata, command, system;
+                       if (!(dev->raw->enabled_protocols & RC_BIT_RC5X)) {
+                               data->state = STATE_INACTIVE;
+                               return 0;
+                       }
                        xdata    = (data->bits & 0x0003F) >> 0;
                        command  = (data->bits & 0x00FC0) >> 6;
                        system   = (data->bits & 0x1F000) >> 12;
@@ -141,6 +145,10 @@ again:
                } else {
                        /* RC5 */
                        u8 command, system;
+                       if (!(dev->raw->enabled_protocols & RC_BIT_RC5)) {
+                               data->state = STATE_INACTIVE;
+                               return 0;
+                       }
                        command  = (data->bits & 0x0003F) >> 0;
                        system   = (data->bits & 0x007C0) >> 6;
                        toggle   = (data->bits & 0x00800) ? 1 : 0;
@@ -164,7 +172,7 @@ out:
 }
 
 static struct ir_raw_handler rc5_handler = {
-       .protocols      = RC_TYPE_RC5,
+       .protocols      = RC_BIT_RC5 | RC_BIT_RC5X,
        .decode         = ir_rc5_decode,
 };
 
index ec8d4a2e2c5a1d215920ab69f797c7bc39fa5fce..fd807a8308d8e4ff917dbf74bb7bbca60a519320 100644 (file)
@@ -48,8 +48,8 @@ static int ir_rc5_sz_decode(struct rc_dev *dev, struct ir_raw_event ev)
        u8 toggle, command, system;
        u32 scancode;
 
-        if (!(dev->raw->enabled_protocols & RC_TYPE_RC5_SZ))
-                return 0;
+       if (!(dev->raw->enabled_protocols & RC_BIT_RC5_SZ))
+               return 0;
 
        if (!is_timing_event(ev)) {
                if (ev.reset)
@@ -128,7 +128,7 @@ out:
 }
 
 static struct ir_raw_handler rc5_sz_handler = {
-       .protocols      = RC_TYPE_RC5_SZ,
+       .protocols      = RC_BIT_RC5_SZ,
        .decode         = ir_rc5_sz_decode,
 };
 
index 4cfdd7fa4bbd56b7d04f130b78020f8977ebaec6..e19072ffb36ca4b873e11b70507b559fc9035a35 100644 (file)
@@ -89,7 +89,9 @@ static int ir_rc6_decode(struct rc_dev *dev, struct ir_raw_event ev)
        u32 scancode;
        u8 toggle;
 
-       if (!(dev->raw->enabled_protocols & RC_TYPE_RC6))
+       if (!(dev->raw->enabled_protocols &
+             (RC_BIT_RC6_0 | RC_BIT_RC6_6A_20 | RC_BIT_RC6_6A_24 |
+              RC_BIT_RC6_6A_32 | RC_BIT_RC6_MCE)))
                return 0;
 
        if (!is_timing_event(ev)) {
@@ -271,7 +273,9 @@ out:
 }
 
 static struct ir_raw_handler rc6_handler = {
-       .protocols      = RC_TYPE_RC6,
+       .protocols      = RC_BIT_RC6_0 | RC_BIT_RC6_6A_20 |
+                         RC_BIT_RC6_6A_24 | RC_BIT_RC6_6A_32 |
+                         RC_BIT_RC6_MCE,
        .decode         = ir_rc6_decode,
 };
 
index 7e54ec57bcf9cd3fec378d36dd32b4ed6a800240..7e69a3b653700105c6e4a6c7c775655f83d57e86 100644 (file)
@@ -58,7 +58,7 @@ static int ir_sanyo_decode(struct rc_dev *dev, struct ir_raw_event ev)
        u32 scancode;
        u8 address, command, not_command;
 
-       if (!(dev->raw->enabled_protocols & RC_TYPE_SANYO))
+       if (!(dev->raw->enabled_protocols & RC_BIT_SANYO))
                return 0;
 
        if (!is_timing_event(ev)) {
@@ -179,7 +179,7 @@ static int ir_sanyo_decode(struct rc_dev *dev, struct ir_raw_event ev)
 }
 
 static struct ir_raw_handler sanyo_handler = {
-       .protocols      = RC_TYPE_SANYO,
+       .protocols      = RC_BIT_SANYO,
        .decode         = ir_sanyo_decode,
 };
 
index dab98b37621a06f5b19f88f00b1bef51c03954f1..fb914342cf4db3f2f0f56035ed0fbb78de0872aa 100644 (file)
@@ -45,7 +45,8 @@ static int ir_sony_decode(struct rc_dev *dev, struct ir_raw_event ev)
        u32 scancode;
        u8 device, subdevice, function;
 
-       if (!(dev->raw->enabled_protocols & RC_TYPE_SONY))
+       if (!(dev->raw->enabled_protocols &
+             (RC_BIT_SONY12 | RC_BIT_SONY15 | RC_BIT_SONY20)))
                return 0;
 
        if (!is_timing_event(ev)) {
@@ -123,16 +124,28 @@ static int ir_sony_decode(struct rc_dev *dev, struct ir_raw_event ev)
 
                switch (data->count) {
                case 12:
+                       if (!(dev->raw->enabled_protocols & RC_BIT_SONY12)) {
+                               data->state = STATE_INACTIVE;
+                               return 0;
+                       }
                        device    = bitrev8((data->bits <<  3) & 0xF8);
                        subdevice = 0;
                        function  = bitrev8((data->bits >>  4) & 0xFE);
                        break;
                case 15:
+                       if (!(dev->raw->enabled_protocols & RC_BIT_SONY15)) {
+                               data->state = STATE_INACTIVE;
+                               return 0;
+                       }
                        device    = bitrev8((data->bits >>  0) & 0xFF);
                        subdevice = 0;
                        function  = bitrev8((data->bits >>  7) & 0xFE);
                        break;
                case 20:
+                       if (!(dev->raw->enabled_protocols & RC_BIT_SONY20)) {
+                               data->state = STATE_INACTIVE;
+                               return 0;
+                       }
                        device    = bitrev8((data->bits >>  5) & 0xF8);
                        subdevice = bitrev8((data->bits >>  0) & 0xFF);
                        function  = bitrev8((data->bits >> 12) & 0xFE);
@@ -157,7 +170,7 @@ out:
 }
 
 static struct ir_raw_handler sony_handler = {
-       .protocols      = RC_TYPE_SONY,
+       .protocols      = RC_BIT_SONY12 | RC_BIT_SONY15 | RC_BIT_SONY20,
        .decode         = ir_sony_decode,
 };
 
index 24c77a42fc3645c2297688878396ae992ab9dc6b..d63511511df474a32d61191af01ffd96f64073c6 100644 (file)
@@ -1563,7 +1563,7 @@ static int ite_probe(struct pnp_dev *pdev, const struct pnp_device_id
        /* set up ir-core props */
        rdev->priv = itdev;
        rdev->driver_type = RC_DRIVER_IR_RAW;
-       rdev->allowed_protos = RC_TYPE_ALL;
+       rdev->allowed_protos = RC_BIT_ALL;
        rdev->open = ite_open;
        rdev->close = ite_close;
        rdev->s_idle = ite_s_idle;
index 124c7228ba8cb4e69faf664af4acadad22da111c..f0da960560b010e6fb05edd8643b4ff746745894 100644 (file)
@@ -121,7 +121,7 @@ static struct rc_map_list imon_mce_map = {
                .scan    = imon_mce,
                .size    = ARRAY_SIZE(imon_mce),
                /* its RC6, but w/a hardware decoder */
-               .rc_type = RC_TYPE_RC6,
+               .rc_type = RC_TYPE_RC6_MCE,
                .name    = RC_MAP_IMON_MCE,
        }
 };
index 753e43ec787ba10d09f35fbd4d5a33457319477a..ef4006fe4de0a6ca48d7bb3b6fa059bfa5af59fd 100644 (file)
@@ -97,7 +97,7 @@ static struct rc_map_list rc6_mce_map = {
        .map = {
                .scan    = rc6_mce,
                .size    = ARRAY_SIZE(rc6_mce),
-               .rc_type = RC_TYPE_RC6,
+               .rc_type = RC_TYPE_RC6_MCE,
                .name    = RC_MAP_RC6_MCE,
        }
 };
index 850547fe711c25131ca84b748b35de2c35b8b5ae..b2146cd99fd8a74f65a57c7b11886b27764f8272 100644 (file)
@@ -1205,7 +1205,7 @@ static struct rc_dev *mceusb_init_rc_dev(struct mceusb_dev *ir)
        rc->dev.parent = dev;
        rc->priv = ir;
        rc->driver_type = RC_DRIVER_IR_RAW;
-       rc->allowed_protos = RC_TYPE_ALL;
+       rc->allowed_protos = RC_BIT_ALL;
        rc->timeout = MS_TO_NS(100);
        if (!ir->flags.no_tx) {
                rc->s_tx_mask = mceusb_set_tx_mask;
index 2ea913a44ae887b8cfe48503e68c707201ae2a88..0190dfc2ad41eadb100598fd86649743b8683f3b 100644 (file)
@@ -1045,7 +1045,7 @@ static int nvt_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id)
        /* Set up the rc device */
        rdev->priv = nvt;
        rdev->driver_type = RC_DRIVER_IR_RAW;
-       rdev->allowed_protos = RC_TYPE_ALL;
+       rdev->allowed_protos = RC_BIT_ALL;
        rdev->open = nvt_open;
        rdev->close = nvt_close;
        rdev->tx_ir = nvt_tx_ir;
index f9be68132c67069e9f30eca7acade491d2770d41..53d02827a4724f8e5dfeb1eeea19895f42b7fbba 100644 (file)
@@ -195,7 +195,7 @@ static int __init loop_init(void)
        rc->map_name            = RC_MAP_EMPTY;
        rc->priv                = &loopdev;
        rc->driver_type         = RC_DRIVER_IR_RAW;
-       rc->allowed_protos      = RC_TYPE_ALL;
+       rc->allowed_protos      = RC_BIT_ALL;
        rc->timeout             = 100 * 1000 * 1000; /* 100 ms */
        rc->min_timeout         = 1;
        rc->max_timeout         = UINT_MAX;
index cabc19c105152937dab25fd0b04052f7d053a63f..601d1ac1c688b2608e8b96cbecae27f877c4b4b6 100644 (file)
@@ -725,25 +725,36 @@ static struct class ir_input_class = {
        .devnode        = ir_devnode,
 };
 
+/*
+ * These are the protocol textual descriptions that are
+ * used by the sysfs protocols file. Note that the order
+ * of the entries is relevant.
+ */
 static struct {
        u64     type;
        char    *name;
 } proto_names[] = {
-       { RC_TYPE_UNKNOWN,      "unknown"       },
-       { RC_TYPE_RC5,          "rc-5"          },
-       { RC_TYPE_NEC,          "nec"           },
-       { RC_TYPE_RC6,          "rc-6"          },
-       { RC_TYPE_JVC,          "jvc"           },
-       { RC_TYPE_SONY,         "sony"          },
-       { RC_TYPE_RC5_SZ,       "rc-5-sz"       },
-       { RC_TYPE_SANYO,        "sanyo"         },
-       { RC_TYPE_MCE_KBD,      "mce_kbd"       },
-       { RC_TYPE_LIRC,         "lirc"          },
-       { RC_TYPE_OTHER,        "other"         },
+       { RC_BIT_NONE,          "none"          },
+       { RC_BIT_OTHER,         "other"         },
+       { RC_BIT_UNKNOWN,       "unknown"       },
+       { RC_BIT_RC5 |
+         RC_BIT_RC5X,          "rc-5"          },
+       { RC_BIT_NEC,           "nec"           },
+       { RC_BIT_RC6_0 |
+         RC_BIT_RC6_6A_20 |
+         RC_BIT_RC6_6A_24 |
+         RC_BIT_RC6_6A_32 |
+         RC_BIT_RC6_MCE,       "rc-6"          },
+       { RC_BIT_JVC,           "jvc"           },
+       { RC_BIT_SONY12 |
+         RC_BIT_SONY15 |
+         RC_BIT_SONY20,        "sony"          },
+       { RC_BIT_RC5_SZ,        "rc-5-sz"       },
+       { RC_BIT_SANYO,         "sanyo"         },
+       { RC_BIT_MCE_KBD,       "mce_kbd"       },
+       { RC_BIT_LIRC,          "lirc"          },
 };
 
-#define PROTO_NONE     "none"
-
 /**
  * show_protocols() - shows the current IR protocol(s)
  * @device:    the device descriptor
@@ -790,6 +801,9 @@ static ssize_t show_protocols(struct device *device,
                        tmp += sprintf(tmp, "[%s] ", proto_names[i].name);
                else if (allowed & proto_names[i].type)
                        tmp += sprintf(tmp, "%s ", proto_names[i].name);
+
+               if (allowed & proto_names[i].type)
+                       allowed &= ~proto_names[i].type;
        }
 
        if (tmp != buf)
@@ -867,26 +881,20 @@ static ssize_t store_protocols(struct device *device,
                        disable = false;
                }
 
-               if (!enable && !disable && !strncasecmp(tmp, PROTO_NONE, sizeof(PROTO_NONE))) {
-                       tmp += sizeof(PROTO_NONE);
-                       mask = 0;
-                       count++;
-               } else {
-                       for (i = 0; i < ARRAY_SIZE(proto_names); i++) {
-                               if (!strcasecmp(tmp, proto_names[i].name)) {
-                                       tmp += strlen(proto_names[i].name);
-                                       mask = proto_names[i].type;
-                                       break;
-                               }
-                       }
-                       if (i == ARRAY_SIZE(proto_names)) {
-                               IR_dprintk(1, "Unknown protocol: '%s'\n", tmp);
-                               ret = -EINVAL;
-                               goto out;
+               for (i = 0; i < ARRAY_SIZE(proto_names); i++) {
+                       if (!strcasecmp(tmp, proto_names[i].name)) {
+                               mask = proto_names[i].type;
+                               break;
                        }
-                       count++;
                }
 
+               if (i == ARRAY_SIZE(proto_names)) {
+                       IR_dprintk(1, "Unknown protocol: '%s'\n", tmp);
+                       return -EINVAL;
+               }
+
+               count++;
+
                if (enable)
                        type |= mask;
                else if (disable)
@@ -902,7 +910,7 @@ static ssize_t store_protocols(struct device *device,
        }
 
        if (dev->change_protocol) {
-               rc = dev->change_protocol(dev, type);
+               rc = dev->change_protocol(dev, &type);
                if (rc < 0) {
                        IR_dprintk(1, "Error setting protocols to 0x%llx\n",
                                   (long long)type);
@@ -1117,7 +1125,8 @@ int rc_register_device(struct rc_dev *dev)
        }
 
        if (dev->change_protocol) {
-               rc = dev->change_protocol(dev, rc_map->rc_type);
+               u64 rc_type = (1 << rc_map->rc_type);
+               rc = dev->change_protocol(dev, &rc_type);
                if (rc < 0)
                        goto out_raw;
        }
index 9f5a17bb5ef5df9d09e09519a2424dbac2e0e158..a8887aba9fafe9483267f9122d0b8e39929b5c8c 100644 (file)
@@ -1082,7 +1082,7 @@ static struct rc_dev *redrat3_init_rc_dev(struct redrat3_dev *rr3)
        rc->dev.parent = dev;
        rc->priv = rr3;
        rc->driver_type = RC_DRIVER_IR_RAW;
-       rc->allowed_protos = RC_TYPE_ALL;
+       rc->allowed_protos = RC_BIT_ALL;
        rc->timeout = US_TO_NS(2750);
        rc->tx_ir = redrat3_transmit_ir;
        rc->s_tx_carrier = redrat3_set_tx_carrier;
index d6f4bfe09391e92b68981499d99bb2e076060b98..c720f12f661e5121c7ad0e5d9ba77e13f43d5013 100644 (file)
@@ -322,7 +322,7 @@ static struct rc_dev *streamzap_init_rc_dev(struct streamzap_ir *sz)
        rdev->dev.parent = dev;
        rdev->priv = sz;
        rdev->driver_type = RC_DRIVER_IR_RAW;
-       rdev->allowed_protos = RC_TYPE_ALL;
+       rdev->allowed_protos = RC_BIT_ALL;
        rdev->driver_name = DRIVER_NAME;
        rdev->map_name = RC_MAP_STREAMZAP;
 
index fef05235234a7b232197429e771522fa5adad882..f0921b5483ebdd34bd967d8f03434c2d843e86b8 100644 (file)
@@ -316,7 +316,7 @@ static int __devinit ttusbir_probe(struct usb_interface *intf,
        usb_to_input_id(tt->udev, &rc->input_id);
        rc->dev.parent = &intf->dev;
        rc->driver_type = RC_DRIVER_IR_RAW;
-       rc->allowed_protos = RC_TYPE_ALL;
+       rc->allowed_protos = RC_BIT_ALL;
        rc->priv = tt;
        rc->driver_name = DRIVER_NAME;
        rc->map_name = RC_MAP_TT_1500;
index 7c9b5f33113b225405a33a30edd2098c4f6ffa52..569d8863f4399e6dfca15d30c120d60618fa06fc 100644 (file)
@@ -1022,7 +1022,7 @@ wbcir_probe(struct pnp_dev *device, const struct pnp_device_id *dev_id)
        data->dev->priv = data;
        data->dev->dev.parent = &device->dev;
        data->dev->timeout = MS_TO_NS(100);
-       data->dev->allowed_protos = RC_TYPE_ALL;
+       data->dev->allowed_protos = RC_BIT_ALL;
 
        if (!request_region(data->wbase, WAKEUP_IOMEM_LEN, DRVNAME)) {
                dev_err(dev, "Region 0x%lx-0x%lx already in use!\n",
index 96176e9db5a28faa01086e1aca1c364b401efe15..0f7b42446826b5922a2deea2b9ebb6a5f1ffbd79 100644 (file)
@@ -99,7 +99,7 @@ int cx231xx_ir_init(struct cx231xx *dev)
        /* The i2c micro-controller only outputs the cmd part of NEC protocol */
        dev->init_data.rc_dev->scanmask = 0xff;
        dev->init_data.rc_dev->driver_name = "cx231xx";
-       dev->init_data.type = RC_TYPE_NEC;
+       dev->init_data.type = RC_BIT_NEC;
        info.addr = 0x30;
 
        /* Load and bind ir-kbd-i2c */
index 3d7526e28d426f8ca119f4d3b1326abd469b7622..943d93423705a0e1c5d404db966219ff528ebb15 100644 (file)
@@ -1306,7 +1306,7 @@ static int af9015_get_rc_config(struct dvb_usb_device *d, struct dvb_usb_rc *rc)
        if (!rc->map_name)
                rc->map_name = RC_MAP_EMPTY;
 
-       rc->allowed_protos = RC_TYPE_NEC;
+       rc->allowed_protos = RC_BIT_NEC;
        rc->query = af9015_rc_query;
        rc->interval = 500;
 
index ea27eaff4e34fdc77d9739d82b4620698a58fca7..61ae7f9d0b27329b5cd493f70be4bb6855fde0b8 100644 (file)
@@ -1023,10 +1023,10 @@ static int af9035_get_rc_config(struct dvb_usb_device *d, struct dvb_usb_rc *rc)
                switch (tmp) {
                case 0: /* NEC */
                default:
-                       rc->allowed_protos = RC_TYPE_NEC;
+                       rc->allowed_protos = RC_BIT_NEC;
                        break;
                case 1: /* RC6 */
-                       rc->allowed_protos = RC_TYPE_RC6;
+                       rc->allowed_protos = RC_BIT_RC6_MCE;
                        break;
                }
 
index ec540140c81037ffb0317a3d726fbd30e58fa94e..e78ca8fc7f854bc2c0dcc9e23606139ec049911b 100644 (file)
@@ -1048,7 +1048,7 @@ static int anysee_rc_query(struct dvb_usb_device *d)
 
 static int anysee_get_rc_config(struct dvb_usb_device *d, struct dvb_usb_rc *rc)
 {
-       rc->allowed_protos = RC_TYPE_NEC;
+       rc->allowed_protos = RC_BIT_NEC;
        rc->query          = anysee_rc_query;
        rc->interval       = 250;  /* windows driver uses 500ms */
 
index 54f1221d930df3c5eb0d554c4d56da63cc06583d..d75dbf27e99e21b5ef4065c41f466b3b1645c57d 100644 (file)
@@ -826,7 +826,7 @@ static int az6007_get_rc_config(struct dvb_usb_device *d, struct dvb_usb_rc *rc)
 {
        pr_debug("Getting az6007 Remote Control properties\n");
 
-       rc->allowed_protos = RC_TYPE_NEC;
+       rc->allowed_protos = RC_BIT_NEC;
        rc->query          = az6007_rc_query;
        rc->interval       = 400;
 
index bae16a1189d66deed84242f0c7fd26be398f77b7..059291b892b81c2e250da9e7b2ea64266db95f0c 100644 (file)
@@ -137,7 +137,7 @@ struct dvb_usb_driver_info {
 struct dvb_usb_rc {
        const char *map_name;
        u64 allowed_protos;
-       int (*change_protocol)(struct rc_dev *dev, u64 rc_type);
+       int (*change_protocol)(struct rc_dev *dev, u64 *rc_type);
        int (*query) (struct dvb_usb_device *d);
        unsigned int interval;
        const enum rc_driver_type driver_type;
index 695f9106bc54c1b8b55028d9b1d1c458386928f3..0b1ddc24c47cc7b7c5a798b911e643f395f3853e 100644 (file)
@@ -698,7 +698,7 @@ static int it913x_get_rc_config(struct dvb_usb_device *d, struct dvb_usb_rc *rc)
                return 0;
        }
 
-       rc->allowed_protos = RC_TYPE_NEC;
+       rc->allowed_protos = RC_BIT_NEC;
        rc->query = it913x_rc_query;
        rc->interval = 250;
 
index c41d9d9ec7b54df963ede5ad9deb6d9534e50620..6a2445b4832134a903a212da722dec13f1e16be8 100644 (file)
@@ -1253,7 +1253,7 @@ static int lme2510_get_stream_config(struct dvb_frontend *fe, u8 *ts_type,
 static int lme2510_get_rc_config(struct dvb_usb_device *d,
        struct dvb_usb_rc *rc)
 {
-       rc->allowed_protos = RC_TYPE_NEC;
+       rc->allowed_protos = RC_BIT_NEC;
        return 0;
 }
 
index adabba8d28bc80fa69b76348f40b83f63a680390..ec9108e2a297af0953f338de31b8ac99b756e446 100644 (file)
@@ -1197,7 +1197,7 @@ static int rtl2831u_get_rc_config(struct dvb_usb_device *d,
                struct dvb_usb_rc *rc)
 {
        rc->map_name = RC_MAP_EMPTY;
-       rc->allowed_protos = RC_TYPE_NEC;
+       rc->allowed_protos = RC_BIT_NEC;
        rc->query = rtl2831u_rc_query;
        rc->interval = 400;
 
@@ -1269,7 +1269,7 @@ static int rtl2832u_get_rc_config(struct dvb_usb_device *d,
                struct dvb_usb_rc *rc)
 {
        rc->map_name = RC_MAP_EMPTY;
-       rc->allowed_protos = RC_TYPE_NEC;
+       rc->allowed_protos = RC_BIT_NEC;
        rc->query = rtl2832u_rc_query;
        rc->interval = 400;
 
index 7de125c0b36f4576f951ea8e90a87d7c308f0857..637b6123f391e9bce0fce074314e270e4e9e9238 100644 (file)
@@ -64,7 +64,7 @@ extern int dib0700_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff);
 extern struct i2c_algorithm dib0700_i2c_algo;
 extern int dib0700_identify_state(struct usb_device *udev, struct dvb_usb_device_properties *props,
                        struct dvb_usb_device_description **desc, int *cold);
-extern int dib0700_change_protocol(struct rc_dev *dev, u64 rc_type);
+extern int dib0700_change_protocol(struct rc_dev *dev, u64 *rc_type);
 extern int dib0700_set_i2c_speed(struct dvb_usb_device *d, u16 scl_kHz);
 
 extern int dib0700_device_count;
index ef87229de6af5d791060b00cd82188bcebbc8c20..19b5ed2825d719d656066b26af8aea2250151960 100644 (file)
@@ -605,7 +605,7 @@ int dib0700_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff)
        return ret;
 }
 
-int dib0700_change_protocol(struct rc_dev *rc, u64 rc_type)
+int dib0700_change_protocol(struct rc_dev *rc, u64 *rc_type)
 {
        struct dvb_usb_device *d = rc->priv;
        struct dib0700_state *st = d->priv;
@@ -621,17 +621,19 @@ int dib0700_change_protocol(struct rc_dev *rc, u64 rc_type)
        st->buf[2] = 0;
 
        /* Set the IR mode */
-       if (rc_type == RC_TYPE_RC5)
+       if (*rc_type & RC_BIT_RC5) {
                new_proto = 1;
-       else if (rc_type == RC_TYPE_NEC)
+               *rc_type = RC_BIT_RC5;
+       } else if (*rc_type & RC_BIT_NEC) {
                new_proto = 0;
-       else if (rc_type == RC_TYPE_RC6) {
+               *rc_type = RC_BIT_NEC;
+       } else if (*rc_type & RC_BIT_RC6_MCE) {
                if (st->fw_version < 0x10200) {
                        ret = -EINVAL;
                        goto out;
                }
-
                new_proto = 2;
+               *rc_type = RC_BIT_RC6_MCE;
        } else {
                ret = -EINVAL;
                goto out;
@@ -645,7 +647,7 @@ int dib0700_change_protocol(struct rc_dev *rc, u64 rc_type)
                goto out;
        }
 
-       d->props.rc.core.protocol = rc_type;
+       d->props.rc.core.protocol = *rc_type;
 
 out:
        mutex_unlock(&d->usb_mutex);
@@ -707,7 +709,7 @@ static void dib0700_rc_urb_completion(struct urb *purb)
                 purb->actual_length);
 
        switch (d->props.rc.core.protocol) {
-       case RC_TYPE_NEC:
+       case RC_BIT_NEC:
                toggle = 0;
 
                /* NEC protocol sends repeat code as 0 0 0 FF */
index 510001da6e836a0c1e6ca0bdc492fa1532e63ccc..11798426fa88505d3202a59e6e0b74992afd3698 100644 (file)
@@ -518,7 +518,7 @@ static int dib0700_rc_query_old_firmware(struct dvb_usb_device *d)
 
        d->last_event = 0;
        switch (d->props.rc.core.protocol) {
-       case RC_TYPE_NEC:
+       case RC_BIT_NEC:
                /* NEC protocol sends repeat code as 0 0 0 FF */
                if ((key[3-2] == 0x00) && (key[3-3] == 0x00) &&
                    (key[3] == 0xff))
@@ -3658,9 +3658,9 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                        .rc_interval      = DEFAULT_RC_INTERVAL,
                        .rc_codes         = RC_MAP_DIB0700_RC5_TABLE,
                        .rc_query         = dib0700_rc_query_old_firmware,
-                       .allowed_protos   = RC_TYPE_RC5 |
-                                           RC_TYPE_RC6 |
-                                           RC_TYPE_NEC,
+                       .allowed_protos   = RC_BIT_RC5 |
+                                           RC_BIT_RC6_MCE |
+                                           RC_BIT_NEC,
                        .change_protocol  = dib0700_change_protocol,
                },
        }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
@@ -3698,9 +3698,9 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                        .rc_interval      = DEFAULT_RC_INTERVAL,
                        .rc_codes         = RC_MAP_DIB0700_RC5_TABLE,
                        .rc_query         = dib0700_rc_query_old_firmware,
-                       .allowed_protos   = RC_TYPE_RC5 |
-                                           RC_TYPE_RC6 |
-                                           RC_TYPE_NEC,
+                       .allowed_protos   = RC_BIT_RC5 |
+                                           RC_BIT_RC6_MCE |
+                                           RC_BIT_NEC,
                        .change_protocol = dib0700_change_protocol,
                },
        }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
@@ -3763,9 +3763,9 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                        .rc_interval      = DEFAULT_RC_INTERVAL,
                        .rc_codes         = RC_MAP_DIB0700_RC5_TABLE,
                        .rc_query         = dib0700_rc_query_old_firmware,
-                       .allowed_protos   = RC_TYPE_RC5 |
-                                           RC_TYPE_RC6 |
-                                           RC_TYPE_NEC,
+                       .allowed_protos   = RC_BIT_RC5 |
+                                           RC_BIT_RC6_MCE |
+                                           RC_BIT_NEC,
                        .change_protocol = dib0700_change_protocol,
                },
        }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
@@ -3808,9 +3808,9 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                        .rc_codes         = RC_MAP_DIB0700_RC5_TABLE,
                        .module_name      = "dib0700",
                        .rc_query         = dib0700_rc_query_old_firmware,
-                       .allowed_protos   = RC_TYPE_RC5 |
-                                           RC_TYPE_RC6 |
-                                           RC_TYPE_NEC,
+                       .allowed_protos   = RC_BIT_RC5 |
+                                           RC_BIT_RC6_MCE |
+                                           RC_BIT_NEC,
                        .change_protocol = dib0700_change_protocol,
                },
        }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
@@ -3890,9 +3890,9 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                        .rc_codes         = RC_MAP_DIB0700_RC5_TABLE,
                        .module_name      = "dib0700",
                        .rc_query         = dib0700_rc_query_old_firmware,
-                       .allowed_protos   = RC_TYPE_RC5 |
-                                           RC_TYPE_RC6 |
-                                           RC_TYPE_NEC,
+                       .allowed_protos   = RC_BIT_RC5 |
+                                           RC_BIT_RC6_MCE |
+                                           RC_BIT_NEC,
                        .change_protocol  = dib0700_change_protocol,
                },
        }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
@@ -3936,9 +3936,9 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                        .rc_codes         = RC_MAP_DIB0700_RC5_TABLE,
                        .module_name      = "dib0700",
                        .rc_query         = dib0700_rc_query_old_firmware,
-                       .allowed_protos   = RC_TYPE_RC5 |
-                                           RC_TYPE_RC6 |
-                                           RC_TYPE_NEC,
+                       .allowed_protos   = RC_BIT_RC5 |
+                                           RC_BIT_RC6_MCE |
+                                           RC_BIT_NEC,
                        .change_protocol  = dib0700_change_protocol,
                },
        }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
@@ -3987,9 +3987,9 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                        .rc_codes         = RC_MAP_DIB0700_RC5_TABLE,
                        .module_name      = "dib0700",
                        .rc_query         = dib0700_rc_query_old_firmware,
-                       .allowed_protos   = RC_TYPE_RC5 |
-                                           RC_TYPE_RC6 |
-                                           RC_TYPE_NEC,
+                       .allowed_protos   = RC_BIT_RC5 |
+                                           RC_BIT_RC6_MCE |
+                                           RC_BIT_NEC,
                        .change_protocol = dib0700_change_protocol,
                },
        }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
@@ -4055,9 +4055,9 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                        .rc_codes         = RC_MAP_DIB0700_RC5_TABLE,
                        .module_name      = "dib0700",
                        .rc_query         = dib0700_rc_query_old_firmware,
-                       .allowed_protos   = RC_TYPE_RC5 |
-                                           RC_TYPE_RC6 |
-                                           RC_TYPE_NEC,
+                       .allowed_protos   = RC_BIT_RC5 |
+                                           RC_BIT_RC6_MCE |
+                                           RC_BIT_NEC,
                        .change_protocol = dib0700_change_protocol,
                },
        }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
@@ -4106,9 +4106,9 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                        .rc_codes         = RC_MAP_DIB0700_NEC_TABLE,
                        .module_name      = "dib0700",
                        .rc_query         = dib0700_rc_query_old_firmware,
-                       .allowed_protos   = RC_TYPE_RC5 |
-                                           RC_TYPE_RC6 |
-                                           RC_TYPE_NEC,
+                       .allowed_protos   = RC_BIT_RC5 |
+                                           RC_BIT_RC6_MCE |
+                                           RC_BIT_NEC,
                        .change_protocol  = dib0700_change_protocol,
                },
        }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
@@ -4177,9 +4177,9 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                        .rc_codes         = RC_MAP_DIB0700_RC5_TABLE,
                        .module_name      = "dib0700",
                        .rc_query         = dib0700_rc_query_old_firmware,
-                       .allowed_protos   = RC_TYPE_RC5 |
-                                           RC_TYPE_RC6 |
-                                           RC_TYPE_NEC,
+                       .allowed_protos   = RC_BIT_RC5 |
+                                           RC_BIT_RC6_MCE |
+                                           RC_BIT_NEC,
                        .change_protocol  = dib0700_change_protocol,
                },
        }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
@@ -4215,9 +4215,9 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                        .rc_codes         = RC_MAP_DIB0700_RC5_TABLE,
                        .module_name      = "dib0700",
                        .rc_query         = dib0700_rc_query_old_firmware,
-                       .allowed_protos   = RC_TYPE_RC5 |
-                                           RC_TYPE_RC6 |
-                                           RC_TYPE_NEC,
+                       .allowed_protos   = RC_BIT_RC5 |
+                                           RC_BIT_RC6_MCE |
+                                           RC_BIT_NEC,
                        .change_protocol  = dib0700_change_protocol,
                },
        }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
@@ -4295,9 +4295,9 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                        .rc_codes         = RC_MAP_DIB0700_RC5_TABLE,
                        .module_name      = "dib0700",
                        .rc_query         = dib0700_rc_query_old_firmware,
-                       .allowed_protos   = RC_TYPE_RC5 |
-                                           RC_TYPE_RC6 |
-                                           RC_TYPE_NEC,
+                       .allowed_protos   = RC_BIT_RC5 |
+                                           RC_BIT_RC6_MCE |
+                                           RC_BIT_NEC,
                        .change_protocol  = dib0700_change_protocol,
                },
        }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
@@ -4341,9 +4341,9 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                        .rc_codes         = RC_MAP_DIB0700_NEC_TABLE,
                        .module_name      = "dib0700",
                        .rc_query         = dib0700_rc_query_old_firmware,
-                       .allowed_protos   = RC_TYPE_RC5 |
-                                           RC_TYPE_RC6 |
-                                           RC_TYPE_NEC,
+                       .allowed_protos   = RC_BIT_RC5 |
+                                           RC_BIT_RC6_MCE |
+                                           RC_BIT_NEC,
                        .change_protocol  = dib0700_change_protocol,
                },
        }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
@@ -4394,9 +4394,9 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                        .rc_codes         = RC_MAP_DIB0700_RC5_TABLE,
                        .module_name      = "dib0700",
                        .rc_query         = dib0700_rc_query_old_firmware,
-                       .allowed_protos   = RC_TYPE_RC5 |
-                                           RC_TYPE_RC6 |
-                                           RC_TYPE_NEC,
+                       .allowed_protos   = RC_BIT_RC5 |
+                                           RC_BIT_RC6_MCE |
+                                           RC_BIT_NEC,
                        .change_protocol  = dib0700_change_protocol,
                },
        }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
@@ -4433,9 +4433,9 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                        .rc_codes         = RC_MAP_DIB0700_RC5_TABLE,
                        .module_name      = "dib0700",
                        .rc_query         = dib0700_rc_query_old_firmware,
-                       .allowed_protos   = RC_TYPE_RC5 |
-                                           RC_TYPE_RC6 |
-                                           RC_TYPE_NEC,
+                       .allowed_protos   = RC_BIT_RC5 |
+                                           RC_BIT_RC6_MCE |
+                                           RC_BIT_NEC,
                        .change_protocol  = dib0700_change_protocol,
                },
        }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
@@ -4472,9 +4472,9 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                        .rc_codes         = RC_MAP_DIB0700_RC5_TABLE,
                        .module_name      = "dib0700",
                        .rc_query         = dib0700_rc_query_old_firmware,
-                       .allowed_protos   = RC_TYPE_RC5 |
-                                           RC_TYPE_RC6 |
-                                           RC_TYPE_NEC,
+                       .allowed_protos   = RC_BIT_RC5 |
+                                           RC_BIT_RC6_MCE |
+                                           RC_BIT_NEC,
                        .change_protocol  = dib0700_change_protocol,
                },
        }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
@@ -4511,9 +4511,9 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                        .rc_codes         = RC_MAP_DIB0700_RC5_TABLE,
                        .module_name      = "dib0700",
                        .rc_query         = dib0700_rc_query_old_firmware,
-                       .allowed_protos   = RC_TYPE_RC5 |
-                                           RC_TYPE_RC6 |
-                                           RC_TYPE_NEC,
+                       .allowed_protos   = RC_BIT_RC5 |
+                                           RC_BIT_RC6_MCE |
+                                           RC_BIT_NEC,
                        .change_protocol  = dib0700_change_protocol,
                },
        }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
@@ -4550,9 +4550,9 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                        .rc_codes         = RC_MAP_DIB0700_RC5_TABLE,
                        .module_name      = "dib0700",
                        .rc_query         = dib0700_rc_query_old_firmware,
-                       .allowed_protos   = RC_TYPE_RC5 |
-                                           RC_TYPE_RC6 |
-                                           RC_TYPE_NEC,
+                       .allowed_protos   = RC_BIT_RC5 |
+                                           RC_BIT_RC6_MCE |
+                                           RC_BIT_NEC,
                        .change_protocol  = dib0700_change_protocol,
                },
        }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
@@ -4589,9 +4589,9 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                        .rc_codes         = RC_MAP_DIB0700_RC5_TABLE,
                        .module_name      = "dib0700",
                        .rc_query         = dib0700_rc_query_old_firmware,
-                       .allowed_protos   = RC_TYPE_RC5 |
-                                           RC_TYPE_RC6 |
-                                           RC_TYPE_NEC,
+                       .allowed_protos   = RC_BIT_RC5 |
+                                           RC_BIT_RC6_MCE |
+                                           RC_BIT_NEC,
                        .change_protocol  = dib0700_change_protocol,
                },
        }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
@@ -4644,9 +4644,9 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                        .rc_codes         = RC_MAP_DIB0700_RC5_TABLE,
                        .module_name      = "dib0700",
                        .rc_query         = dib0700_rc_query_old_firmware,
-                       .allowed_protos   = RC_TYPE_RC5 |
-                                           RC_TYPE_RC6 |
-                                           RC_TYPE_NEC,
+                       .allowed_protos   = RC_BIT_RC5 |
+                                           RC_BIT_RC6_MCE |
+                                           RC_BIT_NEC,
                        .change_protocol  = dib0700_change_protocol,
                },
        }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
@@ -4681,9 +4681,9 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                        .rc_codes         = RC_MAP_DIB0700_RC5_TABLE,
                        .module_name      = "dib0700",
                        .rc_query         = dib0700_rc_query_old_firmware,
-                       .allowed_protos   = RC_TYPE_RC5 |
-                                           RC_TYPE_RC6 |
-                                           RC_TYPE_NEC,
+                       .allowed_protos   = RC_BIT_RC5 |
+                                           RC_BIT_RC6_MCE |
+                                           RC_BIT_NEC,
                        .change_protocol  = dib0700_change_protocol,
                },
        }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
@@ -4721,9 +4721,9 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                        .rc_codes         = RC_MAP_DIB0700_RC5_TABLE,
                        .module_name      = "dib0700",
                        .rc_query         = dib0700_rc_query_old_firmware,
-                       .allowed_protos   = RC_TYPE_RC5 |
-                                           RC_TYPE_RC6 |
-                                           RC_TYPE_NEC,
+                       .allowed_protos   = RC_BIT_RC5 |
+                                           RC_BIT_RC6_MCE |
+                                           RC_BIT_NEC,
                        .change_protocol  = dib0700_change_protocol,
                },
        }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
@@ -4761,9 +4761,9 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                        .rc_codes         = RC_MAP_DIB0700_RC5_TABLE,
                        .module_name      = "dib0700",
                        .rc_query         = dib0700_rc_query_old_firmware,
-                       .allowed_protos   = RC_TYPE_RC5 |
-                                           RC_TYPE_RC6 |
-                                           RC_TYPE_NEC,
+                       .allowed_protos   = RC_BIT_RC5 |
+                                           RC_BIT_RC6_MCE |
+                                           RC_BIT_NEC,
                        .change_protocol  = dib0700_change_protocol,
                },
        }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
@@ -4802,9 +4802,9 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                        .rc_codes         = RC_MAP_DIB0700_RC5_TABLE,
                        .module_name      = "dib0700",
                        .rc_query         = dib0700_rc_query_old_firmware,
-                       .allowed_protos   = RC_TYPE_RC5 |
-                                           RC_TYPE_RC6 |
-                                           RC_TYPE_NEC,
+                       .allowed_protos   = RC_BIT_RC5 |
+                                           RC_BIT_RC6_MCE |
+                                           RC_BIT_NEC,
                        .change_protocol  = dib0700_change_protocol,
                },
        },
index aab0f99bc892bc764530e9966b87561eede5974f..ce4c4e3b58bb7516f9bdff338d1b6b8ed2d0332e 100644 (file)
@@ -202,7 +202,7 @@ struct dvb_rc {
        u64 protocol;
        u64 allowed_protos;
        enum rc_driver_type driver_type;
-       int (*change_protocol)(struct rc_dev *dev, u64 rc_type);
+       int (*change_protocol)(struct rc_dev *dev, u64 *rc_type);
        char *module_name;
        int (*rc_query) (struct dvb_usb_device *d);
        int rc_interval;
index 02e878577c3dcb33f2cb18f0cfe9b6361a73b452..d1ddfa13de86d8a474796e0af2da49bdcb8eaa78 100644 (file)
@@ -927,7 +927,7 @@ static struct dvb_usb_device_properties pctv452e_properties = {
 
        .rc.core = {
                .rc_codes       = RC_MAP_DIB0700_RC5_TABLE,
-               .allowed_protos = RC_TYPE_UNKNOWN,
+               .allowed_protos = RC_BIT_UNKNOWN,
                .rc_query       = pctv452e_rc_query,
                .rc_interval    = 100,
        },
@@ -980,7 +980,7 @@ static struct dvb_usb_device_properties tt_connect_s2_3600_properties = {
 
        .rc.core = {
                .rc_codes       = RC_MAP_TT_1500,
-               .allowed_protos = RC_TYPE_UNKNOWN,
+               .allowed_protos = RC_BIT_UNKNOWN,
                .rc_query       = pctv452e_rc_query,
                .rc_interval    = 100,
        },
index 7a8c8c18590fdcb16c561cff57ea6d2abc6f875e..40832a1aef6c71c0df2eaf51ffdea327bafe18da 100644 (file)
@@ -732,7 +732,7 @@ static struct dvb_usb_device_properties technisat_usb2_devices = {
                .rc_codes    = RC_MAP_TECHNISAT_USB2,
                .module_name = "technisat-usb2",
                .rc_query    = technisat_usb2_rc_query,
-               .allowed_protos = RC_TYPE_ALL,
+               .allowed_protos = RC_BIT_ALL,
                .driver_type    = RC_DRIVER_IR_RAW,
        }
 };
index 6a50cdea3bcee539a79ccecd9a211c13309b803d..bcdac225ebe10a2cd3c67c8496fdddb92fe9d5f2 100644 (file)
@@ -741,7 +741,7 @@ static struct dvb_usb_device_properties ttusb2_properties_ct3650 = {
                .rc_interval      = 150, /* Less than IR_KEYPRESS_TIMEOUT */
                .rc_codes         = RC_MAP_TT_1500,
                .rc_query         = tt3650_rc_query,
-               .allowed_protos   = RC_TYPE_UNKNOWN,
+               .allowed_protos   = RC_BIT_UNKNOWN,
        },
 
        .num_adapters = 1,
index 97d36b4f19db95094bda60d549888e6e564315cf..660bf803c9e4b8df04defd0c0a0758280e30a69b 100644 (file)
@@ -345,7 +345,7 @@ static void em28xx_ir_stop(struct rc_dev *rc)
        cancel_delayed_work_sync(&ir->work);
 }
 
-static int em28xx_ir_change_protocol(struct rc_dev *rc_dev, u64 rc_type)
+static int em28xx_ir_change_protocol(struct rc_dev *rc_dev, u64 *rc_type)
 {
        int rc = 0;
        struct em28xx_IR *ir = rc_dev->priv;
@@ -354,14 +354,16 @@ static int em28xx_ir_change_protocol(struct rc_dev *rc_dev, u64 rc_type)
 
        /* Adjust xclk based o IR table for RC5/NEC tables */
 
-       if (rc_type == RC_TYPE_RC5) {
+       if (*rc_type & RC_BIT_RC5) {
                dev->board.xclk |= EM28XX_XCLK_IR_RC5_MODE;
                ir->full_code = 1;
-       } else if (rc_type == RC_TYPE_NEC) {
+               *rc_type = RC_BIT_RC5;
+       } else if (*rc_type & RC_BIT_NEC) {
                dev->board.xclk &= ~EM28XX_XCLK_IR_RC5_MODE;
                ir_config = EM2874_IR_NEC;
                ir->full_code = 1;
-       } else if (rc_type != RC_TYPE_UNKNOWN)
+               *rc_type = RC_BIT_NEC;
+       } else if (*rc_type != RC_BIT_UNKNOWN)
                rc = -EINVAL;
 
        em28xx_write_reg_bits(dev, EM28XX_R0F_XCLK, dev->board.xclk,
@@ -524,6 +526,7 @@ static int em28xx_ir_init(struct em28xx *dev)
        struct em28xx_IR *ir;
        struct rc_dev *rc;
        int err = -ENOMEM;
+       u64 rc_type;
 
        if (dev->board.ir_codes == NULL) {
                /* No remote control support */
@@ -546,14 +549,15 @@ static int em28xx_ir_init(struct em28xx *dev)
         * em2874 supports more protocols. For now, let's just announce
         * the two protocols that were already tested
         */
-       rc->allowed_protos = RC_TYPE_RC5 | RC_TYPE_NEC;
+       rc->allowed_protos = RC_BIT_RC5 | RC_BIT_NEC;
        rc->priv = ir;
        rc->change_protocol = em28xx_ir_change_protocol;
        rc->open = em28xx_ir_start;
        rc->close = em28xx_ir_stop;
 
        /* By default, keep protocol field untouched */
-       err = em28xx_ir_change_protocol(rc, RC_TYPE_UNKNOWN);
+       rc_type = RC_BIT_UNKNOWN;
+       err = em28xx_ir_change_protocol(rc, &rc_type);
        if (err)
                goto err_out_free;
 
index 82e819fa91c0814047074b867ae2bca713570b75..031cf024304c356e8573f13119505de49b71e1a8 100644 (file)
@@ -55,7 +55,7 @@ struct i2c_client *hdpvr_register_ir_rx_i2c(struct hdpvr_device *dev)
        /* Our default information for ir-kbd-i2c.c to use */
        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->type = RC_BIT_RC5;
        init_data->name = "HD-PVR";
        init_data->polling_interval = 405; /* ms, duplicated from Windows */
        hdpvr_ir_rx_i2c_board_info.platform_data = init_data;
index 885ce11f222d779e5320e2dc43494bc6b7011cd0..9ab596c78a4e35a0f23af1a5f4422741bbcc71d7 100644 (file)
@@ -581,7 +581,7 @@ static void pvr2_i2c_register_ir(struct pvr2_hdw *hdw)
        case PVR2_IR_SCHEME_29XXX: /* Original 29xxx device */
                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->type                  = RC_BIT_RC5;
                init_data->name                  = hdw->hdw_desc->description;
                init_data->polling_interval      = 100; /* ms From ir-kbd-i2c */
                /* IR Receiver */
@@ -596,7 +596,7 @@ static void pvr2_i2c_register_ir(struct pvr2_hdw *hdw)
        case PVR2_IR_SCHEME_24XXX_MCE: /* 24xxx MCE device */
                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->type                  = RC_BIT_RC5;
                init_data->name                  = hdw->hdw_desc->description;
                /* IR Receiver */
                info.addr          = 0x71;
index dffbd4bd47b15d92ffff672189aa2f18e90be4f0..8a6bbf1d80e1a484956bf655c9a1df75752a3b63 100644 (file)
@@ -109,12 +109,12 @@ static int tm6000_ir_config(struct tm6000_IR *ir)
         */
 
        switch (ir->rc_type) {
-       case RC_TYPE_NEC:
+       case RC_BIT_NEC:
                leader = 900;   /* ms */
                pulse  = 700;   /* ms - the actual value would be 562 */
                break;
        default:
-       case RC_TYPE_RC5:
+       case RC_BIT_RC5:
                leader = 900;   /* ms - from the NEC decoding */
                pulse  = 1780;  /* ms - The actual value would be 1776 */
                break;
@@ -122,12 +122,12 @@ static int tm6000_ir_config(struct tm6000_IR *ir)
 
        pulse = ir_clock_mhz * pulse;
        leader = ir_clock_mhz * leader;
-       if (ir->rc_type == RC_TYPE_NEC)
+       if (ir->rc_type == RC_BIT_NEC)
                leader = leader | 0x8000;
 
        dprintk(2, "%s: %s, %d MHz, leader = 0x%04x, pulse = 0x%06x \n",
                __func__,
-               (ir->rc_type == RC_TYPE_NEC) ? "NEC" : "RC-5",
+               (ir->rc_type == RC_BIT_NEC) ? "NEC" : "RC-5",
                ir_clock_mhz, leader, pulse);
 
        /* Remote WAKEUP = enable, normal mode, from IR decoder output */
@@ -297,7 +297,7 @@ static void tm6000_ir_stop(struct rc_dev *rc)
        cancel_delayed_work_sync(&ir->work);
 }
 
-static int tm6000_ir_change_protocol(struct rc_dev *rc, u64 rc_type)
+static int tm6000_ir_change_protocol(struct rc_dev *rc, u64 *rc_type)
 {
        struct tm6000_IR *ir = rc->priv;
 
@@ -306,10 +306,10 @@ static int tm6000_ir_change_protocol(struct rc_dev *rc, u64 rc_type)
 
        dprintk(2, "%s\n",__func__);
 
-       if ((rc->rc_map.scan) && (rc_type == RC_TYPE_NEC))
+       if ((rc->rc_map.scan) && (*rc_type == RC_BIT_NEC))
                ir->key_addr = ((rc->rc_map.scan[0].scancode >> 8) & 0xffff);
 
-       ir->rc_type = rc_type;
+       ir->rc_type = *rc_type;
 
        tm6000_ir_config(ir);
        /* TODO */
@@ -398,6 +398,7 @@ int tm6000_ir_init(struct tm6000_core *dev)
        struct tm6000_IR *ir;
        struct rc_dev *rc;
        int err = -ENOMEM;
+       u64 rc_type;
 
        if (!enable_ir)
                return -ENODEV;
@@ -421,7 +422,7 @@ int tm6000_ir_init(struct tm6000_core *dev)
        ir->rc = rc;
 
        /* input setup */
-       rc->allowed_protos = RC_TYPE_RC5 | RC_TYPE_NEC;
+       rc->allowed_protos = RC_BIT_RC5 | RC_BIT_NEC;
        /* Neded, in order to support NEC remotes with 24 or 32 bits */
        rc->scanmask = 0xffff;
        rc->priv = ir;
@@ -444,7 +445,8 @@ int tm6000_ir_init(struct tm6000_core *dev)
        usb_make_path(dev->udev, ir->phys, sizeof(ir->phys));
        strlcat(ir->phys, "/input0", sizeof(ir->phys));
 
-       tm6000_ir_change_protocol(rc, RC_TYPE_UNKNOWN);
+       rc_type = RC_BIT_UNKNOWN;
+       tm6000_ir_change_protocol(rc, &rc_type);
 
        rc->input_name = ir->name;
        rc->input_phys = ir->phys;
index 768aa77925cd952049cff78ae1c6ff8116369d90..e221bc74020b2f5505e02f114789bb24a46d2fd1 100644 (file)
@@ -37,7 +37,7 @@ enum ir_kbd_get_key_fn {
 struct IR_i2c_init_data {
        char                    *ir_codes;
        const char              *name;
-       u64                     type; /* RC_TYPE_RC5, etc */
+       u64                     type; /* RC_BIT_RC5, etc */
        u32                     polling_interval; /* 0 means DEFAULT_POLLING_INTERVAL */
 
        /*
index b0c494a6907904b9ceb38dac8be868f06b276d5a..f03445f3c767d662b2b08bb57830cfd1ae8c3892 100644 (file)
@@ -50,7 +50,7 @@ enum rc_driver_type {
  * @input_dev: the input child device used to communicate events to userspace
  * @driver_type: specifies if protocol decoding is done in hardware or software
  * @idle: used to keep track of RX state
- * @allowed_protos: bitmask with the supported RC_TYPE_* protocols
+ * @allowed_protos: bitmask with the supported RC_BIT_* protocols
  * @scanmask: some hardware decoders are not capable of providing the full
  *     scancode to the application. As this is a hardware limit, we can't do
  *     anything with it. Yet, as the same keycode table can be used with other
@@ -113,7 +113,7 @@ struct rc_dev {
        u32                             max_timeout;
        u32                             rx_resolution;
        u32                             tx_resolution;
-       int                             (*change_protocol)(struct rc_dev *dev, u64 rc_type);
+       int                             (*change_protocol)(struct rc_dev *dev, u64 *rc_type);
        int                             (*open)(struct rc_dev *dev);
        void                            (*close)(struct rc_dev *dev);
        int                             (*s_tx_mask)(struct rc_dev *dev, u32 mask);
index cfd5163ff7f3dc7dfb95cbe4ac8b00141a0cd9db..74f55a3f14eb80905186e927bd1d5f34bef070c6 100644 (file)
 
 #include <linux/input.h>
 
-#define RC_TYPE_UNKNOWN        0
-#define RC_TYPE_RC5    (1  << 0)       /* Philips RC5 protocol */
-#define RC_TYPE_NEC    (1  << 1)
-#define RC_TYPE_RC6    (1  << 2)       /* Philips RC6 protocol */
-#define RC_TYPE_JVC    (1  << 3)       /* JVC protocol */
-#define RC_TYPE_SONY   (1  << 4)       /* Sony12/15/20 protocol */
-#define RC_TYPE_RC5_SZ (1  << 5)       /* RC5 variant used by Streamzap */
-#define RC_TYPE_SANYO   (1  << 6)      /* Sanyo protocol */
-#define RC_TYPE_MCE_KBD        (1  << 29)      /* RC6-ish MCE keyboard/mouse */
-#define RC_TYPE_LIRC   (1  << 30)      /* Pass raw IR to lirc userspace */
-#define RC_TYPE_OTHER  (1u << 31)
+enum rc_type {
+       RC_TYPE_UNKNOWN         = 0,    /* Protocol not known */
+       RC_TYPE_OTHER           = 1,    /* Protocol known but proprietary */
+       RC_TYPE_LIRC            = 2,    /* Pass raw IR to lirc userspace */
+       RC_TYPE_RC5             = 3,    /* Philips RC5 protocol */
+       RC_TYPE_RC5X            = 4,    /* Philips RC5x protocol */
+       RC_TYPE_RC5_SZ          = 5,    /* StreamZap variant of RC5 */
+       RC_TYPE_JVC             = 6,    /* JVC protocol */
+       RC_TYPE_SONY12          = 7,    /* Sony 12 bit protocol */
+       RC_TYPE_SONY15          = 8,    /* Sony 15 bit protocol */
+       RC_TYPE_SONY20          = 9,    /* Sony 20 bit protocol */
+       RC_TYPE_NEC             = 10,   /* NEC protocol */
+       RC_TYPE_SANYO           = 11,   /* Sanyo protocol */
+       RC_TYPE_MCE_KBD         = 12,   /* RC6-ish MCE keyboard/mouse */
+       RC_TYPE_RC6_0           = 13,   /* Philips RC6-0-16 protocol */
+       RC_TYPE_RC6_6A_20       = 14,   /* Philips RC6-6A-20 protocol */
+       RC_TYPE_RC6_6A_24       = 15,   /* Philips RC6-6A-24 protocol */
+       RC_TYPE_RC6_6A_32       = 16,   /* Philips RC6-6A-32 protocol */
+       RC_TYPE_RC6_MCE         = 17,   /* MCE (Philips RC6-6A-32 subtype) protocol */
+};
+
+#define RC_BIT_NONE            0
+#define RC_BIT_UNKNOWN         (1 << RC_TYPE_UNKNOWN)
+#define RC_BIT_OTHER           (1 << RC_TYPE_OTHER)
+#define RC_BIT_LIRC            (1 << RC_TYPE_LIRC)
+#define RC_BIT_RC5             (1 << RC_TYPE_RC5)
+#define RC_BIT_RC5X            (1 << RC_TYPE_RC5X)
+#define RC_BIT_RC5_SZ          (1 << RC_TYPE_RC5_SZ)
+#define RC_BIT_JVC             (1 << RC_TYPE_JVC)
+#define RC_BIT_SONY12          (1 << RC_TYPE_SONY12)
+#define RC_BIT_SONY15          (1 << RC_TYPE_SONY15)
+#define RC_BIT_SONY20          (1 << RC_TYPE_SONY20)
+#define RC_BIT_NEC             (1 << RC_TYPE_NEC)
+#define RC_BIT_SANYO           (1 << RC_TYPE_SANYO)
+#define RC_BIT_MCE_KBD         (1 << RC_TYPE_MCE_KBD)
+#define RC_BIT_RC6_0           (1 << RC_TYPE_RC6_0)
+#define RC_BIT_RC6_6A_20       (1 << RC_TYPE_RC6_6A_20)
+#define RC_BIT_RC6_6A_24       (1 << RC_TYPE_RC6_6A_24)
+#define RC_BIT_RC6_6A_32       (1 << RC_TYPE_RC6_6A_32)
+#define RC_BIT_RC6_MCE         (1 << RC_TYPE_RC6_MCE)
 
-#define RC_TYPE_ALL (RC_TYPE_RC5    | RC_TYPE_NEC   | RC_TYPE_RC6     | \
-                    RC_TYPE_JVC    | RC_TYPE_SONY  | RC_TYPE_LIRC    | \
-                    RC_TYPE_RC5_SZ | RC_TYPE_SANYO | RC_TYPE_MCE_KBD | \
-                    RC_TYPE_OTHER)
+#define RC_BIT_ALL     (RC_BIT_UNKNOWN | RC_BIT_OTHER | RC_BIT_LIRC | \
+                        RC_BIT_RC5 | RC_BIT_RC5X | RC_BIT_RC5_SZ | \
+                        RC_BIT_JVC | \
+                        RC_BIT_SONY12 | RC_BIT_SONY15 | RC_BIT_SONY20 | \
+                        RC_BIT_NEC | 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)
 
 struct rc_map_table {
        u32     scancode;
@@ -38,7 +70,7 @@ struct rc_map {
        unsigned int            size;   /* Max number of entries */
        unsigned int            len;    /* Used number of entries */
        unsigned int            alloc;  /* Size of *scan in bytes */
-       u64                     rc_type;
+       enum rc_type            rc_type;
        const char              *name;
        spinlock_t              lock;
 };