Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

V4L/DVB (6973): Add Beholder TV 401/405/407/409/505/507/609/M6 support

This patch updates cardlist for Beholder TV tuners:
old models (with GPIO ir) 401, 403, 405, 407, 409, 505, 507
and add support for 607, 609, M6 cards with new i2c-ir.

Signed-off-by: Igor Kuznetsov <igk72@yandex.ru>
Signed-off-by: Andrey J. Melnikov <temnota@kmv.ru>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>

authored by

Andrey J. Melnikoff (TEMHOTA) and committed by
Mauro Carvalho Chehab
e8018c9e 3f4dfe2a

+699 -1
+13
Documentation/video4linux/CARDLIST.saa7134
··· 116 116 115 -> Sabrent PCMCIA TV-PCB05 [0919:2003] 117 117 116 -> 10MOONS TM300 TV Card [1131:2304] 118 118 117 -> Avermedia Super 007 [1461:f01d] 119 + 118 -> Beholder BeholdTV 401 [1131:0000,0000:4016] 120 + 119 -> Beholder BeholdTV 403 [0000:4036] 121 + 120 -> Beholder BeholdTV 403 FM [1131:0000,0000:4037] 122 + 121 -> Beholder BeholdTV 405 [0000:4050] 123 + 122 -> Beholder BeholdTV 405 FM [0000:4051] 124 + 123 -> [0000:4070] 125 + 124 -> Beholder BeholdTV 407 FM [0000:4071] 126 + 125 -> Beholder BeholdTV 409 [0000:4090] 127 + 126 -> Beholder BeholdTV 505 FM/RDS [0000:5051,0000:505B,5ace:5050] 128 + 127 -> Beholder BeholdTV 507 FM/RDS / BeholdTV 509 FM [0000:5071,0000:507B,5ace:5070,5ace:5090] 129 + 128 -> Beholder BeholdTV Columbus TVFM [0000:5201] 130 + 129 -> Beholder BeholdTV 607 / BeholdTV 609 [5ace:6070,5ace:6071,5ace:6072,5ace:6073,5ace:6090,5ace:6091,5ace:6092,5ace:6093] 131 + 130 -> Beholder BeholdTV M6 / BeholdTV M6 Extra [5ace:6190,5ace:6193]
+104
drivers/media/common/ir-keymaps.c
··· 1848 1848 }; 1849 1849 1850 1850 EXPORT_SYMBOL_GPL(ir_codes_fusionhdtv_mce); 1851 + 1852 + /* 1853 + * Igor Kuznetsov <igk72@ya.ru> 1854 + * Andrey J. Melnikov <temnota@kmv.ru> 1855 + * 1856 + * Keytable is used by BeholdTV 60x series, M6 series at 1857 + * least, and probably other cards too. 1858 + * The "ascii-art picture" below (in comments, first row 1859 + * is the keycode in hex, and subsequent row(s) shows 1860 + * the button labels (several variants when appropriate) 1861 + * helps to descide which keycodes to assign to the buttons. 1862 + */ 1863 + IR_KEYTAB_TYPE ir_codes_behold[IR_KEYTAB_SIZE] = { 1864 + 1865 + /* 0x1c 0x12 * 1866 + * TV/FM POWER * 1867 + * */ 1868 + [ 0x1c ] = KEY_TUNER, /*XXX KEY_TV KEY_RADIO */ 1869 + [ 0x12 ] = KEY_POWER, 1870 + 1871 + /* 0x01 0x02 0x03 * 1872 + * 1 2 3 * 1873 + * * 1874 + * 0x04 0x05 0x06 * 1875 + * 4 5 6 * 1876 + * * 1877 + * 0x07 0x08 0x09 * 1878 + * 7 8 9 * 1879 + * */ 1880 + [ 0x01 ] = KEY_1, 1881 + [ 0x02 ] = KEY_2, 1882 + [ 0x03 ] = KEY_3, 1883 + [ 0x04 ] = KEY_4, 1884 + [ 0x05 ] = KEY_5, 1885 + [ 0x06 ] = KEY_6, 1886 + [ 0x07 ] = KEY_7, 1887 + [ 0x08 ] = KEY_8, 1888 + [ 0x09 ] = KEY_9, 1889 + 1890 + /* 0x0a 0x00 0x17 * 1891 + * RECALL 0 MODE * 1892 + * */ 1893 + [ 0x0a ] = KEY_AGAIN, 1894 + [ 0x00 ] = KEY_0, 1895 + [ 0x17 ] = KEY_MODE, 1896 + 1897 + /* 0x14 0x10 * 1898 + * ASPECT FULLSCREEN * 1899 + * */ 1900 + [ 0x14 ] = KEY_SCREEN, 1901 + [ 0x10 ] = KEY_ZOOM, 1902 + 1903 + /* 0x0b * 1904 + * Up * 1905 + * * 1906 + * 0x18 0x16 0x0c * 1907 + * Left Ok Right * 1908 + * * 1909 + * 0x015 * 1910 + * Down * 1911 + * */ 1912 + [ 0x0b ] = KEY_CHANNELUP, /*XXX KEY_UP */ 1913 + [ 0x18 ] = KEY_VOLUMEDOWN, /*XXX KEY_LEFT */ 1914 + [ 0x16 ] = KEY_OK, /*XXX KEY_ENTER */ 1915 + [ 0x0c ] = KEY_VOLUMEUP, /*XXX KEY_RIGHT */ 1916 + [ 0x15 ] = KEY_CHANNELDOWN, /*XXX KEY_DOWN */ 1917 + 1918 + /* 0x11 0x0d * 1919 + * MUTE INFO * 1920 + * */ 1921 + [ 0x11 ] = KEY_MUTE, 1922 + [ 0x0d ] = KEY_INFO, 1923 + 1924 + /* 0x0f 0x1b 0x1a * 1925 + * RECORD PLAY/PAUSE STOP * 1926 + * * 1927 + * 0x0e 0x1f 0x1e * 1928 + *TELETEXT AUDIO SOURCE * 1929 + * RED YELLOW * 1930 + * */ 1931 + [ 0x0f ] = KEY_RECORD, 1932 + [ 0x1b ] = KEY_PLAYPAUSE, 1933 + [ 0x1a ] = KEY_STOP, 1934 + [ 0x0e ] = KEY_TEXT, 1935 + [ 0x1f ] = KEY_RED, /*XXX KEY_AUDIO */ 1936 + [ 0x1e ] = KEY_YELLOW, /*XXX KEY_SOURCE */ 1937 + 1938 + /* 0x1d 0x13 0x19 * 1939 + * SLEEP PREVIEW DVB * 1940 + * GREEN BLUE * 1941 + * */ 1942 + [ 0x1d ] = KEY_SLEEP, 1943 + [ 0x13 ] = KEY_GREEN, 1944 + [ 0x19 ] = KEY_BLUE, /*XXX KEY_SAT */ 1945 + 1946 + /* 0x58 0x5c * 1947 + * FREEZE SNAPSHOT * 1948 + * */ 1949 + [ 0x58 ] = KEY_SLOW, 1950 + [ 0x5c ] = KEY_SAVE, 1951 + 1952 + }; 1953 + 1954 + EXPORT_SYMBOL_GPL(ir_codes_behold);
+2 -1
drivers/media/video/ir-kbd-i2c.c
··· 398 398 case 0x7a: 399 399 case 0x47: 400 400 case 0x71: 401 + case 0x2d: 401 402 if (adap->id == I2C_HW_B_CX2388x) { 402 403 /* Handled by cx88-input */ 403 404 name = "CX2388x remote"; ··· 505 504 */ 506 505 507 506 static const int probe_bttv[] = { 0x1a, 0x18, 0x4b, 0x64, 0x30, -1}; 508 - static const int probe_saa7134[] = { 0x7a, 0x47, 0x71, -1 }; 507 + static const int probe_saa7134[] = { 0x7a, 0x47, 0x71, 0x2d, -1 }; 509 508 static const int probe_em28XX[] = { 0x30, 0x47, -1 }; 510 509 static const int probe_cx88[] = { 0x18, 0x6b, 0x71, -1 }; 511 510 static const int probe_cx23885[] = { 0x6b, -1 };
+504
drivers/media/video/saa7134/saa7134-cards.c
··· 3562 3562 .tv = 1, 3563 3563 }}, 3564 3564 }, 3565 + [SAA7134_BOARD_BEHOLD_401] = { 3566 + .name = "Beholder BeholdTV 401", 3567 + .audio_clock = 0x00187de7, 3568 + .tuner_type = TUNER_PHILIPS_FQ1216ME, 3569 + .radio_type = UNSET, 3570 + .tuner_addr = ADDR_UNSET, 3571 + .radio_addr = ADDR_UNSET, 3572 + .inputs = {{ 3573 + .name = name_svideo, 3574 + .vmux = 8, 3575 + .amux = LINE1, 3576 + },{ 3577 + .name = name_comp1, 3578 + .vmux = 1, 3579 + .amux = LINE1, 3580 + },{ 3581 + .name = name_tv, 3582 + .vmux = 3, 3583 + .amux = LINE2, 3584 + .tv = 1, 3585 + }}, 3586 + .mute = { 3587 + .name = name_mute, 3588 + .amux = LINE1, 3589 + }, 3590 + }, 3591 + [SAA7134_BOARD_BEHOLD_403] = { 3592 + .name = "Beholder BeholdTV 403", 3593 + .audio_clock = 0x00187de7, 3594 + .tuner_type = TUNER_PHILIPS_FQ1216ME, 3595 + .radio_type = UNSET, 3596 + .tuner_addr = ADDR_UNSET, 3597 + .radio_addr = ADDR_UNSET, 3598 + .inputs = {{ 3599 + .name = name_svideo, 3600 + .vmux = 8, 3601 + .amux = LINE1, 3602 + },{ 3603 + .name = name_comp1, 3604 + .vmux = 1, 3605 + .amux = LINE1, 3606 + },{ 3607 + .name = name_tv, 3608 + .vmux = 3, 3609 + .amux = LINE2, 3610 + .tv = 1, 3611 + }}, 3612 + }, 3613 + [SAA7134_BOARD_BEHOLD_403FM] = { 3614 + .name = "Beholder BeholdTV 403 FM", 3615 + .audio_clock = 0x00187de7, 3616 + .tuner_type = TUNER_PHILIPS_FQ1216ME, 3617 + .radio_type = UNSET, 3618 + .tuner_addr = ADDR_UNSET, 3619 + .radio_addr = ADDR_UNSET, 3620 + .inputs = {{ 3621 + .name = name_svideo, 3622 + .vmux = 8, 3623 + .amux = LINE1, 3624 + },{ 3625 + .name = name_comp1, 3626 + .vmux = 1, 3627 + .amux = LINE1, 3628 + },{ 3629 + .name = name_tv, 3630 + .vmux = 3, 3631 + .amux = LINE2, 3632 + .tv = 1, 3633 + }}, 3634 + .radio = { 3635 + .name = name_radio, 3636 + .amux = LINE2, 3637 + }, 3638 + }, 3639 + [SAA7134_BOARD_BEHOLD_405] = { 3640 + .name = "Beholder BeholdTV 405", 3641 + .audio_clock = 0x00187de7, 3642 + .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 3643 + .radio_type = UNSET, 3644 + .tuner_addr = ADDR_UNSET, 3645 + .radio_addr = ADDR_UNSET, 3646 + .tda9887_conf = TDA9887_PRESENT, 3647 + .inputs = {{ 3648 + .name = name_svideo, 3649 + .vmux = 8, 3650 + .amux = LINE1, 3651 + },{ 3652 + .name = name_comp1, 3653 + .vmux = 3, 3654 + .amux = LINE1, 3655 + },{ 3656 + .name = name_tv, 3657 + .vmux = 3, 3658 + .amux = LINE2, 3659 + .tv = 1, 3660 + }}, 3661 + }, 3662 + [SAA7134_BOARD_BEHOLD_405FM] = { 3663 + /* Sergey <skiv@orel.ru> */ 3664 + .name = "Beholder BeholdTV 405 FM", 3665 + .audio_clock = 0x00187de7, 3666 + .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 3667 + .radio_type = UNSET, 3668 + .tuner_addr = ADDR_UNSET, 3669 + .radio_addr = ADDR_UNSET, 3670 + .tda9887_conf = TDA9887_PRESENT, 3671 + .inputs = {{ 3672 + .name = name_svideo, 3673 + .vmux = 8, 3674 + .amux = LINE1, 3675 + },{ 3676 + .name = name_comp1, 3677 + .vmux = 3, 3678 + .amux = LINE1, 3679 + },{ 3680 + .name = name_tv, 3681 + .vmux = 3, 3682 + .amux = LINE2, 3683 + .tv = 1, 3684 + }}, 3685 + .radio = { 3686 + .name = name_radio, 3687 + .amux = LINE2, 3688 + }, 3689 + }, 3690 + [SAA7134_BOARD_BEHOLD_407FM] = { 3691 + .name = "Beholder BeholdTV 407 FM", 3692 + .audio_clock = 0x00187de7, 3693 + .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 3694 + .radio_type = UNSET, 3695 + .tuner_addr = ADDR_UNSET, 3696 + .radio_addr = ADDR_UNSET, 3697 + .tda9887_conf = TDA9887_PRESENT, 3698 + .gpiomask = 0xc0c000, 3699 + .inputs = {{ 3700 + .name = name_svideo, 3701 + .vmux = 8, 3702 + .amux = LINE1, 3703 + .gpio = 0xc0c000, 3704 + },{ 3705 + .name = name_comp1, 3706 + .vmux = 1, 3707 + .amux = LINE1, 3708 + .gpio = 0xc0c000, 3709 + },{ 3710 + .name = name_tv, 3711 + .vmux = 3, 3712 + .amux = TV, 3713 + .tv = 1, 3714 + .gpio = 0xc0c000, 3715 + }}, 3716 + .radio = { 3717 + .name = name_radio, 3718 + .amux = LINE2, 3719 + .gpio = 0xc0c000, 3720 + }, 3721 + }, 3722 + [SAA7134_BOARD_BEHOLD_409] = { 3723 + .name = "Beholder BeholdTV 409", 3724 + .audio_clock = 0x00187de7, 3725 + .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 3726 + .radio_type = UNSET, 3727 + .tuner_addr = ADDR_UNSET, 3728 + .radio_addr = ADDR_UNSET, 3729 + .tda9887_conf = TDA9887_PRESENT, 3730 + .inputs = {{ 3731 + .name = name_tv, 3732 + .vmux = 3, 3733 + .amux = TV, 3734 + .tv = 1, 3735 + },{ 3736 + .name = name_comp1, 3737 + .vmux = 1, 3738 + .amux = LINE1, 3739 + },{ 3740 + .name = name_svideo, 3741 + .vmux = 8, 3742 + .amux = LINE1, 3743 + }}, 3744 + }, 3745 + [SAA7134_BOARD_BEHOLD_505FM] = { 3746 + .name = "Beholder BeholdTV 505 FM/RDS", 3747 + .audio_clock = 0x00200000, 3748 + .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 3749 + .radio_type = UNSET, 3750 + .tuner_addr = ADDR_UNSET, 3751 + .radio_addr = ADDR_UNSET, 3752 + .tda9887_conf = TDA9887_PRESENT, 3753 + .inputs = {{ 3754 + .name = name_tv, 3755 + .vmux = 3, 3756 + .amux = LINE2, 3757 + .tv = 1, 3758 + },{ 3759 + .name = name_comp1, 3760 + .vmux = 1, 3761 + .amux = LINE1, 3762 + },{ 3763 + .name = name_svideo, 3764 + .vmux = 8, 3765 + .amux = LINE1, 3766 + }}, 3767 + .mute = { 3768 + .name = name_mute, 3769 + .amux = LINE1, 3770 + }, 3771 + .radio = { 3772 + .name = name_radio, 3773 + .amux = LINE2, 3774 + }, 3775 + }, 3776 + [SAA7134_BOARD_BEHOLD_507_9FM] = { 3777 + .name = "Beholder BeholdTV 507 FM/RDS / BeholdTV 509 FM", 3778 + .audio_clock = 0x00187de7, 3779 + .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 3780 + .radio_type = UNSET, 3781 + .tuner_addr = ADDR_UNSET, 3782 + .radio_addr = ADDR_UNSET, 3783 + .tda9887_conf = TDA9887_PRESENT, 3784 + .inputs = {{ 3785 + .name = name_tv, 3786 + .vmux = 3, 3787 + .amux = TV, 3788 + .tv = 1, 3789 + },{ 3790 + .name = name_comp1, 3791 + .vmux = 1, 3792 + .amux = LINE1, 3793 + },{ 3794 + .name = name_svideo, 3795 + .vmux = 8, 3796 + .amux = LINE1, 3797 + }}, 3798 + .radio = { 3799 + .name = name_radio, 3800 + .amux = LINE2, 3801 + }, 3802 + }, 3803 + [SAA7134_BOARD_BEHOLD_COLUMBUS_TVFM] = { 3804 + .name = "Beholder BeholdTV Columbus TVFM", 3805 + .audio_clock = 0x00187de7, 3806 + .tuner_type = TUNER_ALPS_TSBE5_PAL, 3807 + .radio_type = UNSET, 3808 + .tuner_addr = ADDR_UNSET, 3809 + .radio_addr = ADDR_UNSET, 3810 + .tda9887_conf = TDA9887_PRESENT, 3811 + .inputs = {{ 3812 + .name = name_tv, 3813 + .vmux = 3, 3814 + .amux = TV, 3815 + .tv = 1, 3816 + },{ 3817 + .name = name_comp1, 3818 + .vmux = 1, 3819 + .amux = LINE1, 3820 + },{ 3821 + .name = name_svideo, 3822 + .vmux = 8, 3823 + .amux = LINE1, 3824 + }}, 3825 + .radio = { 3826 + .name = name_radio, 3827 + .amux = LINE2, 3828 + }, 3829 + }, 3830 + [SAA7134_BOARD_BEHOLD_607_9FM] = { 3831 + /* Andrey Melnikoff <temnota@kmv.ru> */ 3832 + .name = "Beholder BeholdTV 607 / BeholdTV 609", 3833 + .audio_clock = 0x00187de7, 3834 + .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 3835 + .radio_type = UNSET, 3836 + .tuner_addr = ADDR_UNSET, 3837 + .radio_addr = ADDR_UNSET, 3838 + .tda9887_conf = TDA9887_PRESENT, 3839 + .inputs = {{ 3840 + .name = name_tv, 3841 + .vmux = 3, 3842 + .amux = TV, 3843 + .tv = 1, 3844 + },{ 3845 + .name = name_comp1, 3846 + .vmux = 1, 3847 + .amux = LINE1, 3848 + },{ 3849 + .name = name_svideo, 3850 + .vmux = 8, 3851 + .amux = LINE1, 3852 + }}, 3853 + .radio = { 3854 + .name = name_radio, 3855 + .amux = LINE2, 3856 + }, 3857 + }, 3858 + [SAA7134_BOARD_BEHOLD_M6] = { 3859 + /* Igor Kuznetsov <igk@igk.ru> */ 3860 + /* Andrey Melnikoff <temnota@kmv.ru> */ 3861 + .name = "Beholder BeholdTV M6 / BeholdTV M6 Extra", 3862 + .audio_clock = 0x00187de7, 3863 + .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 3864 + .radio_type = UNSET, 3865 + .tuner_addr = ADDR_UNSET, 3866 + .radio_addr = ADDR_UNSET, 3867 + .tda9887_conf = TDA9887_PRESENT, 3868 + .inputs = {{ 3869 + .name = name_tv, 3870 + .vmux = 3, 3871 + .amux = TV, 3872 + .tv = 1, 3873 + },{ 3874 + .name = name_comp1, 3875 + .vmux = 1, 3876 + .amux = LINE1, 3877 + },{ 3878 + .name = name_svideo, 3879 + .vmux = 8, 3880 + .amux = LINE1, 3881 + }}, 3882 + .radio = { 3883 + .name = name_radio, 3884 + .amux = LINE2, 3885 + }, 3886 + .mpeg = SAA7134_MPEG_EMPRESS, 3887 + }, 3565 3888 }; 3566 3889 3567 3890 const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards); ··· 4651 4328 .driver_data = SAA7134_BOARD_AVERMEDIA_SUPER_007, 4652 4329 },{ 4653 4330 .vendor = PCI_VENDOR_ID_PHILIPS, 4331 + .device = PCI_DEVICE_ID_PHILIPS_SAA7130, 4332 + .subvendor = 0x1131, 4333 + .subdevice = 0x0000, 4334 + .driver_data = SAA7134_BOARD_BEHOLD_401, 4335 + },{ 4336 + .vendor = PCI_VENDOR_ID_PHILIPS, 4337 + .device = PCI_DEVICE_ID_PHILIPS_SAA7130, 4338 + .subvendor = 0x0000, 4339 + .subdevice = 0x4016, 4340 + .driver_data = SAA7134_BOARD_BEHOLD_401, 4341 + },{ 4342 + .vendor = PCI_VENDOR_ID_PHILIPS, 4343 + .device = PCI_DEVICE_ID_PHILIPS_SAA7134, 4344 + .subvendor = 0x1131, 4345 + .subdevice = 0x0000, 4346 + .driver_data = SAA7134_BOARD_BEHOLD_403FM, 4347 + },{ 4348 + .vendor = PCI_VENDOR_ID_PHILIPS, 4349 + .device = PCI_DEVICE_ID_PHILIPS_SAA7134, 4350 + .subvendor = 0x0000, 4351 + .subdevice = 0x4036, 4352 + .driver_data = SAA7134_BOARD_BEHOLD_403, 4353 + },{ 4354 + .vendor = PCI_VENDOR_ID_PHILIPS, 4355 + .device = PCI_DEVICE_ID_PHILIPS_SAA7134, 4356 + .subvendor = 0x0000, 4357 + .subdevice = 0x4037, 4358 + .driver_data = SAA7134_BOARD_BEHOLD_403FM, 4359 + },{ 4360 + .vendor = PCI_VENDOR_ID_PHILIPS, 4361 + .device = PCI_DEVICE_ID_PHILIPS_SAA7130, 4362 + .subvendor = 0x0000, 4363 + .subdevice = 0x4050, 4364 + .driver_data = SAA7134_BOARD_BEHOLD_405, 4365 + },{ 4366 + .vendor = PCI_VENDOR_ID_PHILIPS, 4367 + .device = PCI_DEVICE_ID_PHILIPS_SAA7130, 4368 + .subvendor = 0x0000, 4369 + .subdevice = 0x4051, 4370 + .driver_data = SAA7134_BOARD_BEHOLD_405FM, 4371 + },{ 4372 + .vendor = PCI_VENDOR_ID_PHILIPS, 4373 + .device = PCI_DEVICE_ID_PHILIPS_SAA7134, 4374 + .subvendor = 0x0000, 4375 + .subdevice = 0x4070, 4376 + .driver_data = SAA7134_BOARD_BEHOLD_407, 4377 + },{ 4378 + .vendor = PCI_VENDOR_ID_PHILIPS, 4379 + .device = PCI_DEVICE_ID_PHILIPS_SAA7134, 4380 + .subvendor = 0x0000, 4381 + .subdevice = 0x4071, 4382 + .driver_data = SAA7134_BOARD_BEHOLD_407FM, 4383 + },{ 4384 + .vendor = PCI_VENDOR_ID_PHILIPS, 4385 + .device = PCI_DEVICE_ID_PHILIPS_SAA7133, 4386 + .subvendor = 0x0000, 4387 + .subdevice = 0x4090, 4388 + .driver_data = SAA7134_BOARD_BEHOLD_409, 4389 + },{ 4390 + .vendor = PCI_VENDOR_ID_PHILIPS, 4391 + .device = PCI_DEVICE_ID_PHILIPS_SAA7130, 4392 + .subvendor = 0x0000, 4393 + .subdevice = 0x5051, 4394 + .driver_data = SAA7134_BOARD_BEHOLD_505FM, 4395 + },{ 4396 + .vendor = PCI_VENDOR_ID_PHILIPS, 4397 + .device = PCI_DEVICE_ID_PHILIPS_SAA7130, 4398 + .subvendor = 0x0000, 4399 + .subdevice = 0x505B, 4400 + .driver_data = SAA7134_BOARD_BEHOLD_505FM, 4401 + },{ 4402 + .vendor = PCI_VENDOR_ID_PHILIPS, 4403 + .device = PCI_DEVICE_ID_PHILIPS_SAA7130, 4404 + .subvendor = 0x5ace, 4405 + .subdevice = 0x5050, 4406 + .driver_data = SAA7134_BOARD_BEHOLD_505FM, 4407 + },{ 4408 + .vendor = PCI_VENDOR_ID_PHILIPS, 4409 + .device = PCI_DEVICE_ID_PHILIPS_SAA7133, 4410 + .subvendor = 0x0000, 4411 + .subdevice = 0x5071, 4412 + .driver_data = SAA7134_BOARD_BEHOLD_507_9FM, 4413 + },{ 4414 + .vendor = PCI_VENDOR_ID_PHILIPS, 4415 + .device = PCI_DEVICE_ID_PHILIPS_SAA7133, 4416 + .subvendor = 0x0000, 4417 + .subdevice = 0x507B, 4418 + .driver_data = SAA7134_BOARD_BEHOLD_507_9FM, 4419 + },{ 4420 + .vendor = PCI_VENDOR_ID_PHILIPS, 4421 + .device = PCI_DEVICE_ID_PHILIPS_SAA7134, 4422 + .subvendor = 0x5ace, 4423 + .subdevice = 0x5070, 4424 + .driver_data = SAA7134_BOARD_BEHOLD_507_9FM, 4425 + },{ 4426 + .vendor = PCI_VENDOR_ID_PHILIPS, 4427 + .device = PCI_DEVICE_ID_PHILIPS_SAA7133, 4428 + .subvendor = 0x5ace, 4429 + .subdevice = 0x5090, 4430 + .driver_data = SAA7134_BOARD_BEHOLD_507_9FM, 4431 + },{ 4432 + .vendor = PCI_VENDOR_ID_PHILIPS, 4433 + .device = PCI_DEVICE_ID_PHILIPS_SAA7133, 4434 + .subvendor = 0x0000, 4435 + .subdevice = 0x5201, 4436 + .driver_data = SAA7134_BOARD_BEHOLD_COLUMBUS_TVFM, 4437 + },{ 4438 + .vendor = PCI_VENDOR_ID_PHILIPS, 4439 + .device = PCI_DEVICE_ID_PHILIPS_SAA7134, 4440 + .subvendor = 0x5ace, 4441 + .subdevice = 0x6070, 4442 + .driver_data = SAA7134_BOARD_BEHOLD_607_9FM, 4443 + },{ 4444 + .vendor = PCI_VENDOR_ID_PHILIPS, 4445 + .device = PCI_DEVICE_ID_PHILIPS_SAA7134, 4446 + .subvendor = 0x5ace, 4447 + .subdevice = 0x6071, 4448 + .driver_data = SAA7134_BOARD_BEHOLD_607_9FM, 4449 + },{ 4450 + .vendor = PCI_VENDOR_ID_PHILIPS, 4451 + .device = PCI_DEVICE_ID_PHILIPS_SAA7134, 4452 + .subvendor = 0x5ace, 4453 + .subdevice = 0x6072, 4454 + .driver_data = SAA7134_BOARD_BEHOLD_607_9FM, 4455 + },{ 4456 + .vendor = PCI_VENDOR_ID_PHILIPS, 4457 + .device = PCI_DEVICE_ID_PHILIPS_SAA7134, 4458 + .subvendor = 0x5ace, 4459 + .subdevice = 0x6073, 4460 + .driver_data = SAA7134_BOARD_BEHOLD_607_9FM, 4461 + },{ 4462 + .vendor = PCI_VENDOR_ID_PHILIPS, 4463 + .device = PCI_DEVICE_ID_PHILIPS_SAA7133, 4464 + .subvendor = 0x5ace, 4465 + .subdevice = 0x6090, 4466 + .driver_data = SAA7134_BOARD_BEHOLD_607_9FM, 4467 + },{ 4468 + .vendor = PCI_VENDOR_ID_PHILIPS, 4469 + .device = PCI_DEVICE_ID_PHILIPS_SAA7133, 4470 + .subvendor = 0x5ace, 4471 + .subdevice = 0x6091, 4472 + .driver_data = SAA7134_BOARD_BEHOLD_607_9FM, 4473 + },{ 4474 + .vendor = PCI_VENDOR_ID_PHILIPS, 4475 + .device = PCI_DEVICE_ID_PHILIPS_SAA7133, 4476 + .subvendor = 0x5ace, 4477 + .subdevice = 0x6092, 4478 + .driver_data = SAA7134_BOARD_BEHOLD_607_9FM, 4479 + },{ 4480 + .vendor = PCI_VENDOR_ID_PHILIPS, 4481 + .device = PCI_DEVICE_ID_PHILIPS_SAA7133, 4482 + .subvendor = 0x5ace, 4483 + .subdevice = 0x6093, 4484 + .driver_data = SAA7134_BOARD_BEHOLD_607_9FM, 4485 + },{ 4486 + .vendor = PCI_VENDOR_ID_PHILIPS, 4487 + .device = PCI_DEVICE_ID_PHILIPS_SAA7133, 4488 + .subvendor = 0x5ace, 4489 + .subdevice = 0x6190, 4490 + .driver_data = SAA7134_BOARD_BEHOLD_M6, 4491 + },{ 4492 + .vendor = PCI_VENDOR_ID_PHILIPS, 4493 + .device = PCI_DEVICE_ID_PHILIPS_SAA7133, 4494 + .subvendor = 0x5ace, 4495 + .subdevice = 0x6193, 4496 + .driver_data = SAA7134_BOARD_BEHOLD_M6, 4497 + },{ 4498 + .vendor = PCI_VENDOR_ID_PHILIPS, 4654 4499 .device = PCI_DEVICE_ID_PHILIPS_SAA7133, 4655 4500 .subvendor = 0x4e42, 4656 4501 .subdevice = 0x3502, ··· 4964 4473 case SAA7134_BOARD_ENCORE_ENLTV: 4965 4474 case SAA7134_BOARD_ENCORE_ENLTV_FM: 4966 4475 case SAA7134_BOARD_10MOONSTVMASTER3: 4476 + case SAA7134_BOARD_BEHOLD_401: 4477 + case SAA7134_BOARD_BEHOLD_403: 4478 + case SAA7134_BOARD_BEHOLD_403FM: 4479 + case SAA7134_BOARD_BEHOLD_405: 4480 + case SAA7134_BOARD_BEHOLD_405FM: 4481 + case SAA7134_BOARD_BEHOLD_407: 4482 + case SAA7134_BOARD_BEHOLD_407FM: 4483 + case SAA7134_BOARD_BEHOLD_409: 4484 + case SAA7134_BOARD_BEHOLD_505FM: 4485 + case SAA7134_BOARD_BEHOLD_507_9FM: 4967 4486 dev->has_remote = SAA7134_REMOTE_GPIO; 4968 4487 break; 4969 4488 case SAA7134_BOARD_FLYDVBS_LR300: ··· 5013 4512 saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x08000000, 0x00000000); 5014 4513 break; 5015 4514 case SAA7134_BOARD_AVERMEDIA_CARDBUS: 4515 + case SAA7134_BOARD_BEHOLD_COLUMBUS_TVFM: 5016 4516 /* power-up tuner chip */ 5017 4517 saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0xffffffff, 0xffffffff); 5018 4518 saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0xffffffff, 0xffffffff); ··· 5035 4533 case SAA7134_BOARD_PINNACLE_PCTV_310i: 5036 4534 case SAA7134_BOARD_UPMOST_PURPLE_TV: 5037 4535 case SAA7134_BOARD_HAUPPAUGE_HVR1110: 4536 + case SAA7134_BOARD_BEHOLD_607_9FM: 4537 + case SAA7134_BOARD_BEHOLD_M6: 5038 4538 dev->has_remote = SAA7134_REMOTE_I2C; 5039 4539 break; 5040 4540 case SAA7134_BOARD_AVERMEDIA_A169_B:
+2
drivers/media/video/saa7134/saa7134-i2c.c
··· 334 334 case 0x7a: 335 335 case 0x47: 336 336 case 0x71: 337 + case 0x2d: 337 338 { 338 339 struct IR_i2c *ir = i2c_get_clientdata(client); 339 340 d1printk("%s i2c IR detected (%s).\n", ··· 440 439 [ 0xa0 >> 1 ] = "eeprom", 441 440 [ 0xc0 >> 1 ] = "tuner (analog)", 442 441 [ 0x86 >> 1 ] = "tda9887", 442 + [ 0x5a >> 1 ] = "remote control", 443 443 }; 444 444 445 445 static void do_i2c_scan(char *name, struct i2c_client *c)
+60
drivers/media/video/saa7134/saa7134-input.c
··· 52 52 MODULE_PARM_DESC(repeat_period, "repeat period between " 53 53 "keypresses when key is down"); 54 54 55 + static unsigned int disable_other_ir; 56 + module_param(disable_other_ir, int, 0644); 57 + MODULE_PARM_DESC(disable_other_ir, "disable full codes of " 58 + "alternative remotes from other manufacturers"); 59 + 55 60 #define dprintk(fmt, arg...) if (ir_debug) \ 56 61 printk(KERN_DEBUG "%s/ir: " fmt, dev->name , ## arg) 57 62 #define i2cdprintk(fmt, arg...) if (ir_debug) \ ··· 156 151 /* return key */ 157 152 *ir_key = code4; 158 153 *ir_raw = code4; 154 + return 1; 155 + } 156 + 157 + 158 + static int get_key_beholdm6xx(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw) 159 + { 160 + unsigned char data[12]; 161 + u32 gpio; 162 + 163 + struct saa7134_dev *dev = ir->c.adapter->algo_data; 164 + 165 + /* rising SAA7134_GPIO_GPRESCAN reads the status */ 166 + saa_clearb(SAA7134_GPIO_GPMODE3, SAA7134_GPIO_GPRESCAN); 167 + saa_setb(SAA7134_GPIO_GPMODE3, SAA7134_GPIO_GPRESCAN); 168 + 169 + gpio = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2); 170 + 171 + if (0x400000 &~ gpio) 172 + return 0; /* No button press */ 173 + 174 + ir->c.addr = 0x5a >> 1; 175 + 176 + if (12 != i2c_master_recv(&ir->c, data, 12)) { 177 + i2cdprintk("read error\n"); 178 + return -EIO; 179 + } 180 + /* IR of this card normally decode signals NEC-standard from 181 + * - Sven IHOO MT 5.1R remote. xxyye718 182 + * - Sven DVD HD-10xx remote. xxyyf708 183 + * - BBK ... 184 + * - mayby others 185 + * So, skip not our, if disable full codes mode. 186 + */ 187 + if (data[10] != 0x6b && data[11] != 0x86 && disable_other_ir) 188 + return 0; 189 + 190 + *ir_key = data[9]; 191 + *ir_raw = data[9]; 192 + 159 193 return 1; 160 194 } 161 195 ··· 332 288 case SAA7134_BOARD_MANLI_MTV001: 333 289 case SAA7134_BOARD_MANLI_MTV002: 334 290 case SAA7134_BOARD_BEHOLD_409FM: 291 + case SAA7134_BOARD_BEHOLD_401: 292 + case SAA7134_BOARD_BEHOLD_403: 293 + case SAA7134_BOARD_BEHOLD_403FM: 294 + case SAA7134_BOARD_BEHOLD_405: 295 + case SAA7134_BOARD_BEHOLD_405FM: 296 + case SAA7134_BOARD_BEHOLD_407: 297 + case SAA7134_BOARD_BEHOLD_407FM: 298 + case SAA7134_BOARD_BEHOLD_409: 299 + case SAA7134_BOARD_BEHOLD_505FM: 300 + case SAA7134_BOARD_BEHOLD_507_9FM: 335 301 ir_codes = ir_codes_manli; 336 302 mask_keycode = 0x001f00; 337 303 mask_keyup = 0x004000; ··· 511 457 snprintf(ir->c.name, sizeof(ir->c.name), "HVR 1110"); 512 458 ir->get_key = get_key_hvr1110; 513 459 ir->ir_codes = ir_codes_hauppauge_new; 460 + break; 461 + case SAA7134_BOARD_BEHOLD_607_9FM: 462 + case SAA7134_BOARD_BEHOLD_M6: 463 + snprintf(ir->c.name, sizeof(ir->c.name), "BeholdTV"); 464 + ir->get_key = get_key_beholdm6xx; 465 + ir->ir_codes = ir_codes_behold; 514 466 break; 515 467 default: 516 468 dprintk("Shouldn't get here: Unknown board %x for I2C IR?\n",dev->board);
+13
drivers/media/video/saa7134/saa7134.h
··· 240 240 #define SAA7134_BOARD_SABRENT_TV_PCB05 115 241 241 #define SAA7134_BOARD_10MOONSTVMASTER3 116 242 242 #define SAA7134_BOARD_AVERMEDIA_SUPER_007 117 243 + #define SAA7134_BOARD_BEHOLD_401 118 244 + #define SAA7134_BOARD_BEHOLD_403 119 245 + #define SAA7134_BOARD_BEHOLD_403FM 120 246 + #define SAA7134_BOARD_BEHOLD_405 121 247 + #define SAA7134_BOARD_BEHOLD_405FM 122 248 + #define SAA7134_BOARD_BEHOLD_407 123 249 + #define SAA7134_BOARD_BEHOLD_407FM 124 250 + #define SAA7134_BOARD_BEHOLD_409 125 251 + #define SAA7134_BOARD_BEHOLD_505FM 126 252 + #define SAA7134_BOARD_BEHOLD_507_9FM 127 253 + #define SAA7134_BOARD_BEHOLD_COLUMBUS_TVFM 128 254 + #define SAA7134_BOARD_BEHOLD_607_9FM 129 255 + #define SAA7134_BOARD_BEHOLD_M6 130 243 256 244 257 #define SAA7134_MAXBOARDS 8 245 258 #define SAA7134_INPUT_MAX 8
+1
include/media/ir-common.h
··· 140 140 extern IR_KEYTAB_TYPE ir_codes_encore_enltv[IR_KEYTAB_SIZE]; 141 141 extern IR_KEYTAB_TYPE ir_codes_tt_1500[IR_KEYTAB_SIZE]; 142 142 extern IR_KEYTAB_TYPE ir_codes_fusionhdtv_mce[IR_KEYTAB_SIZE]; 143 + extern IR_KEYTAB_TYPE ir_codes_behold[IR_KEYTAB_SIZE]; 143 144 144 145 #endif 145 146