diff options
Diffstat (limited to 'drivers/media/video/saa7134/saa7134-input.c')
-rw-r--r-- | drivers/media/video/saa7134/saa7134-input.c | 403 |
1 files changed, 353 insertions, 50 deletions
diff --git a/drivers/media/video/saa7134/saa7134-input.c b/drivers/media/video/saa7134/saa7134-input.c index 242cb235cf92..329accda6d45 100644 --- a/drivers/media/video/saa7134/saa7134-input.c +++ b/drivers/media/video/saa7134/saa7134-input.c | |||
@@ -39,6 +39,8 @@ MODULE_PARM_DESC(ir_debug,"enable debug messages [IR]"); | |||
39 | 39 | ||
40 | #define dprintk(fmt, arg...) if (ir_debug) \ | 40 | #define dprintk(fmt, arg...) if (ir_debug) \ |
41 | printk(KERN_DEBUG "%s/ir: " fmt, dev->name , ## arg) | 41 | printk(KERN_DEBUG "%s/ir: " fmt, dev->name , ## arg) |
42 | #define i2cdprintk(fmt, arg...) if (ir_debug) \ | ||
43 | printk(KERN_DEBUG "%s/ir: " fmt, ir->c.name , ## arg) | ||
42 | 44 | ||
43 | /* ---------------------------------------------------------------------- */ | 45 | /* ---------------------------------------------------------------------- */ |
44 | 46 | ||
@@ -114,24 +116,24 @@ static IR_KEYTAB_TYPE cinergy_codes[IR_KEYTAB_SIZE] = { | |||
114 | /* Alfons Geser <a.geser@cox.net> | 116 | /* Alfons Geser <a.geser@cox.net> |
115 | * updates from Job D. R. Borges <jobdrb@ig.com.br> */ | 117 | * updates from Job D. R. Borges <jobdrb@ig.com.br> */ |
116 | static IR_KEYTAB_TYPE eztv_codes[IR_KEYTAB_SIZE] = { | 118 | static IR_KEYTAB_TYPE eztv_codes[IR_KEYTAB_SIZE] = { |
117 | [ 18 ] = KEY_POWER, | 119 | [ 18 ] = KEY_POWER, |
118 | [ 1 ] = KEY_TV, // DVR | 120 | [ 1 ] = KEY_TV, // DVR |
119 | [ 21 ] = KEY_DVD, // DVD | 121 | [ 21 ] = KEY_DVD, // DVD |
120 | [ 23 ] = KEY_AUDIO, // music | 122 | [ 23 ] = KEY_AUDIO, // music |
121 | // DVR mode / DVD mode / music mode | 123 | // DVR mode / DVD mode / music mode |
122 | 124 | ||
123 | [ 27 ] = KEY_MUTE, // mute | 125 | [ 27 ] = KEY_MUTE, // mute |
124 | [ 2 ] = KEY_LANGUAGE, // MTS/SAP / audio / autoseek | 126 | [ 2 ] = KEY_LANGUAGE, // MTS/SAP / audio / autoseek |
125 | [ 30 ] = KEY_SUBTITLE, // closed captioning / subtitle / seek | 127 | [ 30 ] = KEY_SUBTITLE, // closed captioning / subtitle / seek |
126 | [ 22 ] = KEY_ZOOM, // full screen | 128 | [ 22 ] = KEY_ZOOM, // full screen |
127 | [ 28 ] = KEY_VIDEO, // video source / eject / delall | 129 | [ 28 ] = KEY_VIDEO, // video source / eject / delall |
128 | [ 29 ] = KEY_RESTART, // playback / angle / del | 130 | [ 29 ] = KEY_RESTART, // playback / angle / del |
129 | [ 47 ] = KEY_SEARCH, // scan / menu / playlist | 131 | [ 47 ] = KEY_SEARCH, // scan / menu / playlist |
130 | [ 48 ] = KEY_CHANNEL, // CH surfing / bookmark / memo | 132 | [ 48 ] = KEY_CHANNEL, // CH surfing / bookmark / memo |
131 | 133 | ||
132 | [ 49 ] = KEY_HELP, // help | 134 | [ 49 ] = KEY_HELP, // help |
133 | [ 50 ] = KEY_MODE, // num/memo | 135 | [ 50 ] = KEY_MODE, // num/memo |
134 | [ 51 ] = KEY_ESC, // cancel | 136 | [ 51 ] = KEY_ESC, // cancel |
135 | 137 | ||
136 | [ 12 ] = KEY_UP, // up | 138 | [ 12 ] = KEY_UP, // up |
137 | [ 16 ] = KEY_DOWN, // down | 139 | [ 16 ] = KEY_DOWN, // down |
@@ -148,24 +150,24 @@ static IR_KEYTAB_TYPE eztv_codes[IR_KEYTAB_SIZE] = { | |||
148 | [ 45 ] = KEY_PLAY, // play | 150 | [ 45 ] = KEY_PLAY, // play |
149 | [ 46 ] = KEY_SHUFFLE, // snapshot / shuffle | 151 | [ 46 ] = KEY_SHUFFLE, // snapshot / shuffle |
150 | 152 | ||
151 | [ 0 ] = KEY_KP0, | 153 | [ 0 ] = KEY_KP0, |
152 | [ 5 ] = KEY_KP1, | 154 | [ 5 ] = KEY_KP1, |
153 | [ 6 ] = KEY_KP2, | 155 | [ 6 ] = KEY_KP2, |
154 | [ 7 ] = KEY_KP3, | 156 | [ 7 ] = KEY_KP3, |
155 | [ 9 ] = KEY_KP4, | 157 | [ 9 ] = KEY_KP4, |
156 | [ 10 ] = KEY_KP5, | 158 | [ 10 ] = KEY_KP5, |
157 | [ 11 ] = KEY_KP6, | 159 | [ 11 ] = KEY_KP6, |
158 | [ 13 ] = KEY_KP7, | 160 | [ 13 ] = KEY_KP7, |
159 | [ 14 ] = KEY_KP8, | 161 | [ 14 ] = KEY_KP8, |
160 | [ 15 ] = KEY_KP9, | 162 | [ 15 ] = KEY_KP9, |
161 | 163 | ||
162 | [ 42 ] = KEY_VOLUMEUP, | 164 | [ 42 ] = KEY_VOLUMEUP, |
163 | [ 17 ] = KEY_VOLUMEDOWN, | 165 | [ 17 ] = KEY_VOLUMEDOWN, |
164 | [ 24 ] = KEY_CHANNELUP, // CH.tracking up | 166 | [ 24 ] = KEY_CHANNELUP, // CH.tracking up |
165 | [ 25 ] = KEY_CHANNELDOWN, // CH.tracking down | 167 | [ 25 ] = KEY_CHANNELDOWN, // CH.tracking down |
166 | 168 | ||
167 | [ 19 ] = KEY_KPENTER, // enter | 169 | [ 19 ] = KEY_KPENTER, // enter |
168 | [ 33 ] = KEY_KPDOT, // . (decimal dot) | 170 | [ 33 ] = KEY_KPDOT, // . (decimal dot) |
169 | }; | 171 | }; |
170 | 172 | ||
171 | static IR_KEYTAB_TYPE avacssmart_codes[IR_KEYTAB_SIZE] = { | 173 | static IR_KEYTAB_TYPE avacssmart_codes[IR_KEYTAB_SIZE] = { |
@@ -401,7 +403,183 @@ static IR_KEYTAB_TYPE manli_codes[IR_KEYTAB_SIZE] = { | |||
401 | 403 | ||
402 | // 0x1d unused ? | 404 | // 0x1d unused ? |
403 | }; | 405 | }; |
404 | /* ---------------------------------------------------------------------- */ | 406 | |
407 | |||
408 | /* Mike Baikov <mike@baikov.com> */ | ||
409 | static IR_KEYTAB_TYPE gotview7135_codes[IR_KEYTAB_SIZE] = { | ||
410 | |||
411 | [ 33 ] = KEY_POWER, | ||
412 | [ 105] = KEY_TV, | ||
413 | [ 51 ] = KEY_KP0, | ||
414 | [ 81 ] = KEY_KP1, | ||
415 | [ 49 ] = KEY_KP2, | ||
416 | [ 113] = KEY_KP3, | ||
417 | [ 59 ] = KEY_KP4, | ||
418 | [ 88 ] = KEY_KP5, | ||
419 | [ 65 ] = KEY_KP6, | ||
420 | [ 72 ] = KEY_KP7, | ||
421 | [ 48 ] = KEY_KP8, | ||
422 | [ 83 ] = KEY_KP9, | ||
423 | [ 115] = KEY_AGAIN, /* LOOP */ | ||
424 | [ 10 ] = KEY_AUDIO, | ||
425 | [ 97 ] = KEY_PRINT, /* PREVIEW */ | ||
426 | [ 122] = KEY_VIDEO, | ||
427 | [ 32 ] = KEY_CHANNELUP, | ||
428 | [ 64 ] = KEY_CHANNELDOWN, | ||
429 | [ 24 ] = KEY_VOLUMEDOWN, | ||
430 | [ 80 ] = KEY_VOLUMEUP, | ||
431 | [ 16 ] = KEY_MUTE, | ||
432 | [ 74 ] = KEY_SEARCH, | ||
433 | [ 123] = KEY_SHUFFLE, /* SNAPSHOT */ | ||
434 | [ 34 ] = KEY_RECORD, | ||
435 | [ 98 ] = KEY_STOP, | ||
436 | [ 120] = KEY_PLAY, | ||
437 | [ 57 ] = KEY_REWIND, | ||
438 | [ 89 ] = KEY_PAUSE, | ||
439 | [ 25 ] = KEY_FORWARD, | ||
440 | [ 9 ] = KEY_ZOOM, | ||
441 | |||
442 | [ 82 ] = KEY_F21, /* LIVE TIMESHIFT */ | ||
443 | [ 26 ] = KEY_F22, /* MIN TIMESHIFT */ | ||
444 | [ 58 ] = KEY_F23, /* TIMESHIFT */ | ||
445 | [ 112] = KEY_F24, /* NORMAL TIMESHIFT */ | ||
446 | }; | ||
447 | |||
448 | static IR_KEYTAB_TYPE ir_codes_purpletv[IR_KEYTAB_SIZE] = { | ||
449 | [ 0x3 ] = KEY_POWER, | ||
450 | [ 0x6f ] = KEY_MUTE, | ||
451 | [ 0x10 ] = KEY_BACKSPACE, /* Recall */ | ||
452 | |||
453 | [ 0x11 ] = KEY_KP0, | ||
454 | [ 0x4 ] = KEY_KP1, | ||
455 | [ 0x5 ] = KEY_KP2, | ||
456 | [ 0x6 ] = KEY_KP3, | ||
457 | [ 0x8 ] = KEY_KP4, | ||
458 | [ 0x9 ] = KEY_KP5, | ||
459 | [ 0xa ] = KEY_KP6, | ||
460 | [ 0xc ] = KEY_KP7, | ||
461 | [ 0xd ] = KEY_KP8, | ||
462 | [ 0xe ] = KEY_KP9, | ||
463 | [ 0x12 ] = KEY_KPDOT, /* 100+ */ | ||
464 | |||
465 | [ 0x7 ] = KEY_VOLUMEUP, | ||
466 | [ 0xb ] = KEY_VOLUMEDOWN, | ||
467 | [ 0x1a ] = KEY_KPPLUS, | ||
468 | [ 0x18 ] = KEY_KPMINUS, | ||
469 | [ 0x15 ] = KEY_UP, | ||
470 | [ 0x1d ] = KEY_DOWN, | ||
471 | [ 0xf ] = KEY_CHANNELUP, | ||
472 | [ 0x13 ] = KEY_CHANNELDOWN, | ||
473 | [ 0x48 ] = KEY_ZOOM, | ||
474 | |||
475 | [ 0x1b ] = KEY_VIDEO, /* Video source */ | ||
476 | [ 0x49 ] = KEY_LANGUAGE, /* MTS Select */ | ||
477 | [ 0x19 ] = KEY_SEARCH, /* Auto Scan */ | ||
478 | |||
479 | [ 0x4b ] = KEY_RECORD, | ||
480 | [ 0x46 ] = KEY_PLAY, | ||
481 | [ 0x45 ] = KEY_PAUSE, /* Pause */ | ||
482 | [ 0x44 ] = KEY_STOP, | ||
483 | [ 0x40 ] = KEY_FORWARD, /* Forward ? */ | ||
484 | [ 0x42 ] = KEY_REWIND, /* Backward ? */ | ||
485 | |||
486 | }; | ||
487 | |||
488 | static IR_KEYTAB_TYPE ir_codes_pinnacle[IR_KEYTAB_SIZE] = { | ||
489 | [ 0x59 ] = KEY_MUTE, | ||
490 | [ 0x4a ] = KEY_POWER, | ||
491 | |||
492 | [ 0x18 ] = KEY_TEXT, | ||
493 | [ 0x26 ] = KEY_TV, | ||
494 | [ 0x3d ] = KEY_PRINT, | ||
495 | |||
496 | [ 0x48 ] = KEY_RED, | ||
497 | [ 0x04 ] = KEY_GREEN, | ||
498 | [ 0x11 ] = KEY_YELLOW, | ||
499 | [ 0x00 ] = KEY_BLUE, | ||
500 | |||
501 | [ 0x2d ] = KEY_VOLUMEUP, | ||
502 | [ 0x1e ] = KEY_VOLUMEDOWN, | ||
503 | |||
504 | [ 0x49 ] = KEY_MENU, | ||
505 | |||
506 | [ 0x16 ] = KEY_CHANNELUP, | ||
507 | [ 0x17 ] = KEY_CHANNELDOWN, | ||
508 | |||
509 | [ 0x20 ] = KEY_UP, | ||
510 | [ 0x21 ] = KEY_DOWN, | ||
511 | [ 0x22 ] = KEY_LEFT, | ||
512 | [ 0x23 ] = KEY_RIGHT, | ||
513 | [ 0x0d ] = KEY_SELECT, | ||
514 | |||
515 | |||
516 | |||
517 | [ 0x08 ] = KEY_BACK, | ||
518 | [ 0x07 ] = KEY_REFRESH, | ||
519 | |||
520 | [ 0x2f ] = KEY_ZOOM, | ||
521 | [ 0x29 ] = KEY_RECORD, | ||
522 | |||
523 | [ 0x4b ] = KEY_PAUSE, | ||
524 | [ 0x4d ] = KEY_REWIND, | ||
525 | [ 0x2e ] = KEY_PLAY, | ||
526 | [ 0x4e ] = KEY_FORWARD, | ||
527 | [ 0x53 ] = KEY_PREVIOUS, | ||
528 | [ 0x4c ] = KEY_STOP, | ||
529 | [ 0x54 ] = KEY_NEXT, | ||
530 | |||
531 | [ 0x69 ] = KEY_KP0, | ||
532 | [ 0x6a ] = KEY_KP1, | ||
533 | [ 0x6b ] = KEY_KP2, | ||
534 | [ 0x6c ] = KEY_KP3, | ||
535 | [ 0x6d ] = KEY_KP4, | ||
536 | [ 0x6e ] = KEY_KP5, | ||
537 | [ 0x6f ] = KEY_KP6, | ||
538 | [ 0x70 ] = KEY_KP7, | ||
539 | [ 0x71 ] = KEY_KP8, | ||
540 | [ 0x72 ] = KEY_KP9, | ||
541 | |||
542 | [ 0x74 ] = KEY_CHANNEL, | ||
543 | [ 0x0a ] = KEY_BACKSPACE, | ||
544 | }; | ||
545 | |||
546 | /* Mapping for the 28 key remote control as seen at | ||
547 | http://www.sednacomputer.com/photo/cardbus-tv.jpg | ||
548 | Pavel Mihaylov <bin@bash.info> */ | ||
549 | static IR_KEYTAB_TYPE pctv_sedna_codes[IR_KEYTAB_SIZE] = { | ||
550 | [ 0 ] = KEY_KP0, | ||
551 | [ 1 ] = KEY_KP1, | ||
552 | [ 2 ] = KEY_KP2, | ||
553 | [ 3 ] = KEY_KP3, | ||
554 | [ 4 ] = KEY_KP4, | ||
555 | [ 5 ] = KEY_KP5, | ||
556 | [ 6 ] = KEY_KP6, | ||
557 | [ 7 ] = KEY_KP7, | ||
558 | [ 8 ] = KEY_KP8, | ||
559 | [ 9 ] = KEY_KP9, | ||
560 | |||
561 | [ 0x0a ] = KEY_AGAIN, /* Recall */ | ||
562 | [ 0x0b ] = KEY_CHANNELUP, | ||
563 | [ 0x0c ] = KEY_VOLUMEUP, | ||
564 | [ 0x0d ] = KEY_MODE, /* Stereo */ | ||
565 | [ 0x0e ] = KEY_STOP, | ||
566 | [ 0x0f ] = KEY_PREVIOUSSONG, | ||
567 | [ 0x10 ] = KEY_ZOOM, | ||
568 | [ 0x11 ] = KEY_TUNER, /* Source */ | ||
569 | [ 0x12 ] = KEY_POWER, | ||
570 | [ 0x13 ] = KEY_MUTE, | ||
571 | [ 0x15 ] = KEY_CHANNELDOWN, | ||
572 | [ 0x18 ] = KEY_VOLUMEDOWN, | ||
573 | [ 0x19 ] = KEY_SHUFFLE, /* Snapshot */ | ||
574 | [ 0x1a ] = KEY_NEXTSONG, | ||
575 | [ 0x1b ] = KEY_TEXT, /* Time Shift */ | ||
576 | [ 0x1c ] = KEY_RADIO, /* FM Radio */ | ||
577 | [ 0x1d ] = KEY_RECORD, | ||
578 | [ 0x1e ] = KEY_PAUSE, | ||
579 | }; | ||
580 | |||
581 | |||
582 | /* -------------------- GPIO generic keycode builder -------------------- */ | ||
405 | 583 | ||
406 | static int build_key(struct saa7134_dev *dev) | 584 | static int build_key(struct saa7134_dev *dev) |
407 | { | 585 | { |
@@ -413,13 +591,13 @@ static int build_key(struct saa7134_dev *dev) | |||
413 | saa_setb(SAA7134_GPIO_GPMODE3,SAA7134_GPIO_GPRESCAN); | 591 | saa_setb(SAA7134_GPIO_GPMODE3,SAA7134_GPIO_GPRESCAN); |
414 | 592 | ||
415 | gpio = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2); | 593 | gpio = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2); |
416 | if (ir->polling) { | 594 | if (ir->polling) { |
417 | if (ir->last_gpio == gpio) | 595 | if (ir->last_gpio == gpio) |
418 | return 0; | 596 | return 0; |
419 | ir->last_gpio = gpio; | 597 | ir->last_gpio = gpio; |
420 | } | 598 | } |
421 | 599 | ||
422 | data = ir_extract_bits(gpio, ir->mask_keycode); | 600 | data = ir_extract_bits(gpio, ir->mask_keycode); |
423 | dprintk("build_key gpio=0x%x mask=0x%x data=%d\n", | 601 | dprintk("build_key gpio=0x%x mask=0x%x data=%d\n", |
424 | gpio, ir->mask_keycode, data); | 602 | gpio, ir->mask_keycode, data); |
425 | 603 | ||
@@ -432,13 +610,87 @@ static int build_key(struct saa7134_dev *dev) | |||
432 | return 0; | 610 | return 0; |
433 | } | 611 | } |
434 | 612 | ||
435 | /* ---------------------------------------------------------------------- */ | 613 | /* --------------------- Chip specific I2C key builders ----------------- */ |
614 | |||
615 | static int get_key_purpletv(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw) | ||
616 | { | ||
617 | unsigned char b; | ||
618 | |||
619 | /* poll IR chip */ | ||
620 | if (1 != i2c_master_recv(&ir->c,&b,1)) { | ||
621 | i2cdprintk("read error\n"); | ||
622 | return -EIO; | ||
623 | } | ||
624 | |||
625 | /* no button press */ | ||
626 | if (b==0) | ||
627 | return 0; | ||
628 | |||
629 | /* repeating */ | ||
630 | if (b & 0x80) | ||
631 | return 1; | ||
632 | |||
633 | *ir_key = b; | ||
634 | *ir_raw = b; | ||
635 | return 1; | ||
636 | } | ||
637 | |||
638 | /* The new pinnacle PCTV remote (with the colored buttons) | ||
639 | * | ||
640 | * Ricardo Cerqueira <v4l@cerqueira.org> | ||
641 | */ | ||
642 | |||
643 | static int get_key_pinnacle(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw) | ||
644 | { | ||
645 | unsigned char b[4]; | ||
646 | unsigned int start = 0,parity = 0,code = 0; | ||
647 | |||
648 | /* poll IR chip */ | ||
649 | if (4 != i2c_master_recv(&ir->c,b,4)) { | ||
650 | i2cdprintk("read error\n"); | ||
651 | return -EIO; | ||
652 | } | ||
653 | |||
654 | for (start = 0; start<4; start++) { | ||
655 | if (b[start] == 0x80) { | ||
656 | code=b[(start+3)%4]; | ||
657 | parity=b[(start+2)%4]; | ||
658 | } | ||
659 | } | ||
660 | |||
661 | /* Empty Request */ | ||
662 | if (parity==0) | ||
663 | return 0; | ||
664 | |||
665 | /* Repeating... */ | ||
666 | if (ir->old == parity) | ||
667 | return 0; | ||
668 | |||
669 | |||
670 | ir->old = parity; | ||
671 | |||
672 | /* Reduce code value to fit inside IR_KEYTAB_SIZE | ||
673 | * | ||
674 | * this is the only value that results in 42 unique | ||
675 | * codes < 128 | ||
676 | */ | ||
677 | |||
678 | code %= 0x88; | ||
679 | |||
680 | *ir_raw = code; | ||
681 | *ir_key = code; | ||
682 | |||
683 | i2cdprintk("Pinnacle PCTV key %02x\n", code); | ||
684 | |||
685 | return 1; | ||
686 | } | ||
687 | |||
436 | 688 | ||
437 | void saa7134_input_irq(struct saa7134_dev *dev) | 689 | void saa7134_input_irq(struct saa7134_dev *dev) |
438 | { | 690 | { |
439 | struct saa7134_ir *ir = dev->remote; | 691 | struct saa7134_ir *ir = dev->remote; |
440 | 692 | ||
441 | if (!ir->polling) | 693 | if (!ir->polling) |
442 | build_key(dev); | 694 | build_key(dev); |
443 | } | 695 | } |
444 | 696 | ||
@@ -464,7 +716,7 @@ int saa7134_input_init1(struct saa7134_dev *dev) | |||
464 | int polling = 0; | 716 | int polling = 0; |
465 | int ir_type = IR_TYPE_OTHER; | 717 | int ir_type = IR_TYPE_OTHER; |
466 | 718 | ||
467 | if (!dev->has_remote) | 719 | if (dev->has_remote != SAA7134_REMOTE_GPIO) |
468 | return -ENODEV; | 720 | return -ENODEV; |
469 | if (disable_ir) | 721 | if (disable_ir) |
470 | return -ENODEV; | 722 | return -ENODEV; |
@@ -473,7 +725,8 @@ int saa7134_input_init1(struct saa7134_dev *dev) | |||
473 | switch (dev->board) { | 725 | switch (dev->board) { |
474 | case SAA7134_BOARD_FLYVIDEO2000: | 726 | case SAA7134_BOARD_FLYVIDEO2000: |
475 | case SAA7134_BOARD_FLYVIDEO3000: | 727 | case SAA7134_BOARD_FLYVIDEO3000: |
476 | case SAA7134_BOARD_FLYTVPLATINUM_FM: | 728 | case SAA7134_BOARD_FLYTVPLATINUM_FM: |
729 | case SAA7134_BOARD_FLYTVPLATINUM_MINI2: | ||
477 | ir_codes = flyvideo_codes; | 730 | ir_codes = flyvideo_codes; |
478 | mask_keycode = 0xEC00000; | 731 | mask_keycode = 0xEC00000; |
479 | mask_keydown = 0x0040000; | 732 | mask_keydown = 0x0040000; |
@@ -514,14 +767,33 @@ int saa7134_input_init1(struct saa7134_dev *dev) | |||
514 | saa_setb(SAA7134_GPIO_GPMODE0, 0x4); | 767 | saa_setb(SAA7134_GPIO_GPMODE0, 0x4); |
515 | saa_setb(SAA7134_GPIO_GPSTATUS0, 0x4); | 768 | saa_setb(SAA7134_GPIO_GPSTATUS0, 0x4); |
516 | break; | 769 | break; |
770 | case SAA7134_BOARD_KWORLD_TERMINATOR: | ||
771 | ir_codes = avacssmart_codes; | ||
772 | mask_keycode = 0x00001f; | ||
773 | mask_keyup = 0x000060; | ||
774 | polling = 50; // ms | ||
775 | break; | ||
517 | case SAA7134_BOARD_MANLI_MTV001: | 776 | case SAA7134_BOARD_MANLI_MTV001: |
518 | case SAA7134_BOARD_MANLI_MTV002: | 777 | case SAA7134_BOARD_MANLI_MTV002: |
778 | case SAA7134_BOARD_BEHOLD_409FM: | ||
519 | ir_codes = manli_codes; | 779 | ir_codes = manli_codes; |
520 | mask_keycode = 0x001f00; | 780 | mask_keycode = 0x001f00; |
521 | mask_keyup = 0x004000; | 781 | mask_keyup = 0x004000; |
522 | mask_keydown = 0x002000; | ||
523 | polling = 50; // ms | 782 | polling = 50; // ms |
524 | break; | 783 | break; |
784 | case SAA7134_BOARD_SEDNA_PC_TV_CARDBUS: | ||
785 | ir_codes = pctv_sedna_codes; | ||
786 | mask_keycode = 0x001f00; | ||
787 | mask_keyup = 0x004000; | ||
788 | polling = 50; // ms | ||
789 | break; | ||
790 | case SAA7134_BOARD_GOTVIEW_7135: | ||
791 | ir_codes = gotview7135_codes; | ||
792 | mask_keycode = 0x0003EC; | ||
793 | mask_keyup = 0x008000; | ||
794 | mask_keydown = 0x000010; | ||
795 | polling = 50; // ms | ||
796 | break; | ||
525 | case SAA7134_BOARD_VIDEOMATE_TV_PVR: | 797 | case SAA7134_BOARD_VIDEOMATE_TV_PVR: |
526 | case SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUSII: | 798 | case SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUSII: |
527 | ir_codes = videomate_tv_pvr_codes; | 799 | ir_codes = videomate_tv_pvr_codes; |
@@ -529,6 +801,12 @@ int saa7134_input_init1(struct saa7134_dev *dev) | |||
529 | mask_keyup = 0x400000; | 801 | mask_keyup = 0x400000; |
530 | polling = 50; // ms | 802 | polling = 50; // ms |
531 | break; | 803 | break; |
804 | case SAA7134_BOARD_VIDEOMATE_DVBT_300: | ||
805 | case SAA7134_BOARD_VIDEOMATE_DVBT_200: | ||
806 | ir_codes = videomate_tv_pvr_codes; | ||
807 | mask_keycode = 0x003F00; | ||
808 | mask_keyup = 0x040000; | ||
809 | break; | ||
532 | } | 810 | } |
533 | if (NULL == ir_codes) { | 811 | if (NULL == ir_codes) { |
534 | printk("%s: Oops: IR config error [card=%d]\n", | 812 | printk("%s: Oops: IR config error [card=%d]\n", |
@@ -548,7 +826,7 @@ int saa7134_input_init1(struct saa7134_dev *dev) | |||
548 | ir->mask_keycode = mask_keycode; | 826 | ir->mask_keycode = mask_keycode; |
549 | ir->mask_keydown = mask_keydown; | 827 | ir->mask_keydown = mask_keydown; |
550 | ir->mask_keyup = mask_keyup; | 828 | ir->mask_keyup = mask_keyup; |
551 | ir->polling = polling; | 829 | ir->polling = polling; |
552 | 830 | ||
553 | /* init input device */ | 831 | /* init input device */ |
554 | snprintf(ir->name, sizeof(ir->name), "saa7134 IR (%s)", | 832 | snprintf(ir->name, sizeof(ir->name), "saa7134 IR (%s)", |
@@ -596,6 +874,31 @@ void saa7134_input_fini(struct saa7134_dev *dev) | |||
596 | dev->remote = NULL; | 874 | dev->remote = NULL; |
597 | } | 875 | } |
598 | 876 | ||
877 | void saa7134_set_i2c_ir(struct saa7134_dev *dev, struct IR_i2c *ir) | ||
878 | { | ||
879 | if (disable_ir) { | ||
880 | dprintk("Found supported i2c remote, but IR has been disabled\n"); | ||
881 | ir->get_key=NULL; | ||
882 | return; | ||
883 | } | ||
884 | |||
885 | switch (dev->board) { | ||
886 | case SAA7134_BOARD_PINNACLE_PCTV_110i: | ||
887 | snprintf(ir->c.name, sizeof(ir->c.name), "Pinnacle PCTV"); | ||
888 | ir->get_key = get_key_pinnacle; | ||
889 | ir->ir_codes = ir_codes_pinnacle; | ||
890 | break; | ||
891 | case SAA7134_BOARD_UPMOST_PURPLE_TV: | ||
892 | snprintf(ir->c.name, sizeof(ir->c.name), "Purple TV"); | ||
893 | ir->get_key = get_key_purpletv; | ||
894 | ir->ir_codes = ir_codes_purpletv; | ||
895 | break; | ||
896 | default: | ||
897 | dprintk("Shouldn't get here: Unknown board %x for I2C IR?\n",dev->board); | ||
898 | break; | ||
899 | } | ||
900 | |||
901 | } | ||
599 | /* ---------------------------------------------------------------------- | 902 | /* ---------------------------------------------------------------------- |
600 | * Local variables: | 903 | * Local variables: |
601 | * c-basic-offset: 8 | 904 | * c-basic-offset: 8 |