Rather than guessing what variant a scancode is from its length,
use the new wakeup_protocol.

Signed-off-by: Sean Young <[email protected]>
Cc: James Hogan <[email protected]>
Cc: Sifan Naeem <[email protected]>
---
 drivers/media/rc/img-ir/img-ir-hw.c    |  2 +-
 drivers/media/rc/img-ir/img-ir-hw.h    |  2 +-
 drivers/media/rc/img-ir/img-ir-jvc.c   |  2 +-
 drivers/media/rc/img-ir/img-ir-nec.c   |  6 +++---
 drivers/media/rc/img-ir/img-ir-rc5.c   |  2 +-
 drivers/media/rc/img-ir/img-ir-rc6.c   |  2 +-
 drivers/media/rc/img-ir/img-ir-sanyo.c |  2 +-
 drivers/media/rc/img-ir/img-ir-sharp.c |  2 +-
 drivers/media/rc/img-ir/img-ir-sony.c  | 11 +++--------
 9 files changed, 13 insertions(+), 18 deletions(-)

diff --git a/drivers/media/rc/img-ir/img-ir-hw.c 
b/drivers/media/rc/img-ir/img-ir-hw.c
index 1a0811d..841d9d7 100644
--- a/drivers/media/rc/img-ir/img-ir-hw.c
+++ b/drivers/media/rc/img-ir/img-ir-hw.c
@@ -488,7 +488,7 @@ static int img_ir_set_filter(struct rc_dev *dev, enum 
rc_filter_type type,
        /* convert scancode filter to raw filter */
        filter.minlen = 0;
        filter.maxlen = ~0;
-       ret = hw->decoder->filter(sc_filter, &filter, hw->enabled_protocols);
+       ret = hw->decoder->filter(sc_filter, &filter, dev->wakeup_protocol);
        if (ret)
                goto unlock;
        dev_dbg(priv->dev, "IR raw %sfilter=%016llx & %016llx\n",
diff --git a/drivers/media/rc/img-ir/img-ir-hw.h 
b/drivers/media/rc/img-ir/img-ir-hw.h
index 91a2977..e1959ddc 100644
--- a/drivers/media/rc/img-ir/img-ir-hw.h
+++ b/drivers/media/rc/img-ir/img-ir-hw.h
@@ -179,7 +179,7 @@ struct img_ir_decoder {
        int (*scancode)(int len, u64 raw, u64 enabled_protocols,
                        struct img_ir_scancode_req *request);
        int (*filter)(const struct rc_scancode_filter *in,
-                     struct img_ir_filter *out, u64 protocols);
+                     struct img_ir_filter *out, enum rc_type protocol);
 };
 
 extern struct img_ir_decoder img_ir_nec;
diff --git a/drivers/media/rc/img-ir/img-ir-jvc.c 
b/drivers/media/rc/img-ir/img-ir-jvc.c
index d3e2fc0..10b302c 100644
--- a/drivers/media/rc/img-ir/img-ir-jvc.c
+++ b/drivers/media/rc/img-ir/img-ir-jvc.c
@@ -30,7 +30,7 @@ static int img_ir_jvc_scancode(int len, u64 raw, u64 
enabled_protocols,
 
 /* Convert JVC scancode to JVC data filter */
 static int img_ir_jvc_filter(const struct rc_scancode_filter *in,
-                            struct img_ir_filter *out, u64 protocols)
+                            struct img_ir_filter *out, enum rc_type protocol)
 {
        unsigned int cust, data;
        unsigned int cust_m, data_m;
diff --git a/drivers/media/rc/img-ir/img-ir-nec.c 
b/drivers/media/rc/img-ir/img-ir-nec.c
index 0931493..fff00d4 100644
--- a/drivers/media/rc/img-ir/img-ir-nec.c
+++ b/drivers/media/rc/img-ir/img-ir-nec.c
@@ -54,7 +54,7 @@ static int img_ir_nec_scancode(int len, u64 raw, u64 
enabled_protocols,
 
 /* Convert NEC scancode to NEC data filter */
 static int img_ir_nec_filter(const struct rc_scancode_filter *in,
-                            struct img_ir_filter *out, u64 protocols)
+                            struct img_ir_filter *out, enum rc_type protocol)
 {
        unsigned int addr, addr_inv, data, data_inv;
        unsigned int addr_m, addr_inv_m, data_m, data_inv_m;
@@ -62,7 +62,7 @@ static int img_ir_nec_filter(const struct rc_scancode_filter 
*in,
        data       = in->data & 0xff;
        data_m     = in->mask & 0xff;
 
-       if ((in->data | in->mask) & 0xff000000) {
+       if (protocol == RC_TYPE_NEC32) {
                /* 32-bit NEC (used by Apple and TiVo remotes) */
                /* scan encoding: as transmitted, MSBit = first received bit */
                addr       = bitrev8(in->data >> 24);
@@ -73,7 +73,7 @@ static int img_ir_nec_filter(const struct rc_scancode_filter 
*in,
                data_m     = bitrev8(in->mask >>  8);
                data_inv   = bitrev8(in->data >>  0);
                data_inv_m = bitrev8(in->mask >>  0);
-       } else if ((in->data | in->mask) & 0x00ff0000) {
+       } else if (protocol == RC_TYPE_NECX) {
                /* Extended NEC */
                /* scan encoding AAaaDD */
                addr       = (in->data >> 16) & 0xff;
diff --git a/drivers/media/rc/img-ir/img-ir-rc5.c 
b/drivers/media/rc/img-ir/img-ir-rc5.c
index a8a28a3..24a6bcf 100644
--- a/drivers/media/rc/img-ir/img-ir-rc5.c
+++ b/drivers/media/rc/img-ir/img-ir-rc5.c
@@ -41,7 +41,7 @@ static int img_ir_rc5_scancode(int len, u64 raw, u64 
enabled_protocols,
 
 /* Convert RC5 scancode to RC5 data filter */
 static int img_ir_rc5_filter(const struct rc_scancode_filter *in,
-                                struct img_ir_filter *out, u64 protocols)
+                            struct img_ir_filter *out, enum rc_type protocol)
 {
        /* Not supported by the hw. */
        return -EINVAL;
diff --git a/drivers/media/rc/img-ir/img-ir-rc6.c 
b/drivers/media/rc/img-ir/img-ir-rc6.c
index de1e275..451e2ef8 100644
--- a/drivers/media/rc/img-ir/img-ir-rc6.c
+++ b/drivers/media/rc/img-ir/img-ir-rc6.c
@@ -62,7 +62,7 @@ static int img_ir_rc6_scancode(int len, u64 raw, u64 
enabled_protocols,
 
 /* Convert RC6 scancode to RC6 data filter */
 static int img_ir_rc6_filter(const struct rc_scancode_filter *in,
-                                struct img_ir_filter *out, u64 protocols)
+                            struct img_ir_filter *out, enum rc_type protocol)
 {
        /* Not supported by the hw. */
        return -EINVAL;
diff --git a/drivers/media/rc/img-ir/img-ir-sanyo.c 
b/drivers/media/rc/img-ir/img-ir-sanyo.c
index f394994..8f542bd 100644
--- a/drivers/media/rc/img-ir/img-ir-sanyo.c
+++ b/drivers/media/rc/img-ir/img-ir-sanyo.c
@@ -51,7 +51,7 @@ static int img_ir_sanyo_scancode(int len, u64 raw, u64 
enabled_protocols,
 
 /* Convert Sanyo scancode to Sanyo data filter */
 static int img_ir_sanyo_filter(const struct rc_scancode_filter *in,
-                              struct img_ir_filter *out, u64 protocols)
+                              struct img_ir_filter *out, enum rc_type protocol)
 {
        unsigned int addr, addr_inv, data, data_inv;
        unsigned int addr_m, data_m;
diff --git a/drivers/media/rc/img-ir/img-ir-sharp.c 
b/drivers/media/rc/img-ir/img-ir-sharp.c
index fe5acc4..c8b4e9b 100644
--- a/drivers/media/rc/img-ir/img-ir-sharp.c
+++ b/drivers/media/rc/img-ir/img-ir-sharp.c
@@ -39,7 +39,7 @@ static int img_ir_sharp_scancode(int len, u64 raw, u64 
enabled_protocols,
 
 /* Convert Sharp scancode to Sharp data filter */
 static int img_ir_sharp_filter(const struct rc_scancode_filter *in,
-                              struct img_ir_filter *out, u64 protocols)
+                              struct img_ir_filter *out, enum rc_type protocol)
 {
        unsigned int addr, cmd, exp = 0, chk = 0;
        unsigned int addr_m, cmd_m, exp_m = 0, chk_m = 0;
diff --git a/drivers/media/rc/img-ir/img-ir-sony.c 
b/drivers/media/rc/img-ir/img-ir-sony.c
index 7f7375f..ecae41c 100644
--- a/drivers/media/rc/img-ir/img-ir-sony.c
+++ b/drivers/media/rc/img-ir/img-ir-sony.c
@@ -55,7 +55,7 @@ static int img_ir_sony_scancode(int len, u64 raw, u64 
enabled_protocols,
 
 /* Convert NEC scancode to NEC data filter */
 static int img_ir_sony_filter(const struct rc_scancode_filter *in,
-                             struct img_ir_filter *out, u64 protocols)
+                             struct img_ir_filter *out, enum rc_type protocol)
 {
        unsigned int dev, subdev, func;
        unsigned int dev_m, subdev_m, func_m;
@@ -68,19 +68,14 @@ static int img_ir_sony_filter(const struct 
rc_scancode_filter *in,
        func     = (in->data >> 0)  & 0x7f;
        func_m   = (in->mask >> 0)  & 0x7f;
 
-       if (subdev & subdev_m) {
+       if (protocol == RC_TYPE_SONY20) {
                /* can't encode subdev and higher device bits */
                if (dev & dev_m & 0xe0)
                        return -EINVAL;
-               /* subdevice (extended) bits only in 20 bit encoding */
-               if (!(protocols & RC_BIT_SONY20))
-                       return -EINVAL;
                len = 20;
                dev_m &= 0x1f;
-       } else if (dev & dev_m & 0xe0) {
+       } else if (protocol == RC_TYPE_SONY15) {
                /* upper device bits only in 15 bit encoding */
-               if (!(protocols & RC_BIT_SONY15))
-                       return -EINVAL;
                len = 15;
                subdev_m = 0;
        } else {
-- 
2.9.3

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to