On 29/03/14 16:11, 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.
> 
> Signed-off-by: David Härdeman <da...@hardeman.nu>
> ---
>  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 c0111d6..40ee844 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, enum rc_type *protocol,
> @@ -23,11 +24,11 @@ static int img_ir_nec_scancode(int len, u64 raw, enum 
> rc_type *protocol,
>       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: AAaaDDdd (LSBit first) */
> +             *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 */
> @@ -56,13 +57,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: AAaaDDdd (LSBit first) */
> +             addr       = bitrev8((in->data >> 24) & 0xff);
> +             addr_m     = (in->mask >> 24) & 0xff;
> +             addr_inv   = bitrev8((in->data >> 16) & 0xff);
> +             addr_inv_m = (in->mask >> 16) & 0xff;
> +             data       = bitrev8((in->data >>  8) & 0xff);
> +             data_m     = (in->mask >>  8) & 0xff;
> +             data_inv   = bitrev8((in->data >>  0) & 0xff);
> +             data_inv_m = (in->mask >>  0) & 0xff;

I think the masks need bit reversing too, otherwise the mask bits won't
line up with the data as intended.

Otherwise this patch looks okay to me.

Cheers
James

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to