aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx88/cx88-input.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/cx88/cx88-input.c')
-rw-r--r--drivers/media/video/cx88/cx88-input.c30
1 files changed, 28 insertions, 2 deletions
diff --git a/drivers/media/video/cx88/cx88-input.c b/drivers/media/video/cx88/cx88-input.c
index 097081eb505f..13bc5d160761 100644
--- a/drivers/media/video/cx88/cx88-input.c
+++ b/drivers/media/video/cx88/cx88-input.c
@@ -394,7 +394,7 @@ void cx88_ir_irq(struct cx88_core *core)
394{ 394{
395 struct cx88_IR *ir = core->ir; 395 struct cx88_IR *ir = core->ir;
396 u32 samples, ircode; 396 u32 samples, ircode;
397 int i; 397 int i, start, range, toggle, dev, code;
398 398
399 if (NULL == ir) 399 if (NULL == ir)
400 return; 400 return;
@@ -463,11 +463,37 @@ void cx88_ir_irq(struct cx88_core *core)
463 case CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1: 463 case CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1:
464 case CX88_BOARD_HAUPPAUGE_HVR1100: 464 case CX88_BOARD_HAUPPAUGE_HVR1100:
465 case CX88_BOARD_HAUPPAUGE_HVR3000: 465 case CX88_BOARD_HAUPPAUGE_HVR3000:
466 case CX88_BOARD_PINNACLE_PCTV_HD_800i:
467 case CX88_BOARD_HAUPPAUGE_HVR4000: 466 case CX88_BOARD_HAUPPAUGE_HVR4000:
468 case CX88_BOARD_HAUPPAUGE_HVR4000LITE: 467 case CX88_BOARD_HAUPPAUGE_HVR4000LITE:
469 ircode = ir_decode_biphase(ir->samples, ir->scount, 5, 7); 468 ircode = ir_decode_biphase(ir->samples, ir->scount, 5, 7);
470 ir_dprintk("biphase decoded: %x\n", ircode); 469 ir_dprintk("biphase decoded: %x\n", ircode);
470 /*
471 * RC5 has an extension bit which adds a new range
472 * of available codes, this is detected here. Also
473 * hauppauge remotes (black/silver) always use
474 * specific device ids. If we do not filter the
475 * device ids then messages destined for devices
476 * such as TVs (id=0) will get through to the
477 * device causing mis-fired events.
478 */
479 /* split rc5 data block ... */
480 start = (ircode & 0x2000) >> 13;
481 range = (ircode & 0x1000) >> 12;
482 toggle= (ircode & 0x0800) >> 11;
483 dev = (ircode & 0x07c0) >> 6;
484 code = (ircode & 0x003f) | ((range << 6) ^ 0x0040);
485 if( start != 1)
486 /* no key pressed */
487 break;
488 if ( dev != 0x1e && dev != 0x1f )
489 /* not a hauppauge remote */
490 break;
491 ir_input_keydown(ir->input, &ir->ir, code, ircode);
492 ir->release = jiffies + msecs_to_jiffies(120);
493 break;
494 case CX88_BOARD_PINNACLE_PCTV_HD_800i:
495 ircode = ir_decode_biphase(ir->samples, ir->scount, 5, 7);
496 ir_dprintk("biphase decoded: %x\n", ircode);
471 if ((ircode & 0xfffff000) != 0x3000) 497 if ((ircode & 0xfffff000) != 0x3000)
472 break; 498 break;
473 ir_input_keydown(ir->input, &ir->ir, ircode & 0x3f, ircode); 499 ir_input_keydown(ir->input, &ir->ir, ircode & 0x3f, ircode);