[media] rc: img-ir: add scancode requests to a struct
authorSifan Naeem <sifan.naeem@imgtec.com>
Thu, 11 Dec 2014 20:06:22 +0000 (17:06 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Tue, 23 Dec 2014 17:11:50 +0000 (15:11 -0200)
The information being requested of hardware decode callbacks through
the img-ir-hw scancode API is mounting up, so combine it into a struct
which can be passed in with a single pointer rather than multiple
pointer arguments. This allows it to be extended more easily without
touching all the hardware decode callbacks.

Signed-off-by: Sifan Naeem <sifan.naeem@imgtec.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/rc/img-ir/img-ir-hw.c
drivers/media/rc/img-ir/img-ir-hw.h
drivers/media/rc/img-ir/img-ir-jvc.c
drivers/media/rc/img-ir/img-ir-nec.c
drivers/media/rc/img-ir/img-ir-sanyo.c
drivers/media/rc/img-ir/img-ir-sharp.c
drivers/media/rc/img-ir/img-ir-sony.c

index 2fd47c9bf5d8f9a8f0c21bffa2dcd68a07e98609..88fada5dd23892ed2619b2a661b6e1642de9646a 100644 (file)
@@ -806,20 +806,22 @@ static void img_ir_handle_data(struct img_ir_priv *priv, u32 len, u64 raw)
        struct img_ir_priv_hw *hw = &priv->hw;
        const struct img_ir_decoder *dec = hw->decoder;
        int ret = IMG_IR_SCANCODE;
-       u32 scancode;
-       enum rc_type protocol = RC_TYPE_UNKNOWN;
+       struct img_ir_scancode_req request;
+
+       request.protocol = RC_TYPE_UNKNOWN;
 
        if (dec->scancode)
-               ret = dec->scancode(len, raw, &protocol, &scancode, hw->enabled_protocols);
+               ret = dec->scancode(len, raw, hw->enabled_protocols, &request);
        else if (len >= 32)
-               scancode = (u32)raw;
+               request.scancode = (u32)raw;
        else if (len < 32)
-               scancode = (u32)raw & ((1 << len)-1);
+               request.scancode = (u32)raw & ((1 << len)-1);
        dev_dbg(priv->dev, "data (%u bits) = %#llx\n",
                len, (unsigned long long)raw);
        if (ret == IMG_IR_SCANCODE) {
-               dev_dbg(priv->dev, "decoded scan code %#x\n", scancode);
-               rc_keydown(hw->rdev, protocol, scancode, 0);
+               dev_dbg(priv->dev, "decoded scan code %#x\n",
+                       request.scancode);
+               rc_keydown(hw->rdev, request.protocol, request.scancode, 0);
                img_ir_end_repeat(priv);
        } else if (ret == IMG_IR_REPEATCODE) {
                if (hw->mode == IMG_IR_M_REPEATING) {
index 5c2b216c5fe3eb3723177d6c2e7145e1d9cba75b..aeef3d1dd30d585a2ba1cb2c571e5fbbe5416d01 100644 (file)
@@ -132,6 +132,18 @@ struct img_ir_timing_regvals {
 #define IMG_IR_SCANCODE                0       /* new scancode */
 #define IMG_IR_REPEATCODE      1       /* repeat the previous code */
 
+/**
+ * struct img_ir_scancode_req - Scancode request data.
+ * @protocol:  Protocol code of received message (defaults to
+ *             RC_TYPE_UNKNOWN).
+ * @scancode:  Scan code of received message (must be written by
+ *             handler if IMG_IR_SCANCODE is returned).
+ */
+struct img_ir_scancode_req {
+       enum rc_type protocol;
+       u32 scancode;
+};
+
 /**
  * struct img_ir_decoder - Decoder settings for an IR protocol.
  * @type:      Protocol types bitmap.
@@ -162,8 +174,8 @@ struct img_ir_decoder {
        struct img_ir_control           control;
 
        /* scancode logic */
-       int (*scancode)(int len, u64 raw, enum rc_type *protocol,
-                       u32 *scancode, u64 enabled_protocols);
+       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);
 };
index a60dda8bf706a2a0fef230ba64b217ff03a3adf9..d3e2fc0bcfe12aa97c78385fa587ce65486496e0 100644 (file)
@@ -12,8 +12,8 @@
 #include "img-ir-hw.h"
 
 /* Convert JVC data to a scancode */
-static int img_ir_jvc_scancode(int len, u64 raw, enum rc_type *protocol,
-                              u32 *scancode, u64 enabled_protocols)
+static int img_ir_jvc_scancode(int len, u64 raw, u64 enabled_protocols,
+                              struct img_ir_scancode_req *request)
 {
        unsigned int cust, data;
 
@@ -23,8 +23,8 @@ static int img_ir_jvc_scancode(int len, u64 raw, enum rc_type *protocol,
        cust = (raw >> 0) & 0xff;
        data = (raw >> 8) & 0xff;
 
-       *protocol = RC_TYPE_JVC;
-       *scancode = cust << 8 | data;
+       request->protocol = RC_TYPE_JVC;
+       request->scancode = cust << 8 | data;
        return IMG_IR_SCANCODE;
 }
 
index 739897549b5b2ecc79c5f09e1cea80faffcf6d15..27a7ea8f1260bd53620fbdc7a7d06f837accd0d9 100644 (file)
@@ -13,8 +13,8 @@
 #include <linux/bitrev.h>
 
 /* Convert NEC data to a scancode */
-static int img_ir_nec_scancode(int len, u64 raw, enum rc_type *protocol,
-                              u32 *scancode, u64 enabled_protocols)
+static int img_ir_nec_scancode(int len, u64 raw, u64 enabled_protocols,
+                              struct img_ir_scancode_req *request)
 {
        unsigned int addr, addr_inv, data, data_inv;
        /* a repeat code has no data */
@@ -30,23 +30,23 @@ static int img_ir_nec_scancode(int len, u64 raw, enum rc_type *protocol,
        if ((data_inv ^ data) != 0xff) {
                /* 32-bit NEC (used by Apple and TiVo remotes) */
                /* scan encoding: as transmitted, MSBit = first received bit */
-               *scancode = bitrev8(addr)     << 24 |
-                           bitrev8(addr_inv) << 16 |
-                           bitrev8(data)     <<  8 |
-                           bitrev8(data_inv);
+               request->scancode = bitrev8(addr)     << 24 |
+                               bitrev8(addr_inv) << 16 |
+                               bitrev8(data)     <<  8 |
+                               bitrev8(data_inv);
        } else if ((addr_inv ^ addr) != 0xff) {
                /* Extended NEC */
                /* scan encoding: AAaaDD */
-               *scancode = addr     << 16 |
-                           addr_inv <<  8 |
-                           data;
+               request->scancode = addr     << 16 |
+                               addr_inv <<  8 |
+                               data;
        } else {
                /* Normal NEC */
                /* scan encoding: AADD */
-               *scancode = addr << 8 |
-                           data;
+               request->scancode = addr << 8 |
+                               data;
        }
-       *protocol = RC_TYPE_NEC;
+       request->protocol = RC_TYPE_NEC;
        return IMG_IR_SCANCODE;
 }
 
index 6b0653ecdf5a02d04450801d38f29a5973782cd7..f394994ffc22d3c8dd00a96cb8c4e43afb1a8277 100644 (file)
@@ -23,8 +23,8 @@
 #include "img-ir-hw.h"
 
 /* Convert Sanyo data to a scancode */
-static int img_ir_sanyo_scancode(int len, u64 raw, enum rc_type *protocol,
-                                u32 *scancode, u64 enabled_protocols)
+static int img_ir_sanyo_scancode(int len, u64 raw, u64 enabled_protocols,
+                                struct img_ir_scancode_req *request)
 {
        unsigned int addr, addr_inv, data, data_inv;
        /* a repeat code has no data */
@@ -44,8 +44,8 @@ static int img_ir_sanyo_scancode(int len, u64 raw, enum rc_type *protocol,
                return -EINVAL;
 
        /* Normal Sanyo */
-       *protocol = RC_TYPE_SANYO;
-       *scancode = addr << 8 | data;
+       request->protocol = RC_TYPE_SANYO;
+       request->scancode = addr << 8 | data;
        return IMG_IR_SCANCODE;
 }
 
index 3300a38802acc63e9100c8d0558775f56bda8f41..fe5acc4f030e13c33ef3ae45cdff1ccbc0ec05ca 100644 (file)
@@ -12,8 +12,8 @@
 #include "img-ir-hw.h"
 
 /* Convert Sharp data to a scancode */
-static int img_ir_sharp_scancode(int len, u64 raw, enum rc_type *protocol,
-                                u32 *scancode, u64 enabled_protocols)
+static int img_ir_sharp_scancode(int len, u64 raw, u64 enabled_protocols,
+                                struct img_ir_scancode_req *request)
 {
        unsigned int addr, cmd, exp, chk;
 
@@ -32,8 +32,8 @@ static int img_ir_sharp_scancode(int len, u64 raw, enum rc_type *protocol,
                /* probably the second half of the message */
                return -EINVAL;
 
-       *protocol = RC_TYPE_SHARP;
-       *scancode = addr << 8 | cmd;
+       request->protocol = RC_TYPE_SHARP;
+       request->scancode = addr << 8 | cmd;
        return IMG_IR_SCANCODE;
 }
 
index 3a0f17b0752c6dd170edaa2ae0c67b82a7786d05..7f7375f82ed60017f0dfe6c0517b7ec93ecd85bb 100644 (file)
@@ -12,8 +12,8 @@
 #include "img-ir-hw.h"
 
 /* Convert Sony data to a scancode */
-static int img_ir_sony_scancode(int len, u64 raw, enum rc_type *protocol,
-                               u32 *scancode, u64 enabled_protocols)
+static int img_ir_sony_scancode(int len, u64 raw, u64 enabled_protocols,
+                               struct img_ir_scancode_req *request)
 {
        unsigned int dev, subdev, func;
 
@@ -25,7 +25,7 @@ static int img_ir_sony_scancode(int len, u64 raw, enum rc_type *protocol,
                raw    >>= 7;
                dev    = raw & 0x1f;    /* next 5 bits */
                subdev = 0;
-               *protocol = RC_TYPE_SONY12;
+               request->protocol = RC_TYPE_SONY12;
                break;
        case 15:
                if (!(enabled_protocols & RC_BIT_SONY15))
@@ -34,7 +34,7 @@ static int img_ir_sony_scancode(int len, u64 raw, enum rc_type *protocol,
                raw    >>= 7;
                dev    = raw & 0xff;    /* next 8 bits */
                subdev = 0;
-               *protocol = RC_TYPE_SONY15;
+               request->protocol = RC_TYPE_SONY15;
                break;
        case 20:
                if (!(enabled_protocols & RC_BIT_SONY20))
@@ -44,12 +44,12 @@ static int img_ir_sony_scancode(int len, u64 raw, enum rc_type *protocol,
                dev    = raw & 0x1f;    /* next 5 bits */
                raw    >>= 5;
                subdev = raw & 0xff;    /* next 8 bits */
-               *protocol = RC_TYPE_SONY20;
+               request->protocol = RC_TYPE_SONY20;
                break;
        default:
                return -EINVAL;
        }
-       *scancode = dev << 16 | subdev << 8 | func;
+       request->scancode = dev << 16 | subdev << 8 | func;
        return IMG_IR_SCANCODE;
 }