From: James Hogan <james.hogan@imgtec.com>
To: Sifan Naeem <sifan.naeem@imgtec.com>, <mchehab@osg.samsung.com>
Cc: <linux-kernel@vger.kernel.org>, <linux-media@vger.kernel.org>,
<james.hartley@imgtec.com>, <ezequiel.garcia@imgtec.com>
Subject: Re: [PATCH 1/5] rc: img-ir: add scancode requests to a struct
Date: Mon, 8 Dec 2014 16:47:28 +0000 [thread overview]
Message-ID: <5485D620.7010900@imgtec.com> (raw)
In-Reply-To: <1417707523-7730-2-git-send-email-sifan.naeem@imgtec.com>
[-- Attachment #1: Type: text/plain, Size: 10306 bytes --]
On 04/12/14 15:38, Sifan Naeem wrote:
> 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>
Acked-by: James Hogan <james.hogan@imgtec.com>
Cheers
James
> ---
> drivers/media/rc/img-ir/img-ir-hw.c | 16 +++++++++-------
> drivers/media/rc/img-ir/img-ir-hw.h | 16 ++++++++++++++--
> drivers/media/rc/img-ir/img-ir-jvc.c | 8 ++++----
> drivers/media/rc/img-ir/img-ir-nec.c | 24 ++++++++++++------------
> drivers/media/rc/img-ir/img-ir-sanyo.c | 8 ++++----
> drivers/media/rc/img-ir/img-ir-sharp.c | 8 ++++----
> drivers/media/rc/img-ir/img-ir-sony.c | 12 ++++++------
> 7 files changed, 53 insertions(+), 39 deletions(-)
>
> diff --git a/drivers/media/rc/img-ir/img-ir-hw.c b/drivers/media/rc/img-ir/img-ir-hw.c
> index ec49f94..61850a6 100644
> --- a/drivers/media/rc/img-ir/img-ir-hw.c
> +++ b/drivers/media/rc/img-ir/img-ir-hw.c
> @@ -789,20 +789,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) {
> diff --git a/drivers/media/rc/img-ir/img-ir-hw.h b/drivers/media/rc/img-ir/img-ir-hw.h
> index 8fcc16c..1fc9583 100644
> --- a/drivers/media/rc/img-ir/img-ir-hw.h
> +++ b/drivers/media/rc/img-ir/img-ir-hw.h
> @@ -133,6 +133,18 @@ struct img_ir_timing_regvals {
> #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.
> * @tolerance: Timing tolerance as a percentage (default 10%).
> @@ -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);
> };
> diff --git a/drivers/media/rc/img-ir/img-ir-jvc.c b/drivers/media/rc/img-ir/img-ir-jvc.c
> index a60dda8..d3e2fc0 100644
> --- a/drivers/media/rc/img-ir/img-ir-jvc.c
> +++ b/drivers/media/rc/img-ir/img-ir-jvc.c
> @@ -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;
> }
>
> diff --git a/drivers/media/rc/img-ir/img-ir-nec.c b/drivers/media/rc/img-ir/img-ir-nec.c
> index 7398975..27a7ea8 100644
> --- a/drivers/media/rc/img-ir/img-ir-nec.c
> +++ b/drivers/media/rc/img-ir/img-ir-nec.c
> @@ -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;
> }
>
> diff --git a/drivers/media/rc/img-ir/img-ir-sanyo.c b/drivers/media/rc/img-ir/img-ir-sanyo.c
> index 6b0653e..f394994 100644
> --- a/drivers/media/rc/img-ir/img-ir-sanyo.c
> +++ b/drivers/media/rc/img-ir/img-ir-sanyo.c
> @@ -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;
> }
>
> diff --git a/drivers/media/rc/img-ir/img-ir-sharp.c b/drivers/media/rc/img-ir/img-ir-sharp.c
> index 3300a38..fe5acc4 100644
> --- a/drivers/media/rc/img-ir/img-ir-sharp.c
> +++ b/drivers/media/rc/img-ir/img-ir-sharp.c
> @@ -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;
> }
>
> diff --git a/drivers/media/rc/img-ir/img-ir-sony.c b/drivers/media/rc/img-ir/img-ir-sony.c
> index 3a0f17b..7f7375f 100644
> --- a/drivers/media/rc/img-ir/img-ir-sony.c
> +++ b/drivers/media/rc/img-ir/img-ir-sony.c
> @@ -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;
> }
>
>
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2014-12-08 16:47 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-04 15:38 [PATCH 0/5] rc: img-ir: rc5 and rc6 support added Sifan Naeem
2014-12-04 15:38 ` [PATCH 1/5] rc: img-ir: add scancode requests to a struct Sifan Naeem
2014-12-08 16:47 ` James Hogan [this message]
2014-12-04 15:38 ` [PATCH 2/5] rc: img-ir: pass toggle bit to the rc driver Sifan Naeem
2014-12-08 16:49 ` James Hogan
2014-12-04 15:38 ` [PATCH 3/5] rc: img-ir: biphase enabled with workaround Sifan Naeem
2014-12-08 17:17 ` James Hogan
2014-12-11 18:54 ` Sifan Naeem
2014-12-12 10:55 ` James Hogan
2014-12-12 12:35 ` Sifan Naeem
2014-12-04 15:38 ` [PATCH 4/5] rc: img-ir: add philips rc5 decoder module Sifan Naeem
2014-12-08 17:41 ` James Hogan
2014-12-04 15:38 ` [PATCH 5/5] rc: img-ir: add philips rc6 " Sifan Naeem
2014-12-08 17:45 ` James Hogan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5485D620.7010900@imgtec.com \
--to=james.hogan@imgtec.com \
--cc=ezequiel.garcia@imgtec.com \
--cc=james.hartley@imgtec.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@osg.samsung.com \
--cc=sifan.naeem@imgtec.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.