[prev in list] [next in list] [prev in thread] [next in thread] 

List:       linux-kernel
Subject:    Re: [PATCH] ir-nec-decoder: fix extended NEC scancodes
From:       James Hogan <james () albanarts ! com>
Date:       2010-11-26 21:12:13
Message-ID: 20101126211213.GA21473 () gandalf
[Download RAW message or body]

(expanded cc list)

On Fri, Nov 26, 2010 at 08:39:25AM -0500, Andy Walls wrote:
> You might want to check the handling against this NEC datasheet
> 
> http://www.datasheetcatalog.org/datasheet/nec/UPD6122G-002.pdf
> 
> The datasheet calls the address bytes "custom code" (high byte apparently) and \
> "custom code'" (low byte apparently) with both bytes sent lsb first.  It appears \
> the high byte is sent first when using 16 bit codes.

Thanks for the link Andy. You appear to be correct, which suggests that
winbond-cir is the "wrong" one. Curiously there is a comment in
winbond-cir.c which explicitly mentions which byte is which:

854 * With NEC extended, Address1 is the LSB of the Address and
855 * Address2 is the MSB, Command parsing remains unchanged.

but then it also says:

25 *  To do:
26 *    o Test NEC and RC5

I suppose its all a matter of convention, but I think they should at
least be consistent, so I'll go by the NEC datasheet and submit a patch
to winbond-cir instead.

Cheers
James

> James Hogan <james@albanarts.com> wrote:
> 
> > Could somebody check this as I'm unable to test it.
> > 
> > I'm also not entirely certain it isn't winbond-cir that is in error
> > instead of ir-nec-decoder.
> > 
> > Cheers
> > James
> > --
> > After comparing the extended NEC scancode construction of the software
> > decoder and winbond-cir it appears the software decoder is putting the
> > two address bytes the wrong way around.
> > 
> > Here's how the decoders currently generate scancodes:
> > winbond-cir normal NEC:   msb [ 0x0,      0x0,     addr, cmd ] lsb
> > soft normal NEC:          msb [ 0x0,      0x0,     addr, cmd ] lsb
> > winbond-cir extended NEC: msb [ 0x0, not_addr,     addr, cmd ] lsb
> > soft extended NEC:        msb [ 0x0,     addr, not_addr, cmd ] lsb
> > 
> > The soft decider is not consistent with [1], assuming the "Address high"
> > byte (not_addr) should be more significant than the "Address low" byte
> > (addr) in the scancode.
> > 
> > [1] http://www.sbprojects.com/knowledge/ir/nec.htm
> > 
> > Signed-off-by: James Hogan <james@albanarts.com>
> > ---
> > drivers/media/IR/ir-nec-decoder.c |    4 ++--
> > 1 files changed, 2 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/media/IR/ir-nec-decoder.c
> > b/drivers/media/IR/ir-nec-decoder.c
> > index 70993f7..11d3e78 100644
> > --- a/drivers/media/IR/ir-nec-decoder.c
> > +++ b/drivers/media/IR/ir-nec-decoder.c
> > @@ -166,8 +166,8 @@ static int ir_nec_decode(struct input_dev
> > *input_dev, struct ir_raw_event ev)
> > 
> > 		if ((address ^ not_address) != 0xff) {
> > 			/* Extended NEC */
> > -			scancode = address     << 16 |
> > -				   not_address <<  8 |
> > +			scancode = not_address << 16 |
> > +				   address     <<  8 |
> > 				   command;
> > 			IR_dprintk(1, "NEC (Ext) scancode 0x%06x\n", scancode);
> > 		} else {
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic