diff options
author | Stefan Ringel <linuxtv@stefanringel.de> | 2011-11-28 15:46:20 -0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-11-28 21:31:09 -0200 |
commit | edcfdd919a1c8afbf500be0dbfa9b68f40b4c219 (patch) | |
tree | 7d460f269a1f5cd322dfc349e48fc7e518e5e7c6 /drivers/media/video/tm6000/tm6000-input.c | |
parent | de2a20baff364b8dd19371acc1dc0b138e0b08b9 (diff) |
[media] tm6000: bugfix data check
beholder use a map with 3 bytes, but many rc maps have 2 bytes, so I add a workaround for beholder rc.
Signed-off-by: Stefan Ringel <linuxtv@stefanringel.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/tm6000/tm6000-input.c')
-rw-r--r-- | drivers/media/video/tm6000/tm6000-input.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/drivers/media/video/tm6000/tm6000-input.c b/drivers/media/video/tm6000/tm6000-input.c index 405d12729d0..ae7772e7f26 100644 --- a/drivers/media/video/tm6000/tm6000-input.c +++ b/drivers/media/video/tm6000/tm6000-input.c @@ -178,9 +178,21 @@ static int default_polling_getkey(struct tm6000_IR *ir, poll_result->rc_data = ir->urb_data[0]; break; case RC_TYPE_NEC: - if (ir->urb_data[1] == ((ir->key_addr >> 8) & 0xff)) { + switch (dev->model) { + case 10: + case 11: + case 14: + case 15: + if (ir->urb_data[1] == + ((ir->key_addr >> 8) & 0xff)) { + poll_result->rc_data = + ir->urb_data[0] + | ir->urb_data[1] << 8; + } + break; + default: poll_result->rc_data = ir->urb_data[0] - | ir->urb_data[1] << 8; + | ir->urb_data[1] << 8; } break; default: @@ -238,8 +250,6 @@ static void tm6000_ir_handle_key(struct tm6000_IR *ir) return; } - dprintk("ir->get_key result data=%04x\n", poll_result.rc_data); - if (ir->pwled) { if (ir->pwledcnt >= PWLED_OFF) { ir->pwled = 0; @@ -250,6 +260,7 @@ static void tm6000_ir_handle_key(struct tm6000_IR *ir) } if (ir->key) { + dprintk("ir->get_key result data=%04x\n", poll_result.rc_data); rc_keydown(ir->rc, poll_result.rc_data, 0); ir->key = 0; ir->pwled = 1; @@ -333,7 +344,7 @@ int tm6000_ir_int_start(struct tm6000_core *dev) ir->int_urb->transfer_buffer, size, tm6000_ir_urb_received, dev, dev->int_in.endp->desc.bInterval); - err = usb_submit_urb(ir->int_urb, GFP_KERNEL); + err = usb_submit_urb(ir->int_urb, GFP_ATOMIC); if (err) { kfree(ir->int_urb->transfer_buffer); usb_free_urb(ir->int_urb); |