summaryrefslogtreecommitdiffstats
path: root/drivers/media/rc/ir-nec-decoder.c
diff options
context:
space:
mode:
authorJames Hogan <james.hogan@imgtec.com>2014-01-17 10:58:50 -0300
committerMauro Carvalho Chehab <m.chehab@samsung.com>2014-02-06 09:20:07 -0200
commit18bc17448147e93f31cc9b1a83be49f1224657b2 (patch)
tree3e80fccb07b65eb43faefa75d6518f96b48bfdaa /drivers/media/rc/ir-nec-decoder.c
parent00942d1a1bd93ac108c1b92d504c568a37be1833 (diff)
downloadop-kernel-dev-18bc17448147e93f31cc9b1a83be49f1224657b2.zip
op-kernel-dev-18bc17448147e93f31cc9b1a83be49f1224657b2.tar.gz
[media] media: rc: change 32bit NEC scancode format
Change 32bit NEC scancode format (used by Apple and TiVo remotes) to encode the data with the correct bit order. Previously the raw bits were used without being bit reversed, now each 16bit half is bit reversed compared to before. So for the raw NEC data: (LSB/First) 0xAAaaCCcc (MSB/Last) (where traditionally AA=address, aa=~address, CC=command, cc=~command) We now generate the scancodes: (MSB) 0x0000AACC (LSB) (normal NEC) (MSB) 0x00AAaaCC (LSB) (extended NEC, address check wrong) (MSB) 0xaaAAccCC (LSB) (32-bit NEC, command check wrong) Note that the address byte order in 32-bit NEC scancodes is different to that of the extended NEC scancodes. I chose this way as it maintains the order of the bits in the address/command fields, and CC is clearly intended to be the LSB of the command if the TiVo codes are anything to go by so it makes sense for AA to also be the LSB. The TiVo keymap is updated accordingly. Signed-off-by: James Hogan <james.hogan@imgtec.com> Cc: Mauro Carvalho Chehab <m.chehab@samsung.com> Cc: Jarod Wilson <jarod@redhat.com> Cc: linux-media@vger.kernel.org Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Diffstat (limited to 'drivers/media/rc/ir-nec-decoder.c')
-rw-r--r--drivers/media/rc/ir-nec-decoder.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/media/rc/ir-nec-decoder.c b/drivers/media/rc/ir-nec-decoder.c
index 9a90094..1bab7ea 100644
--- a/drivers/media/rc/ir-nec-decoder.c
+++ b/drivers/media/rc/ir-nec-decoder.c
@@ -172,7 +172,10 @@ 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 = data->bits;
+ scancode = not_address << 24 |
+ address << 16 |
+ not_command << 8 |
+ command;
IR_dprintk(1, "NEC (modified) scancode 0x%08x\n", scancode);
} else if ((address ^ not_address) != 0xff) {
/* Extended NEC */
OpenPOWER on IntegriCloud