From: James Hogan <james.hogan@imgtec.com>
To: "David Härdeman" <david@hardeman.nu>
Cc: linux-media@vger.kernel.org, m.chehab@samsung.com
Subject: Re: [PATCH 1/3] rc-core: do not change 32bit NEC scancode format for now
Date: Sat, 05 Apr 2014 00:34:35 +0100 [thread overview]
Message-ID: <1485396.bT76pgnf8H@radagast> (raw)
In-Reply-To: <20140404220556.5068.67187.stgit@zeus.muc.hardeman.nu>
[-- Attachment #1: Type: text/plain, Size: 8414 bytes --]
On Saturday 05 April 2014 00:05:56 David Härdeman wrote:
> This reverts 18bc17448147e93f31cc9b1a83be49f1224657b2
>
> The patch ignores the fact that NEC32 scancodes are generated not only in
> the NEC raw decoder but also directly in some drivers. Whichever approach
> is chosen it should be consistent across drivers and this patch needs more
> discussion.
>
> Furthermore, I'm convinced that we have to stop playing games trying to
> decipher the "meaning" of NEC scancodes (what's the customer/vendor/address,
> which byte is the MSB, etc).
>
> This patch is in preparation for the next few patches in this series.
>
> v2: make sure img-ir scancodes are bitrev8():ed as well
>
> v3: update comments
>
> Signed-off-by: David Härdeman <david@hardeman.nu>
Acked-by: James Hogan <james.hogan@imgtec.com>
Thanks
James
> ---
> drivers/media/rc/img-ir/img-ir-nec.c | 27 ++++++-----
> drivers/media/rc/ir-nec-decoder.c | 5 --
> drivers/media/rc/keymaps/rc-tivo.c | 86
> +++++++++++++++++----------------- 3 files changed, 59 insertions(+), 59
> deletions(-)
>
> diff --git a/drivers/media/rc/img-ir/img-ir-nec.c
> b/drivers/media/rc/img-ir/img-ir-nec.c index e7a731b..751d9d9 100644
> --- a/drivers/media/rc/img-ir/img-ir-nec.c
> +++ b/drivers/media/rc/img-ir/img-ir-nec.c
> @@ -5,6 +5,7 @@
> */
>
> #include "img-ir-hw.h"
> +#include <linux/bitrev.h>
>
> /* Convert NEC data to a scancode */
> static int img_ir_nec_scancode(int len, u64 raw, int *scancode, u64
> protocols) @@ -22,11 +23,11 @@ static int img_ir_nec_scancode(int len, u64
> raw, int *scancode, u64 protocols) data_inv = (raw >> 24) & 0xff;
> if ((data_inv ^ data) != 0xff) {
> /* 32-bit NEC (used by Apple and TiVo remotes) */
> - /* scan encoding: aaAAddDD */
> - *scancode = addr_inv << 24 |
> - addr << 16 |
> - data_inv << 8 |
> - data;
> + /* scan encoding: as transmitted, MSBit = first received bit */
> + *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 */
> @@ -54,13 +55,15 @@ static int img_ir_nec_filter(const struct
> rc_scancode_filter *in,
>
> if ((in->data | in->mask) & 0xff000000) {
> /* 32-bit NEC (used by Apple and TiVo remotes) */
> - /* scan encoding: aaAAddDD */
> - addr_inv = (in->data >> 24) & 0xff;
> - addr_inv_m = (in->mask >> 24) & 0xff;
> - addr = (in->data >> 16) & 0xff;
> - addr_m = (in->mask >> 16) & 0xff;
> - data_inv = (in->data >> 8) & 0xff;
> - data_inv_m = (in->mask >> 8) & 0xff;
> + /* scan encoding: as transmitted, MSBit = first received bit */
> + addr = bitrev8(in->data >> 24);
> + addr_m = bitrev8(in->mask >> 24);
> + addr_inv = bitrev8(in->data >> 16);
> + addr_inv_m = bitrev8(in->mask >> 16);
> + data = bitrev8(in->data >> 8);
> + 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) {
> /* Extended NEC */
> /* scan encoding AAaaDD */
> diff --git a/drivers/media/rc/ir-nec-decoder.c
> b/drivers/media/rc/ir-nec-decoder.c index 9de1791..35c42e5 100644
> --- a/drivers/media/rc/ir-nec-decoder.c
> +++ b/drivers/media/rc/ir-nec-decoder.c
> @@ -172,10 +172,7 @@ static int ir_nec_decode(struct rc_dev *dev, struct
> ir_raw_event ev) if (send_32bits) {
> /* NEC transport, but modified protocol, used by at
> * least Apple and TiVo remotes */
> - scancode = not_address << 24 |
> - address << 16 |
> - not_command << 8 |
> - command;
> + scancode = data->bits;
> IR_dprintk(1, "NEC (modified) scancode 0x%08x\n", scancode);
> } else if ((address ^ not_address) != 0xff) {
> /* Extended NEC */
> diff --git a/drivers/media/rc/keymaps/rc-tivo.c
> b/drivers/media/rc/keymaps/rc-tivo.c index 5cc1b45..454e062 100644
> --- a/drivers/media/rc/keymaps/rc-tivo.c
> +++ b/drivers/media/rc/keymaps/rc-tivo.c
> @@ -15,62 +15,62 @@
> * Initial mapping is for the TiVo remote included in the Nero LiquidTV
> bundle, * which also ships with a TiVo-branded IR transceiver, supported by
> the mceusb * driver. Note that the remote uses an NEC-ish protocol, but
> instead of having - * a command/not_command pair, it has a vendor ID of
> 0x3085, but some keys, the + * a command/not_command pair, it has a vendor
> ID of 0xa10c, but some keys, the * NEC extended checksums do pass, so the
> table presently has the intended * values and the checksum-passed versions
> for those keys.
> */
> static struct rc_map_table tivo[] = {
> - { 0x3085f009, KEY_MEDIA }, /* TiVo Button */
> - { 0x3085e010, KEY_POWER2 }, /* TV Power */
> - { 0x3085e011, KEY_TV }, /* Live TV/Swap */
> - { 0x3085c034, KEY_VIDEO_NEXT }, /* TV Input */
> - { 0x3085e013, KEY_INFO },
> - { 0x3085a05f, KEY_CYCLEWINDOWS }, /* Window */
> + { 0xa10c900f, KEY_MEDIA }, /* TiVo Button */
> + { 0xa10c0807, KEY_POWER2 }, /* TV Power */
> + { 0xa10c8807, KEY_TV }, /* Live TV/Swap */
> + { 0xa10c2c03, KEY_VIDEO_NEXT }, /* TV Input */
> + { 0xa10cc807, KEY_INFO },
> + { 0xa10cfa05, KEY_CYCLEWINDOWS }, /* Window */
> { 0x0085305f, KEY_CYCLEWINDOWS },
> - { 0x3085c036, KEY_EPG }, /* Guide */
> + { 0xa10c6c03, KEY_EPG }, /* Guide */
>
> - { 0x3085e014, KEY_UP },
> - { 0x3085e016, KEY_DOWN },
> - { 0x3085e017, KEY_LEFT },
> - { 0x3085e015, KEY_RIGHT },
> + { 0xa10c2807, KEY_UP },
> + { 0xa10c6807, KEY_DOWN },
> + { 0xa10ce807, KEY_LEFT },
> + { 0xa10ca807, KEY_RIGHT },
>
> - { 0x3085e018, KEY_SCROLLDOWN }, /* Red Thumbs Down */
> - { 0x3085e019, KEY_SELECT },
> - { 0x3085e01a, KEY_SCROLLUP }, /* Green Thumbs Up */
> + { 0xa10c1807, KEY_SCROLLDOWN }, /* Red Thumbs Down */
> + { 0xa10c9807, KEY_SELECT },
> + { 0xa10c5807, KEY_SCROLLUP }, /* Green Thumbs Up */
>
> - { 0x3085e01c, KEY_VOLUMEUP },
> - { 0x3085e01d, KEY_VOLUMEDOWN },
> - { 0x3085e01b, KEY_MUTE },
> - { 0x3085d020, KEY_RECORD },
> - { 0x3085e01e, KEY_CHANNELUP },
> - { 0x3085e01f, KEY_CHANNELDOWN },
> + { 0xa10c3807, KEY_VOLUMEUP },
> + { 0xa10cb807, KEY_VOLUMEDOWN },
> + { 0xa10cd807, KEY_MUTE },
> + { 0xa10c040b, KEY_RECORD },
> + { 0xa10c7807, KEY_CHANNELUP },
> + { 0xa10cf807, KEY_CHANNELDOWN },
> { 0x0085301f, KEY_CHANNELDOWN },
>
> - { 0x3085d021, KEY_PLAY },
> - { 0x3085d023, KEY_PAUSE },
> - { 0x3085d025, KEY_SLOW },
> - { 0x3085d022, KEY_REWIND },
> - { 0x3085d024, KEY_FASTFORWARD },
> - { 0x3085d026, KEY_PREVIOUS },
> - { 0x3085d027, KEY_NEXT }, /* ->| */
> + { 0xa10c840b, KEY_PLAY },
> + { 0xa10cc40b, KEY_PAUSE },
> + { 0xa10ca40b, KEY_SLOW },
> + { 0xa10c440b, KEY_REWIND },
> + { 0xa10c240b, KEY_FASTFORWARD },
> + { 0xa10c640b, KEY_PREVIOUS },
> + { 0xa10ce40b, KEY_NEXT }, /* ->| */
>
> - { 0x3085b044, KEY_ZOOM }, /* Aspect */
> - { 0x3085b048, KEY_STOP },
> - { 0x3085b04a, KEY_DVD }, /* DVD Menu */
> + { 0xa10c220d, KEY_ZOOM }, /* Aspect */
> + { 0xa10c120d, KEY_STOP },
> + { 0xa10c520d, KEY_DVD }, /* DVD Menu */
>
> - { 0x3085d028, KEY_NUMERIC_1 },
> - { 0x3085d029, KEY_NUMERIC_2 },
> - { 0x3085d02a, KEY_NUMERIC_3 },
> - { 0x3085d02b, KEY_NUMERIC_4 },
> - { 0x3085d02c, KEY_NUMERIC_5 },
> - { 0x3085d02d, KEY_NUMERIC_6 },
> - { 0x3085d02e, KEY_NUMERIC_7 },
> - { 0x3085d02f, KEY_NUMERIC_8 },
> + { 0xa10c140b, KEY_NUMERIC_1 },
> + { 0xa10c940b, KEY_NUMERIC_2 },
> + { 0xa10c540b, KEY_NUMERIC_3 },
> + { 0xa10cd40b, KEY_NUMERIC_4 },
> + { 0xa10c340b, KEY_NUMERIC_5 },
> + { 0xa10cb40b, KEY_NUMERIC_6 },
> + { 0xa10c740b, KEY_NUMERIC_7 },
> + { 0xa10cf40b, KEY_NUMERIC_8 },
> { 0x0085302f, KEY_NUMERIC_8 },
> - { 0x3085c030, KEY_NUMERIC_9 },
> - { 0x3085c031, KEY_NUMERIC_0 },
> - { 0x3085c033, KEY_ENTER },
> - { 0x3085c032, KEY_CLEAR },
> + { 0xa10c0c03, KEY_NUMERIC_9 },
> + { 0xa10c8c03, KEY_NUMERIC_0 },
> + { 0xa10ccc03, KEY_ENTER },
> + { 0xa10c4c03, KEY_CLEAR },
> };
>
> static struct rc_map_list tivo_map = {
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
next prev parent reply other threads:[~2014-04-04 23:34 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-04 22:05 [PATCH 0/3] 3.15 fixes David Härdeman
2014-04-04 22:05 ` [PATCH 1/3] rc-core: do not change 32bit NEC scancode format for now David Härdeman
2014-04-04 23:34 ` James Hogan [this message]
2014-04-04 22:06 ` [PATCH 2/3] rc-core: split dev->s_filter David Härdeman
2014-04-04 23:36 ` James Hogan
2014-04-04 22:06 ` [PATCH 3/3] rc-core: remove generic scancode filter David Härdeman
2014-04-04 23:38 ` 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=1485396.bT76pgnf8H@radagast \
--to=james.hogan@imgtec.com \
--cc=david@hardeman.nu \
--cc=linux-media@vger.kernel.org \
--cc=m.chehab@samsung.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox