]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/media/rc/ir-sony-decoder.c
Merge tag 'trace-ipi-tracepoints' of git://git.kernel.org/pub/scm/linux/kernel/git...
[karo-tx-linux.git] / drivers / media / rc / ir-sony-decoder.c
index 599c19a7336041eef4622563f99cbd3341915a2a..d12dc3da59316f1380a07a2cd9d3bb0f86ba6664 100644 (file)
@@ -42,11 +42,12 @@ enum sony_state {
 static int ir_sony_decode(struct rc_dev *dev, struct ir_raw_event ev)
 {
        struct sony_dec *data = &dev->raw->sony;
+       enum rc_type protocol;
        u32 scancode;
        u8 device, subdevice, function;
 
-       if (!rc_protocols_enabled(dev, RC_BIT_SONY12 | RC_BIT_SONY15 |
-                                 RC_BIT_SONY20))
+       if (!(dev->enabled_protocols &
+             (RC_BIT_SONY12 | RC_BIT_SONY15 | RC_BIT_SONY20)))
                return 0;
 
        if (!is_timing_event(ev)) {
@@ -124,31 +125,34 @@ static int ir_sony_decode(struct rc_dev *dev, struct ir_raw_event ev)
 
                switch (data->count) {
                case 12:
-                       if (!rc_protocols_enabled(dev, RC_BIT_SONY12)) {
+                       if (!(dev->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);
+                       protocol = RC_TYPE_SONY12;
                        break;
                case 15:
-                       if (!rc_protocols_enabled(dev, RC_BIT_SONY15)) {
+                       if (!(dev->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);
+                       protocol = RC_TYPE_SONY15;
                        break;
                case 20:
-                       if (!rc_protocols_enabled(dev, RC_BIT_SONY20)) {
+                       if (!(dev->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);
+                       protocol = RC_TYPE_SONY20;
                        break;
                default:
                        IR_dprintk(1, "Sony invalid bitcount %u\n", data->count);
@@ -157,7 +161,7 @@ static int ir_sony_decode(struct rc_dev *dev, struct ir_raw_event ev)
 
                scancode = device << 16 | subdevice << 8 | function;
                IR_dprintk(1, "Sony(%u) scancode 0x%05x\n", data->count, scancode);
-               rc_keydown(dev, scancode, 0);
+               rc_keydown(dev, protocol, scancode, 0);
                data->state = STATE_INACTIVE;
                return 0;
        }