All of lore.kernel.org
 help / color / mirror / Atom feed
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 5/5] rc: img-ir: add philips rc6 decoder module
Date: Mon, 8 Dec 2014 17:45:18 +0000	[thread overview]
Message-ID: <5485E3AE.5070200@imgtec.com> (raw)
In-Reply-To: <1417707523-7730-6-git-send-email-sifan.naeem@imgtec.com>

[-- Attachment #1: Type: text/plain, Size: 6315 bytes --]

On 04/12/14 15:38, Sifan Naeem wrote:
> Add img-ir module for decoding Philips rc6 protocol.
> 
> Signed-off-by: Sifan Naeem <sifan.naeem@imgtec.com>

Aside from the "Philips" thing:

Acked-by: James Hogan <james.hogan@imgtec.com>

(It's unpleasant having unexplained timings for RC-6, but it's better
than no RC-6 support, and hopefully in the future it can be improved).

Cheers
James

> ---
>  drivers/media/rc/img-ir/Kconfig      |    8 +++
>  drivers/media/rc/img-ir/Makefile     |    1 +
>  drivers/media/rc/img-ir/img-ir-hw.c  |    3 +
>  drivers/media/rc/img-ir/img-ir-hw.h  |    1 +
>  drivers/media/rc/img-ir/img-ir-rc6.c |  117 ++++++++++++++++++++++++++++++++++
>  5 files changed, 130 insertions(+)
>  create mode 100644 drivers/media/rc/img-ir/img-ir-rc6.c
> 
> diff --git a/drivers/media/rc/img-ir/Kconfig b/drivers/media/rc/img-ir/Kconfig
> index b5b114f..4d3fca9 100644
> --- a/drivers/media/rc/img-ir/Kconfig
> +++ b/drivers/media/rc/img-ir/Kconfig
> @@ -66,3 +66,11 @@ config IR_IMG_RC5
>  	help
>  	   Say Y here to enable support for the RC5 protocol in the ImgTec
>  	   infrared decoder block.
> +
> +config IR_IMG_RC6
> +	bool "Phillips RC6 protocol support"
> +	depends on IR_IMG_HW
> +	help
> +	   Say Y here to enable support for the RC6 protocol in the ImgTec
> +	   infrared decoder block.
> +	   Note: This version only supports mode 0.
> diff --git a/drivers/media/rc/img-ir/Makefile b/drivers/media/rc/img-ir/Makefile
> index 898b1b8..8e6d458 100644
> --- a/drivers/media/rc/img-ir/Makefile
> +++ b/drivers/media/rc/img-ir/Makefile
> @@ -7,6 +7,7 @@ img-ir-$(CONFIG_IR_IMG_SONY)	+= img-ir-sony.o
>  img-ir-$(CONFIG_IR_IMG_SHARP)	+= img-ir-sharp.o
>  img-ir-$(CONFIG_IR_IMG_SANYO)	+= img-ir-sanyo.o
>  img-ir-$(CONFIG_IR_IMG_RC5)	+= img-ir-rc5.o
> +img-ir-$(CONFIG_IR_IMG_RC6)	+= img-ir-rc6.o
>  img-ir-objs			:= $(img-ir-y)
>  
>  obj-$(CONFIG_IR_IMG)		+= img-ir.o
> diff --git a/drivers/media/rc/img-ir/img-ir-hw.c b/drivers/media/rc/img-ir/img-ir-hw.c
> index 322cdf8..3b70dc2 100644
> --- a/drivers/media/rc/img-ir/img-ir-hw.c
> +++ b/drivers/media/rc/img-ir/img-ir-hw.c
> @@ -45,6 +45,9 @@ static struct img_ir_decoder *img_ir_decoders[] = {
>  #ifdef CONFIG_IR_IMG_RC5
>  	&img_ir_rc5,
>  #endif
> +#ifdef CONFIG_IR_IMG_RC6
> +	&img_ir_rc6,
> +#endif
>  	NULL
>  };
>  
> diff --git a/drivers/media/rc/img-ir/img-ir-hw.h b/drivers/media/rc/img-ir/img-ir-hw.h
> index f124ec5..c7b6e1a 100644
> --- a/drivers/media/rc/img-ir/img-ir-hw.h
> +++ b/drivers/media/rc/img-ir/img-ir-hw.h
> @@ -188,6 +188,7 @@ extern struct img_ir_decoder img_ir_sony;
>  extern struct img_ir_decoder img_ir_sharp;
>  extern struct img_ir_decoder img_ir_sanyo;
>  extern struct img_ir_decoder img_ir_rc5;
> +extern struct img_ir_decoder img_ir_rc6;
>  
>  /**
>   * struct img_ir_reg_timings - Reg values for decoder timings at clock rate.
> diff --git a/drivers/media/rc/img-ir/img-ir-rc6.c b/drivers/media/rc/img-ir/img-ir-rc6.c
> new file mode 100644
> index 0000000..bcd0822
> --- /dev/null
> +++ b/drivers/media/rc/img-ir/img-ir-rc6.c
> @@ -0,0 +1,117 @@
> +/*
> + * ImgTec IR Decoder setup for Phillips RC-6 protocol.
> + *
> + * Copyright 2012-2014 Imagination Technologies Ltd.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by the
> + * Free Software Foundation; either version 2 of the License, or (at your
> + * option) any later version.
> + */
> +
> +#include "img-ir-hw.h"
> +
> +/* Convert RC6 data to a scancode */
> +static int img_ir_rc6_scancode(int len, u64 raw, u64 enabled_protocols,
> +				struct img_ir_scancode_req *request)
> +{
> +	unsigned int addr, cmd, mode, trl1, trl2;
> +
> +	/*
> +	 * Due to a side effect of the decoder handling the double length
> +	 * Trailer bit, the header information is a bit scrambled, and the
> +	 * raw data is shifted incorrectly.
> +	 * This workaround effectively recovers the header bits.
> +	 *
> +	 * The Header field should look like this:
> +	 *
> +	 * StartBit ModeBit2 ModeBit1 ModeBit0 TrailerBit
> +	 *
> +	 * But what we get is:
> +	 *
> +	 * ModeBit2 ModeBit1 ModeBit0 TrailerBit1 TrailerBit2
> +	 *
> +	 * The start bit is not important to recover the scancode.
> +	 */
> +
> +	raw	>>= 27;
> +
> +	trl1	= (raw >>  17)	& 0x01;
> +	trl2	= (raw >>  16)	& 0x01;
> +
> +	mode	= (raw >>  18)	& 0x07;
> +	addr	= (raw >>   8)	& 0xff;
> +	cmd	=  raw		& 0xff;
> +
> +	/*
> +	 * Due to the above explained irregularity the trailer bits cannot
> +	 * have the same value.
> +	 */
> +	if (trl1 == trl2)
> +		return -EINVAL;
> +
> +	/* Only mode 0 supported for now */
> +	if (mode)
> +		return -EINVAL;
> +
> +	request->protocol = RC_TYPE_RC6_0;
> +	request->scancode = addr << 8 | cmd;
> +	request->toggle	  = trl2;
> +	return IMG_IR_SCANCODE;
> +}
> +
> +/* 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)
> +{
> +	/* Not supported by the hw. */
> +	return -EINVAL;
> +}
> +
> +/*
> + * RC-6 decoder
> + * see http://www.sbprojects.com/knowledge/ir/rc6.php
> + */
> +struct img_ir_decoder img_ir_rc6 = {
> +	.type		= RC_BIT_RC6_0,
> +	.control	= {
> +		.bitorien	= 1,
> +		.code_type	= IMG_IR_CODETYPE_BIPHASE,
> +		.decoden	= 1,
> +		.decodinpol	= 1,
> +	},
> +	/* main timings */
> +	.tolerance	= 20,
> +	/*
> +	 * Due to a quirk in the img-ir decoder, default header values do
> +	 * not work, the values described below were extracted from
> +	 * successful RTL test cases.
> +	 */
> +	.timings	= {
> +		/* leader symbol */
> +		.ldr = {
> +			.pulse	= { 650 },
> +			.space	= { 660 },
> +		},
> +		/* 0 symbol */
> +		.s00 = {
> +			.pulse	= { 370 },
> +			.space	= { 370 },
> +		},
> +		/* 01 symbol */
> +		.s01 = {
> +			.pulse	= { 370 },
> +			.space	= { 370 },
> +		},
> +		/* free time */
> +		.ft  = {
> +			.minlen = 21,
> +			.maxlen = 21,
> +			.ft_min = 2666,	/* 2.666 ms */
> +		},
> +	},
> +
> +	/* scancode logic */
> +	.scancode	= img_ir_rc6_scancode,
> +	.filter		= img_ir_rc6_filter,
> +};
> 


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

      reply	other threads:[~2014-12-08 17:45 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
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 [this message]

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=5485E3AE.5070200@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.