aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/saa7134/saa7134-cards.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-04-24 14:21:08 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-04-24 14:21:08 -0400
commitc328d54cd4ad120d76284e46dcca6c6cf996154a (patch)
tree104c023be66faa5fce6e0a56c0a6d13c62fd21e5 /drivers/media/video/saa7134/saa7134-cards.c
parent346ad4b7fe392571f19314f153db9151dbc1d82b (diff)
parentb0166ab3a6ae6d7af8d9a21a7836154963c69a11 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb
* git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb: (452 commits) V4L/DVB (7731): tuner-xc2028: fix signal strength calculus V4L/DVB (7730): tuner-xc2028: Fix SCODE load for MTS firmwares V4L/DVB (7729): Fix VIDIOCGAP corruption in ivtv V4L/DVB (7728): tea5761: bugzilla #10462: tea5761 autodetection code were broken V4L/DVB (7726): cx23885: Enable cx23417 support on the HVR1800 V4L/DVB (7725): cx23885: Add generic cx23417 hardware encoder support V4L/DVB (7723): pvrusb2: Clean up input selection list generation in V4L interface V4L/DVB (7722): pvrusb2: Implement FM radio support for Gotview USB2.0 DVD 2 V4L/DVB (7721): pvrusb2: Restructure cx23416 firmware loading to have a common exit point V4L/DVB (7720): pvrusb2: Fix bad error code on cx23416 firmware load failure V4L/DVB (7719): pvrusb2: Implement input selection enforcement V4L/DVB (7718): pvrusb2-dvb: update Kbuild selections V4L/DVB (7717): pvrusb2-dvb: add DVB-T support for Hauppauge pvrusb2 model 73xxx V4L/DVB (7716): pvrusb2: clean up global functions V4L/DVB (7715): pvrusb2: Clean out all use of __FUNCTION__ V4L/DVB (7714): pvrusb2: Fix hang on module removal V4L/DVB (7713): pvrusb2: Implement cleaner DVB kernel thread shutdown V4L/DVB (7712): pvrusb2: Close connect/disconnect race V4L/DVB (7711): pvrusb2: Fix race on module unload V4L/DVB (7710): pvrusb2: Implement critical digital streaming quirk for onair devices ...
Diffstat (limited to 'drivers/media/video/saa7134/saa7134-cards.c')
-rw-r--r--drivers/media/video/saa7134/saa7134-cards.c507
1 files changed, 479 insertions, 28 deletions
diff --git a/drivers/media/video/saa7134/saa7134-cards.c b/drivers/media/video/saa7134/saa7134-cards.c
index 6f5744286e8..98375955a84 100644
--- a/drivers/media/video/saa7134/saa7134-cards.c
+++ b/drivers/media/video/saa7134/saa7134-cards.c
@@ -22,11 +22,15 @@
22 22
23#include <linux/init.h> 23#include <linux/init.h>
24#include <linux/module.h> 24#include <linux/module.h>
25#include <linux/i2c.h>
26#include <linux/i2c-algo-bit.h>
25 27
26#include "saa7134-reg.h" 28#include "saa7134-reg.h"
27#include "saa7134.h" 29#include "saa7134.h"
30#include "tuner-xc2028.h"
28#include <media/v4l2-common.h> 31#include <media/v4l2-common.h>
29#include <media/tveeprom.h> 32#include <media/tveeprom.h>
33#include "tea5767.h"
30 34
31/* commly used strings */ 35/* commly used strings */
32static char name_mute[] = "mute"; 36static char name_mute[] = "mute";
@@ -1046,7 +1050,7 @@ struct saa7134_board saa7134_boards[] = {
1046 }, 1050 },
1047 [SAA7134_BOARD_MANLI_MTV002] = { 1051 [SAA7134_BOARD_MANLI_MTV002] = {
1048 /* Ognjen Nastic <ognjen@logosoft.ba> */ 1052 /* Ognjen Nastic <ognjen@logosoft.ba> */
1049 .name = "Manli MuchTV M-TV002/Behold TV 403 FM", 1053 .name = "Manli MuchTV M-TV002",
1050 .audio_clock = 0x00200000, 1054 .audio_clock = 0x00200000,
1051 .tuner_type = TUNER_PHILIPS_PAL, 1055 .tuner_type = TUNER_PHILIPS_PAL,
1052 .radio_type = UNSET, 1056 .radio_type = UNSET,
@@ -1073,7 +1077,7 @@ struct saa7134_board saa7134_boards[] = {
1073 }, 1077 },
1074 [SAA7134_BOARD_MANLI_MTV001] = { 1078 [SAA7134_BOARD_MANLI_MTV001] = {
1075 /* Ognjen Nastic <ognjen@logosoft.ba> UNTESTED */ 1079 /* Ognjen Nastic <ognjen@logosoft.ba> UNTESTED */
1076 .name = "Manli MuchTV M-TV001/Behold TV 401", 1080 .name = "Manli MuchTV M-TV001",
1077 .audio_clock = 0x00200000, 1081 .audio_clock = 0x00200000,
1078 .tuner_type = TUNER_PHILIPS_PAL, 1082 .tuner_type = TUNER_PHILIPS_PAL,
1079 .radio_type = UNSET, 1083 .radio_type = UNSET,
@@ -2195,6 +2199,8 @@ struct saa7134_board saa7134_boards[] = {
2195 }, 2199 },
2196 [SAA7134_BOARD_BEHOLD_409FM] = { 2200 [SAA7134_BOARD_BEHOLD_409FM] = {
2197 /* <http://tuner.beholder.ru>, Sergey <skiv@orel.ru> */ 2201 /* <http://tuner.beholder.ru>, Sergey <skiv@orel.ru> */
2202 /* Beholder Intl. Ltd. 2008 */
2203 /*Dmitry Belimov <d.belimov@gmail.com> */
2198 .name = "Beholder BeholdTV 409 FM", 2204 .name = "Beholder BeholdTV 409 FM",
2199 .audio_clock = 0x00187de7, 2205 .audio_clock = 0x00187de7,
2200 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 2206 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
@@ -2202,6 +2208,7 @@ struct saa7134_board saa7134_boards[] = {
2202 .tuner_addr = ADDR_UNSET, 2208 .tuner_addr = ADDR_UNSET,
2203 .radio_addr = ADDR_UNSET, 2209 .radio_addr = ADDR_UNSET,
2204 .tda9887_conf = TDA9887_PRESENT, 2210 .tda9887_conf = TDA9887_PRESENT,
2211 .gpiomask = 0x00008000,
2205 .inputs = {{ 2212 .inputs = {{
2206 .name = name_tv, 2213 .name = name_tv,
2207 .vmux = 3, 2214 .vmux = 3,
@@ -2908,15 +2915,13 @@ struct saa7134_board saa7134_boards[] = {
2908 }}, 2915 }},
2909 }, 2916 },
2910 [SAA7134_BOARD_MD7134_BRIDGE_2] = { 2917 [SAA7134_BOARD_MD7134_BRIDGE_2] = {
2911 /* This card has two saa7134 chips on it, 2918 /* The second saa7134 on this card only serves as DVB-S host bridge */
2912 but only one of them is currently working.
2913 The programming for the primary decoder is
2914 in SAA7134_BOARD_MD7134 */
2915 .name = "Medion 7134 Bridge #2", 2919 .name = "Medion 7134 Bridge #2",
2916 .audio_clock = 0x00187de7, 2920 .audio_clock = 0x00187de7,
2917 .radio_type = UNSET, 2921 .radio_type = UNSET,
2918 .tuner_addr = ADDR_UNSET, 2922 .tuner_addr = ADDR_UNSET,
2919 .radio_addr = ADDR_UNSET, 2923 .radio_addr = ADDR_UNSET,
2924 .mpeg = SAA7134_MPEG_DVB,
2920 }, 2925 },
2921 [SAA7134_BOARD_FLYDVBT_HYBRID_CARDBUS] = { 2926 [SAA7134_BOARD_FLYDVBT_HYBRID_CARDBUS] = {
2922 .name = "LifeView FlyDVB-T Hybrid Cardbus/MSI TV @nywhere A/D NB", 2927 .name = "LifeView FlyDVB-T Hybrid Cardbus/MSI TV @nywhere A/D NB",
@@ -3330,7 +3335,7 @@ struct saa7134_board saa7134_boards[] = {
3330 /* Juan Pablo Sormani <sorman@gmail.com> */ 3335 /* Juan Pablo Sormani <sorman@gmail.com> */
3331 .name = "Encore ENLTV-FM", 3336 .name = "Encore ENLTV-FM",
3332 .audio_clock = 0x00200000, 3337 .audio_clock = 0x00200000,
3333 .tuner_type = TUNER_PHILIPS_ATSC, 3338 .tuner_type = TUNER_PHILIPS_FCV1236D,
3334 .radio_type = UNSET, 3339 .radio_type = UNSET,
3335 .tuner_addr = ADDR_UNSET, 3340 .tuner_addr = ADDR_UNSET,
3336 .radio_addr = ADDR_UNSET, 3341 .radio_addr = ADDR_UNSET,
@@ -3575,12 +3580,15 @@ struct saa7134_board saa7134_boards[] = {
3575 }}, 3580 }},
3576 }, 3581 },
3577 [SAA7134_BOARD_BEHOLD_401] = { 3582 [SAA7134_BOARD_BEHOLD_401] = {
3583 /* Beholder Intl. Ltd. 2008 */
3584 /*Dmitry Belimov <d.belimov@gmail.com> */
3578 .name = "Beholder BeholdTV 401", 3585 .name = "Beholder BeholdTV 401",
3579 .audio_clock = 0x00187de7, 3586 .audio_clock = 0x00187de7,
3580 .tuner_type = TUNER_PHILIPS_FQ1216ME, 3587 .tuner_type = TUNER_PHILIPS_FQ1216ME,
3581 .radio_type = UNSET, 3588 .radio_type = UNSET,
3582 .tuner_addr = ADDR_UNSET, 3589 .tuner_addr = ADDR_UNSET,
3583 .radio_addr = ADDR_UNSET, 3590 .radio_addr = ADDR_UNSET,
3591 .gpiomask = 0x00008000,
3584 .inputs = {{ 3592 .inputs = {{
3585 .name = name_svideo, 3593 .name = name_svideo,
3586 .vmux = 8, 3594 .vmux = 8,
@@ -3601,12 +3609,15 @@ struct saa7134_board saa7134_boards[] = {
3601 }, 3609 },
3602 }, 3610 },
3603 [SAA7134_BOARD_BEHOLD_403] = { 3611 [SAA7134_BOARD_BEHOLD_403] = {
3612 /* Beholder Intl. Ltd. 2008 */
3613 /*Dmitry Belimov <d.belimov@gmail.com> */
3604 .name = "Beholder BeholdTV 403", 3614 .name = "Beholder BeholdTV 403",
3605 .audio_clock = 0x00187de7, 3615 .audio_clock = 0x00187de7,
3606 .tuner_type = TUNER_PHILIPS_FQ1216ME, 3616 .tuner_type = TUNER_PHILIPS_FQ1216ME,
3607 .radio_type = UNSET, 3617 .radio_type = UNSET,
3608 .tuner_addr = ADDR_UNSET, 3618 .tuner_addr = ADDR_UNSET,
3609 .radio_addr = ADDR_UNSET, 3619 .radio_addr = ADDR_UNSET,
3620 .gpiomask = 0x00008000,
3610 .inputs = {{ 3621 .inputs = {{
3611 .name = name_svideo, 3622 .name = name_svideo,
3612 .vmux = 8, 3623 .vmux = 8,
@@ -3623,12 +3634,15 @@ struct saa7134_board saa7134_boards[] = {
3623 }}, 3634 }},
3624 }, 3635 },
3625 [SAA7134_BOARD_BEHOLD_403FM] = { 3636 [SAA7134_BOARD_BEHOLD_403FM] = {
3637 /* Beholder Intl. Ltd. 2008 */
3638 /*Dmitry Belimov <d.belimov@gmail.com> */
3626 .name = "Beholder BeholdTV 403 FM", 3639 .name = "Beholder BeholdTV 403 FM",
3627 .audio_clock = 0x00187de7, 3640 .audio_clock = 0x00187de7,
3628 .tuner_type = TUNER_PHILIPS_FQ1216ME, 3641 .tuner_type = TUNER_PHILIPS_FQ1216ME,
3629 .radio_type = UNSET, 3642 .radio_type = UNSET,
3630 .tuner_addr = ADDR_UNSET, 3643 .tuner_addr = ADDR_UNSET,
3631 .radio_addr = ADDR_UNSET, 3644 .radio_addr = ADDR_UNSET,
3645 .gpiomask = 0x00008000,
3632 .inputs = {{ 3646 .inputs = {{
3633 .name = name_svideo, 3647 .name = name_svideo,
3634 .vmux = 8, 3648 .vmux = 8,
@@ -3649,6 +3663,8 @@ struct saa7134_board saa7134_boards[] = {
3649 }, 3663 },
3650 }, 3664 },
3651 [SAA7134_BOARD_BEHOLD_405] = { 3665 [SAA7134_BOARD_BEHOLD_405] = {
3666 /* Beholder Intl. Ltd. 2008 */
3667 /*Dmitry Belimov <d.belimov@gmail.com> */
3652 .name = "Beholder BeholdTV 405", 3668 .name = "Beholder BeholdTV 405",
3653 .audio_clock = 0x00187de7, 3669 .audio_clock = 0x00187de7,
3654 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 3670 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
@@ -3656,6 +3672,7 @@ struct saa7134_board saa7134_boards[] = {
3656 .tuner_addr = ADDR_UNSET, 3672 .tuner_addr = ADDR_UNSET,
3657 .radio_addr = ADDR_UNSET, 3673 .radio_addr = ADDR_UNSET,
3658 .tda9887_conf = TDA9887_PRESENT, 3674 .tda9887_conf = TDA9887_PRESENT,
3675 .gpiomask = 0x00008000,
3659 .inputs = {{ 3676 .inputs = {{
3660 .name = name_svideo, 3677 .name = name_svideo,
3661 .vmux = 8, 3678 .vmux = 8,
@@ -3673,6 +3690,8 @@ struct saa7134_board saa7134_boards[] = {
3673 }, 3690 },
3674 [SAA7134_BOARD_BEHOLD_405FM] = { 3691 [SAA7134_BOARD_BEHOLD_405FM] = {
3675 /* Sergey <skiv@orel.ru> */ 3692 /* Sergey <skiv@orel.ru> */
3693 /* Beholder Intl. Ltd. 2008 */
3694 /*Dmitry Belimov <d.belimov@gmail.com> */
3676 .name = "Beholder BeholdTV 405 FM", 3695 .name = "Beholder BeholdTV 405 FM",
3677 .audio_clock = 0x00187de7, 3696 .audio_clock = 0x00187de7,
3678 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 3697 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
@@ -3680,6 +3699,7 @@ struct saa7134_board saa7134_boards[] = {
3680 .tuner_addr = ADDR_UNSET, 3699 .tuner_addr = ADDR_UNSET,
3681 .radio_addr = ADDR_UNSET, 3700 .radio_addr = ADDR_UNSET,
3682 .tda9887_conf = TDA9887_PRESENT, 3701 .tda9887_conf = TDA9887_PRESENT,
3702 .gpiomask = 0x00008000,
3683 .inputs = {{ 3703 .inputs = {{
3684 .name = name_svideo, 3704 .name = name_svideo,
3685 .vmux = 8, 3705 .vmux = 8,
@@ -3700,6 +3720,8 @@ struct saa7134_board saa7134_boards[] = {
3700 }, 3720 },
3701 }, 3721 },
3702 [SAA7134_BOARD_BEHOLD_407] = { 3722 [SAA7134_BOARD_BEHOLD_407] = {
3723 /* Beholder Intl. Ltd. 2008 */
3724 /*Dmitry Belimov <d.belimov@gmail.com> */
3703 .name = "Beholder BeholdTV 407", 3725 .name = "Beholder BeholdTV 407",
3704 .audio_clock = 0x00187de7, 3726 .audio_clock = 0x00187de7,
3705 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 3727 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
@@ -3707,7 +3729,7 @@ struct saa7134_board saa7134_boards[] = {
3707 .tuner_addr = ADDR_UNSET, 3729 .tuner_addr = ADDR_UNSET,
3708 .radio_addr = ADDR_UNSET, 3730 .radio_addr = ADDR_UNSET,
3709 .tda9887_conf = TDA9887_PRESENT, 3731 .tda9887_conf = TDA9887_PRESENT,
3710 .gpiomask = 0xc0c000, 3732 .gpiomask = 0x00008000,
3711 .inputs = {{ 3733 .inputs = {{
3712 .name = name_svideo, 3734 .name = name_svideo,
3713 .vmux = 8, 3735 .vmux = 8,
@@ -3727,6 +3749,8 @@ struct saa7134_board saa7134_boards[] = {
3727 }}, 3749 }},
3728 }, 3750 },
3729 [SAA7134_BOARD_BEHOLD_407FM] = { 3751 [SAA7134_BOARD_BEHOLD_407FM] = {
3752 /* Beholder Intl. Ltd. 2008 */
3753 /*Dmitry Belimov <d.belimov@gmail.com> */
3730 .name = "Beholder BeholdTV 407 FM", 3754 .name = "Beholder BeholdTV 407 FM",
3731 .audio_clock = 0x00187de7, 3755 .audio_clock = 0x00187de7,
3732 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 3756 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
@@ -3734,7 +3758,7 @@ struct saa7134_board saa7134_boards[] = {
3734 .tuner_addr = ADDR_UNSET, 3758 .tuner_addr = ADDR_UNSET,
3735 .radio_addr = ADDR_UNSET, 3759 .radio_addr = ADDR_UNSET,
3736 .tda9887_conf = TDA9887_PRESENT, 3760 .tda9887_conf = TDA9887_PRESENT,
3737 .gpiomask = 0xc0c000, 3761 .gpiomask = 0x00008000,
3738 .inputs = {{ 3762 .inputs = {{
3739 .name = name_svideo, 3763 .name = name_svideo,
3740 .vmux = 8, 3764 .vmux = 8,
@@ -3759,6 +3783,8 @@ struct saa7134_board saa7134_boards[] = {
3759 }, 3783 },
3760 }, 3784 },
3761 [SAA7134_BOARD_BEHOLD_409] = { 3785 [SAA7134_BOARD_BEHOLD_409] = {
3786 /* Beholder Intl. Ltd. 2008 */
3787 /*Dmitry Belimov <d.belimov@gmail.com> */
3762 .name = "Beholder BeholdTV 409", 3788 .name = "Beholder BeholdTV 409",
3763 .audio_clock = 0x00187de7, 3789 .audio_clock = 0x00187de7,
3764 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 3790 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
@@ -3766,6 +3792,7 @@ struct saa7134_board saa7134_boards[] = {
3766 .tuner_addr = ADDR_UNSET, 3792 .tuner_addr = ADDR_UNSET,
3767 .radio_addr = ADDR_UNSET, 3793 .radio_addr = ADDR_UNSET,
3768 .tda9887_conf = TDA9887_PRESENT, 3794 .tda9887_conf = TDA9887_PRESENT,
3795 .gpiomask = 0x00008000,
3769 .inputs = {{ 3796 .inputs = {{
3770 .name = name_tv, 3797 .name = name_tv,
3771 .vmux = 3, 3798 .vmux = 3,
@@ -3782,6 +3809,8 @@ struct saa7134_board saa7134_boards[] = {
3782 }}, 3809 }},
3783 }, 3810 },
3784 [SAA7134_BOARD_BEHOLD_505FM] = { 3811 [SAA7134_BOARD_BEHOLD_505FM] = {
3812 /* Beholder Intl. Ltd. 2008 */
3813 /*Dmitry Belimov <d.belimov@gmail.com> */
3785 .name = "Beholder BeholdTV 505 FM/RDS", 3814 .name = "Beholder BeholdTV 505 FM/RDS",
3786 .audio_clock = 0x00200000, 3815 .audio_clock = 0x00200000,
3787 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 3816 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
@@ -3789,6 +3818,7 @@ struct saa7134_board saa7134_boards[] = {
3789 .tuner_addr = ADDR_UNSET, 3818 .tuner_addr = ADDR_UNSET,
3790 .radio_addr = ADDR_UNSET, 3819 .radio_addr = ADDR_UNSET,
3791 .tda9887_conf = TDA9887_PRESENT, 3820 .tda9887_conf = TDA9887_PRESENT,
3821 .gpiomask = 0x00008000,
3792 .inputs = {{ 3822 .inputs = {{
3793 .name = name_tv, 3823 .name = name_tv,
3794 .vmux = 3, 3824 .vmux = 3,
@@ -3813,6 +3843,8 @@ struct saa7134_board saa7134_boards[] = {
3813 }, 3843 },
3814 }, 3844 },
3815 [SAA7134_BOARD_BEHOLD_507_9FM] = { 3845 [SAA7134_BOARD_BEHOLD_507_9FM] = {
3846 /* Beholder Intl. Ltd. 2008 */
3847 /*Dmitry Belimov <d.belimov@gmail.com> */
3816 .name = "Beholder BeholdTV 507 FM/RDS / BeholdTV 509 FM", 3848 .name = "Beholder BeholdTV 507 FM/RDS / BeholdTV 509 FM",
3817 .audio_clock = 0x00187de7, 3849 .audio_clock = 0x00187de7,
3818 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 3850 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
@@ -3820,6 +3852,7 @@ struct saa7134_board saa7134_boards[] = {
3820 .tuner_addr = ADDR_UNSET, 3852 .tuner_addr = ADDR_UNSET,
3821 .radio_addr = ADDR_UNSET, 3853 .radio_addr = ADDR_UNSET,
3822 .tda9887_conf = TDA9887_PRESENT, 3854 .tda9887_conf = TDA9887_PRESENT,
3855 .gpiomask = 0x00008000,
3823 .inputs = {{ 3856 .inputs = {{
3824 .name = name_tv, 3857 .name = name_tv,
3825 .vmux = 3, 3858 .vmux = 3,
@@ -3840,6 +3873,8 @@ struct saa7134_board saa7134_boards[] = {
3840 }, 3873 },
3841 }, 3874 },
3842 [SAA7134_BOARD_BEHOLD_COLUMBUS_TVFM] = { 3875 [SAA7134_BOARD_BEHOLD_COLUMBUS_TVFM] = {
3876 /* Beholder Intl. Ltd. 2008 */
3877 /*Dmitry Belimov <d.belimov@gmail.com> */
3843 .name = "Beholder BeholdTV Columbus TVFM", 3878 .name = "Beholder BeholdTV Columbus TVFM",
3844 .audio_clock = 0x00187de7, 3879 .audio_clock = 0x00187de7,
3845 .tuner_type = TUNER_ALPS_TSBE5_PAL, 3880 .tuner_type = TUNER_ALPS_TSBE5_PAL,
@@ -3847,23 +3882,28 @@ struct saa7134_board saa7134_boards[] = {
3847 .tuner_addr = ADDR_UNSET, 3882 .tuner_addr = ADDR_UNSET,
3848 .radio_addr = ADDR_UNSET, 3883 .radio_addr = ADDR_UNSET,
3849 .tda9887_conf = TDA9887_PRESENT, 3884 .tda9887_conf = TDA9887_PRESENT,
3885 .gpiomask = 0x000A8004,
3850 .inputs = {{ 3886 .inputs = {{
3851 .name = name_tv, 3887 .name = name_tv,
3852 .vmux = 3, 3888 .vmux = 3,
3853 .amux = TV, 3889 .amux = TV,
3854 .tv = 1, 3890 .tv = 1,
3855 },{ 3891 .gpio = 0x000A8004,
3892 }, {
3856 .name = name_comp1, 3893 .name = name_comp1,
3857 .vmux = 1, 3894 .vmux = 1,
3858 .amux = LINE1, 3895 .amux = LINE1,
3859 },{ 3896 .gpio = 0x000A8000,
3897 }, {
3860 .name = name_svideo, 3898 .name = name_svideo,
3861 .vmux = 8, 3899 .vmux = 8,
3862 .amux = LINE1, 3900 .amux = LINE1,
3863 }}, 3901 .gpio = 0x000A8000,
3902 } },
3864 .radio = { 3903 .radio = {
3865 .name = name_radio, 3904 .name = name_radio,
3866 .amux = LINE2, 3905 .amux = LINE2,
3906 .gpio = 0x000A8000,
3867 }, 3907 },
3868 }, 3908 },
3869 [SAA7134_BOARD_BEHOLD_607_9FM] = { 3909 [SAA7134_BOARD_BEHOLD_607_9FM] = {
@@ -3992,6 +4032,221 @@ struct saa7134_board saa7134_boards[] = {
3992 .gpio = 0x6000, 4032 .gpio = 0x6000,
3993 }, 4033 },
3994 }, 4034 },
4035 [SAA7134_BOARD_PHILIPS_SNAKE] = {
4036 .name = "NXP Snake DVB-S reference design",
4037 .audio_clock = 0x00200000,
4038 .tuner_type = TUNER_ABSENT,
4039 .radio_type = UNSET,
4040 .tuner_addr = ADDR_UNSET,
4041 .radio_addr = ADDR_UNSET,
4042 .mpeg = SAA7134_MPEG_DVB,
4043 .inputs = {{
4044 .name = name_comp1,
4045 .vmux = 3,
4046 .amux = LINE1,
4047 }, {
4048 .name = name_svideo,
4049 .vmux = 8,
4050 .amux = LINE1,
4051 } },
4052 },
4053 [SAA7134_BOARD_CREATIX_CTX953] = {
4054 .name = "Medion/Creatix CTX953 Hybrid",
4055 .audio_clock = 0x00187de7,
4056 .tuner_type = TUNER_PHILIPS_TDA8290,
4057 .radio_type = UNSET,
4058 .tuner_addr = ADDR_UNSET,
4059 .radio_addr = ADDR_UNSET,
4060 .tuner_config = 0,
4061 .mpeg = SAA7134_MPEG_DVB,
4062 .inputs = {{
4063 .name = name_tv,
4064 .vmux = 1,
4065 .amux = TV,
4066 .tv = 1,
4067 }, {
4068 .name = name_comp1,
4069 .vmux = 0,
4070 .amux = LINE1,
4071 }, {
4072 .name = name_svideo,
4073 .vmux = 8,
4074 .amux = LINE1,
4075 } },
4076 },
4077 [SAA7134_BOARD_MSI_TVANYWHERE_AD11] = {
4078 .name = "MSI TV@nywhere A/D v1.1",
4079 .audio_clock = 0x00187de7,
4080 .tuner_type = TUNER_PHILIPS_TDA8290,
4081 .radio_type = UNSET,
4082 .tuner_addr = ADDR_UNSET,
4083 .radio_addr = ADDR_UNSET,
4084 .tuner_config = 2,
4085 .mpeg = SAA7134_MPEG_DVB,
4086 .gpiomask = 0x0200000,
4087 .inputs = { {
4088 .name = name_tv,
4089 .vmux = 1,
4090 .amux = TV,
4091 .tv = 1,
4092 }, {
4093 .name = name_comp1,
4094 .vmux = 3,
4095 .amux = LINE1,
4096 }, {
4097 .name = name_svideo,
4098 .vmux = 8,
4099 .amux = LINE1,
4100 } },
4101 .radio = {
4102 .name = name_radio,
4103 .amux = TV,
4104 .gpio = 0x0200000,
4105 },
4106 },
4107 [SAA7134_BOARD_AVERMEDIA_CARDBUS_506] = {
4108 .name = "AVerMedia Cardbus TV/Radio (E506R)",
4109 .audio_clock = 0x187de7,
4110 .tuner_type = TUNER_XC2028,
4111 .radio_type = UNSET,
4112 .tuner_addr = ADDR_UNSET,
4113 .radio_addr = ADDR_UNSET,
4114 /*
4115 TODO:
4116 .mpeg = SAA7134_MPEG_DVB,
4117 */
4118
4119 .inputs = {{
4120 .name = name_tv,
4121 .vmux = 1,
4122 .amux = TV,
4123 .tv = 1,
4124 }, {
4125 .name = name_comp1,
4126 .vmux = 3,
4127 .amux = LINE2,
4128 }, {
4129 .name = name_svideo,
4130 .vmux = 8,
4131 .amux = LINE1,
4132 } },
4133 .radio = {
4134 .name = name_radio,
4135 .amux = TV,
4136 },
4137 },
4138 [SAA7134_BOARD_AVERMEDIA_A16D] = {
4139 .name = "AVerMedia Hybrid TV/Radio (A16D)",
4140 .audio_clock = 0x187de7,
4141 .tuner_type = TUNER_XC2028,
4142 .radio_type = UNSET,
4143 .tuner_addr = ADDR_UNSET,
4144 .radio_addr = ADDR_UNSET,
4145 .inputs = {{
4146 .name = name_tv,
4147 .vmux = 1,
4148 .amux = TV,
4149 .tv = 1,
4150 }, {
4151 .name = name_svideo,
4152 .vmux = 8,
4153 .amux = LINE1,
4154 } },
4155 .radio = {
4156 .name = name_radio,
4157 .amux = LINE1,
4158 },
4159 },
4160 [SAA7134_BOARD_AVERMEDIA_M115] = {
4161 .name = "Avermedia M115",
4162 .audio_clock = 0x187de7,
4163 .tuner_type = TUNER_XC2028,
4164 .radio_type = UNSET,
4165 .tuner_addr = ADDR_UNSET,
4166 .radio_addr = ADDR_UNSET,
4167 .inputs = {{
4168 .name = name_tv,
4169 .vmux = 1,
4170 .amux = TV,
4171 .tv = 1,
4172 }, {
4173 .name = name_comp1,
4174 .vmux = 3,
4175 .amux = LINE1,
4176 }, {
4177 .name = name_svideo,
4178 .vmux = 8,
4179 .amux = LINE2,
4180 } },
4181 },
4182 [SAA7134_BOARD_VIDEOMATE_T750] = {
4183 /* John Newbigin <jn@it.swin.edu.au> */
4184 .name = "Compro VideoMate T750",
4185 .audio_clock = 0x00187de7,
4186 .tuner_type = TUNER_XC2028,
4187 .radio_type = UNSET,
4188 .tuner_addr = ADDR_UNSET,
4189 .radio_addr = ADDR_UNSET,
4190 .mpeg = SAA7134_MPEG_DVB,
4191 .inputs = {{
4192 .name = name_tv,
4193 .vmux = 3,
4194 .amux = TV,
4195 .tv = 1,
4196 }, {
4197 .name = name_comp1,
4198 .vmux = 1,
4199 .amux = LINE2,
4200 }, {
4201 .name = name_svideo,
4202 .vmux = 8,
4203 .amux = LINE2,
4204 } },
4205 .radio = {
4206 .name = name_radio,
4207 .amux = TV,
4208 }
4209 },
4210 [SAA7134_BOARD_AVERMEDIA_A700_PRO] = {
4211 /* Matthias Schwarzott <zzam@gentoo.org> */
4212 .name = "Avermedia DVB-S Pro A700",
4213 .audio_clock = 0x00187de7,
4214 .tuner_type = TUNER_ABSENT,
4215 .radio_type = UNSET,
4216 .tuner_addr = ADDR_UNSET,
4217 .radio_addr = ADDR_UNSET,
4218 /* no DVB support for now */
4219 /* .mpeg = SAA7134_MPEG_DVB, */
4220 .inputs = { {
4221 .name = name_comp,
4222 .vmux = 1,
4223 .amux = LINE1,
4224 }, {
4225 .name = name_svideo,
4226 .vmux = 6,
4227 .amux = LINE1,
4228 } },
4229 },
4230 [SAA7134_BOARD_AVERMEDIA_A700_HYBRID] = {
4231 /* Matthias Schwarzott <zzam@gentoo.org> */
4232 .name = "Avermedia DVB-S Hybrid+FM A700",
4233 .audio_clock = 0x00187de7,
4234 .tuner_type = TUNER_ABSENT, /* TUNER_XC2028 */
4235 .radio_type = UNSET,
4236 .tuner_addr = ADDR_UNSET,
4237 .radio_addr = ADDR_UNSET,
4238 /* no DVB support for now */
4239 /* .mpeg = SAA7134_MPEG_DVB, */
4240 .inputs = { {
4241 .name = name_comp,
4242 .vmux = 1,
4243 .amux = LINE1,
4244 }, {
4245 .name = name_svideo,
4246 .vmux = 6,
4247 .amux = LINE1,
4248 } },
4249 },
3995}; 4250};
3996 4251
3997const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards); 4252const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards);
@@ -4224,6 +4479,18 @@ struct pci_device_id saa7134_pci_tbl[] = {
4224 .driver_data = SAA7134_BOARD_MD2819, 4479 .driver_data = SAA7134_BOARD_MD2819,
4225 },{ 4480 },{
4226 .vendor = PCI_VENDOR_ID_PHILIPS, 4481 .vendor = PCI_VENDOR_ID_PHILIPS,
4482 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
4483 .subvendor = 0x1461, /* Avermedia Technologies Inc */
4484 .subdevice = 0xa7a1,
4485 .driver_data = SAA7134_BOARD_AVERMEDIA_A700_PRO,
4486 }, {
4487 .vendor = PCI_VENDOR_ID_PHILIPS,
4488 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
4489 .subvendor = 0x1461, /* Avermedia Technologies Inc */
4490 .subdevice = 0xa7a2,
4491 .driver_data = SAA7134_BOARD_AVERMEDIA_A700_HYBRID,
4492 }, {
4493 .vendor = PCI_VENDOR_ID_PHILIPS,
4227 .device = PCI_DEVICE_ID_PHILIPS_SAA7130, 4494 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
4228 .subvendor = 0x1461, /* Avermedia Technologies Inc */ 4495 .subvendor = 0x1461, /* Avermedia Technologies Inc */
4229 .subdevice = 0x2115, 4496 .subdevice = 0x2115,
@@ -4942,7 +5209,43 @@ struct pci_device_id saa7134_pci_tbl[] = {
4942 .subvendor = 0x1822, /*Twinhan Technology Co. Ltd*/ 5209 .subvendor = 0x1822, /*Twinhan Technology Co. Ltd*/
4943 .subdevice = 0x0022, 5210 .subdevice = 0x0022,
4944 .driver_data = SAA7134_BOARD_TWINHAN_DTV_DVB_3056, 5211 .driver_data = SAA7134_BOARD_TWINHAN_DTV_DVB_3056,
5212 }, {
5213 .vendor = PCI_VENDOR_ID_PHILIPS,
5214 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
5215 .subvendor = 0x16be,
5216 .subdevice = 0x0010, /* Medion version CTX953_V.1.4.3 */
5217 .driver_data = SAA7134_BOARD_CREATIX_CTX953,
5218 }, {
5219 .vendor = PCI_VENDOR_ID_PHILIPS,
5220 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
5221 .subvendor = 0x1462, /* MSI */
5222 .subdevice = 0x8625, /* TV@nywhere A/D v1.1 */
5223 .driver_data = SAA7134_BOARD_MSI_TVANYWHERE_AD11,
4945 },{ 5224 },{
5225 .vendor = PCI_VENDOR_ID_PHILIPS,
5226 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
5227 .subvendor = 0x1461, /* Avermedia Technologies Inc */
5228 .subdevice = 0xf436,
5229 .driver_data = SAA7134_BOARD_AVERMEDIA_CARDBUS_506,
5230 }, {
5231 .vendor = PCI_VENDOR_ID_PHILIPS,
5232 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
5233 .subvendor = 0x1461, /* Avermedia Technologies Inc */
5234 .subdevice = 0xf936,
5235 .driver_data = SAA7134_BOARD_AVERMEDIA_A16D,
5236 }, {
5237 .vendor = PCI_VENDOR_ID_PHILIPS,
5238 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
5239 .subvendor = 0x1461, /* Avermedia Technologies Inc */
5240 .subdevice = 0xa836,
5241 .driver_data = SAA7134_BOARD_AVERMEDIA_M115,
5242 }, {
5243 .vendor = PCI_VENDOR_ID_PHILIPS,
5244 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
5245 .subvendor = 0x185b,
5246 .subdevice = 0xc900,
5247 .driver_data = SAA7134_BOARD_VIDEOMATE_T750,
5248 }, {
4946 /* --- boards without eeprom + subsystem ID --- */ 5249 /* --- boards without eeprom + subsystem ID --- */
4947 .vendor = PCI_VENDOR_ID_PHILIPS, 5250 .vendor = PCI_VENDOR_ID_PHILIPS,
4948 .device = PCI_DEVICE_ID_PHILIPS_SAA7134, 5251 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
@@ -4998,6 +5301,77 @@ static void board_flyvideo(struct saa7134_dev *dev)
4998 dev->name, dev->name, dev->name); 5301 dev->name, dev->name, dev->name);
4999} 5302}
5000 5303
5304static int saa7134_xc2028_callback(struct saa7134_dev *dev,
5305 int command, int arg)
5306{
5307 switch (command) {
5308 case XC2028_TUNER_RESET:
5309 saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0x06e20000, 0x06e20000);
5310 saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x06a20000, 0x06a20000);
5311 mdelay(250);
5312 saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0x06e20000, 0);
5313 saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x06a20000, 0);
5314 mdelay(250);
5315 saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0x06e20000, 0x06e20000);
5316 saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x06a20000, 0x06a20000);
5317 mdelay(250);
5318 saa_andorl(SAA7133_ANALOG_IO_SELECT >> 2, 0x02, 0x02);
5319 saa_andorl(SAA7134_ANALOG_IN_CTRL1 >> 2, 0x81, 0x81);
5320 saa_andorl(SAA7134_AUDIO_CLOCK0 >> 2, 0x03187de7, 0x03187de7);
5321 saa_andorl(SAA7134_AUDIO_PLL_CTRL >> 2, 0x03, 0x03);
5322 saa_andorl(SAA7134_AUDIO_CLOCKS_PER_FIELD0 >> 2,
5323 0x0001e000, 0x0001e000);
5324 return 0;
5325 }
5326 return -EINVAL;
5327}
5328
5329
5330static int saa7134_tda8290_callback(struct saa7134_dev *dev,
5331 int command, int arg)
5332{
5333 u8 sync_control;
5334
5335 switch (command) {
5336 case 0: /* switch LNA gain through GPIO 22*/
5337 saa7134_set_gpio(dev, 22, arg) ;
5338 break;
5339 case 1: /* vsync output at GPIO22. 50 / 60Hz */
5340 saa_andorb(SAA7134_VIDEO_PORT_CTRL3, 0x80, 0x80);
5341 saa_andorb(SAA7134_VIDEO_PORT_CTRL6, 0x0f, 0x03);
5342 if (arg == 1)
5343 sync_control = 11;
5344 else
5345 sync_control = 17;
5346 saa_writeb(SAA7134_VGATE_START, sync_control);
5347 saa_writeb(SAA7134_VGATE_STOP, sync_control + 1);
5348 saa_andorb(SAA7134_MISC_VGATE_MSB, 0x03, 0x00);
5349 break;
5350 default:
5351 return -EINVAL;
5352 }
5353
5354 return 0;
5355}
5356
5357int saa7134_tuner_callback(void *priv, int command, int arg)
5358{
5359 struct saa7134_dev *dev = priv;
5360 if (dev != NULL) {
5361 switch (dev->tuner_type) {
5362 case TUNER_PHILIPS_TDA8290:
5363 return saa7134_tda8290_callback(dev, command, arg);
5364 case TUNER_XC2028:
5365 return saa7134_xc2028_callback(dev, command, arg);
5366 }
5367 } else {
5368 printk(KERN_ERR "saa7134: Error - device struct undefined.\n");
5369 return -EINVAL;
5370 }
5371 return -EINVAL;
5372}
5373EXPORT_SYMBOL(saa7134_tuner_callback);
5374
5001/* ----------------------------------------------------------- */ 5375/* ----------------------------------------------------------- */
5002 5376
5003static void hauppauge_eeprom(struct saa7134_dev *dev, u8 *eeprom_data) 5377static void hauppauge_eeprom(struct saa7134_dev *dev, u8 *eeprom_data)
@@ -5067,6 +5441,7 @@ int saa7134_board_init1(struct saa7134_dev *dev)
5067 case SAA7134_BOARD_VIDEOMATE_DVBT_300: 5441 case SAA7134_BOARD_VIDEOMATE_DVBT_300:
5068 case SAA7134_BOARD_VIDEOMATE_DVBT_200: 5442 case SAA7134_BOARD_VIDEOMATE_DVBT_200:
5069 case SAA7134_BOARD_VIDEOMATE_DVBT_200A: 5443 case SAA7134_BOARD_VIDEOMATE_DVBT_200A:
5444 case SAA7134_BOARD_VIDEOMATE_T750:
5070 case SAA7134_BOARD_MANLI_MTV001: 5445 case SAA7134_BOARD_MANLI_MTV001:
5071 case SAA7134_BOARD_MANLI_MTV002: 5446 case SAA7134_BOARD_MANLI_MTV002:
5072 case SAA7134_BOARD_BEHOLD_409FM: 5447 case SAA7134_BOARD_BEHOLD_409FM:
@@ -5133,11 +5508,29 @@ int saa7134_board_init1(struct saa7134_dev *dev)
5133 saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x08000000, 0x00000000); 5508 saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x08000000, 0x00000000);
5134 break; 5509 break;
5135 case SAA7134_BOARD_AVERMEDIA_CARDBUS: 5510 case SAA7134_BOARD_AVERMEDIA_CARDBUS:
5136 case SAA7134_BOARD_BEHOLD_COLUMBUS_TVFM: 5511 case SAA7134_BOARD_AVERMEDIA_CARDBUS_506:
5512 case SAA7134_BOARD_AVERMEDIA_M115:
5513 case SAA7134_BOARD_AVERMEDIA_A16D:
5514 /* power-down tuner chip */
5515 saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0xffffffff, 0);
5516 saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0xffffffff, 0);
5517 msleep(10);
5137 /* power-up tuner chip */ 5518 /* power-up tuner chip */
5138 saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0xffffffff, 0xffffffff); 5519 saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0xffffffff, 0xffffffff);
5139 saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0xffffffff, 0xffffffff); 5520 saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0xffffffff, 0xffffffff);
5140 msleep(1); 5521 msleep(10);
5522 break;
5523 case SAA7134_BOARD_BEHOLD_COLUMBUS_TVFM:
5524 /* power-down tuner chip */
5525 saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0x000A8004, 0x000A8004);
5526 saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x000A8004, 0);
5527 msleep(10);
5528 /* power-up tuner chip */
5529 saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0x000A8004, 0x000A8004);
5530 saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x000A8004, 0x000A8004);
5531 msleep(10);
5532 /* remote via GPIO */
5533 dev->has_remote = SAA7134_REMOTE_GPIO;
5141 break; 5534 break;
5142 case SAA7134_BOARD_RTD_VFG7350: 5535 case SAA7134_BOARD_RTD_VFG7350:
5143 5536
@@ -5160,7 +5553,6 @@ int saa7134_board_init1(struct saa7134_dev *dev)
5160 dev->has_remote = SAA7134_REMOTE_I2C; 5553 dev->has_remote = SAA7134_REMOTE_I2C;
5161 break; 5554 break;
5162 case SAA7134_BOARD_AVERMEDIA_A169_B: 5555 case SAA7134_BOARD_AVERMEDIA_A169_B:
5163 case SAA7134_BOARD_MD7134_BRIDGE_2:
5164 printk("%s: %s: dual saa713x broadcast decoders\n" 5556 printk("%s: %s: dual saa713x broadcast decoders\n"
5165 "%s: Sorry, none of the inputs to this chip are supported yet.\n" 5557 "%s: Sorry, none of the inputs to this chip are supported yet.\n"
5166 "%s: Dual decoder functionality is disabled for now, use the other chip.\n", 5558 "%s: Dual decoder functionality is disabled for now, use the other chip.\n",
@@ -5172,6 +5564,15 @@ int saa7134_board_init1(struct saa7134_dev *dev)
5172 saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0x8c040007, 0x8c040007); 5564 saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0x8c040007, 0x8c040007);
5173 saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x0c0007cd, 0x0c0007cd); 5565 saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x0c0007cd, 0x0c0007cd);
5174 break; 5566 break;
5567 case SAA7134_BOARD_AVERMEDIA_A700_PRO:
5568 case SAA7134_BOARD_AVERMEDIA_A700_HYBRID:
5569 /* write windows gpio values */
5570 saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0x80040100, 0x80040100);
5571 saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x80040100, 0x00040100);
5572 printk("%s: %s: hybrid analog/dvb card\n"
5573 "%s: Sorry, only the analog inputs are supported for now.\n",
5574 dev->name, card(dev).name, dev->name);
5575 break;
5175 } 5576 }
5176 return 0; 5577 return 0;
5177} 5578}
@@ -5200,11 +5601,16 @@ int saa7134_board_init2(struct saa7134_dev *dev)
5200 dev->tuner_type = saa7134_boards[dev->board].tuner_type; 5601 dev->tuner_type = saa7134_boards[dev->board].tuner_type;
5201 5602
5202 if (TUNER_ABSENT != dev->tuner_type) { 5603 if (TUNER_ABSENT != dev->tuner_type) {
5203 tun_setup.mode_mask = T_RADIO | T_ANALOG_TV | T_DIGITAL_TV; 5604 tun_setup.mode_mask = T_RADIO |
5204 tun_setup.type = dev->tuner_type; 5605 T_ANALOG_TV |
5205 tun_setup.addr = ADDR_UNSET; 5606 T_DIGITAL_TV;
5607 tun_setup.type = dev->tuner_type;
5608 tun_setup.addr = ADDR_UNSET;
5609 tun_setup.tuner_callback = saa7134_tuner_callback;
5206 5610
5207 saa7134_i2c_call_clients (dev, TUNER_SET_TYPE_ADDR, &tun_setup); 5611 saa7134_i2c_call_clients(dev,
5612 TUNER_SET_TYPE_ADDR,
5613 &tun_setup);
5208 } 5614 }
5209 break; 5615 break;
5210 case SAA7134_BOARD_MD7134: 5616 case SAA7134_BOARD_MD7134:
@@ -5275,14 +5681,25 @@ int saa7134_board_init2(struct saa7134_dev *dev)
5275 &tda9887_cfg); 5681 &tda9887_cfg);
5276 } 5682 }
5277 5683
5278 tun_setup.mode_mask = T_RADIO | T_ANALOG_TV | T_DIGITAL_TV; 5684 tun_setup.mode_mask = T_RADIO |
5685 T_ANALOG_TV |
5686 T_DIGITAL_TV;
5279 tun_setup.type = dev->tuner_type; 5687 tun_setup.type = dev->tuner_type;
5280 tun_setup.addr = ADDR_UNSET; 5688 tun_setup.addr = ADDR_UNSET;
5281 5689
5282 saa7134_i2c_call_clients (dev, TUNER_SET_TYPE_ADDR,&tun_setup); 5690 saa7134_i2c_call_clients(dev,
5691 TUNER_SET_TYPE_ADDR, &tun_setup);
5283 } 5692 }
5284 break; 5693 break;
5285 case SAA7134_BOARD_PHILIPS_EUROPA: 5694 case SAA7134_BOARD_PHILIPS_EUROPA:
5695 if (dev->autodetected && (dev->eedata[0x41] == 0x1c)) {
5696 /* Reconfigure board as Snake reference design */
5697 dev->board = SAA7134_BOARD_PHILIPS_SNAKE;
5698 dev->tuner_type = saa7134_boards[dev->board].tuner_type;
5699 printk(KERN_INFO "%s: Reconfigured board as %s\n",
5700 dev->name, saa7134_boards[dev->board].name);
5701 break;
5702 }
5286 case SAA7134_BOARD_VIDEOMATE_DVBT_300: 5703 case SAA7134_BOARD_VIDEOMATE_DVBT_300:
5287 case SAA7134_BOARD_ASUS_EUROPA2_HYBRID: 5704 case SAA7134_BOARD_ASUS_EUROPA2_HYBRID:
5288 /* The Philips EUROPA based hybrid boards have the tuner connected through 5705 /* The Philips EUROPA based hybrid boards have the tuner connected through
@@ -5333,6 +5750,7 @@ int saa7134_board_init2(struct saa7134_dev *dev)
5333 case SAA7134_BOARD_MEDION_MD8800_QUADRO: 5750 case SAA7134_BOARD_MEDION_MD8800_QUADRO:
5334 case SAA7134_BOARD_AVERMEDIA_SUPER_007: 5751 case SAA7134_BOARD_AVERMEDIA_SUPER_007:
5335 case SAA7134_BOARD_TWINHAN_DTV_DVB_3056: 5752 case SAA7134_BOARD_TWINHAN_DTV_DVB_3056:
5753 case SAA7134_BOARD_CREATIX_CTX953:
5336 /* this is a hybrid board, initialize to analog mode 5754 /* this is a hybrid board, initialize to analog mode
5337 * and configure firmware eeprom address 5755 * and configure firmware eeprom address
5338 */ 5756 */
@@ -5402,13 +5820,46 @@ int saa7134_board_init2(struct saa7134_dev *dev)
5402 break; 5820 break;
5403 } 5821 }
5404 break; 5822 break;
5823 case SAA7134_BOARD_BEHOLD_COLUMBUS_TVFM:
5824 {
5825 struct v4l2_priv_tun_config tea5767_cfg;
5826 struct tea5767_ctrl ctl;
5827
5828 dev->i2c_client.addr = 0xC0;
5829 /* set TEA5767(analog FM) defines */
5830 memset(&ctl, 0, sizeof(ctl));
5831 ctl.xtal_freq = TEA5767_HIGH_LO_13MHz;
5832 tea5767_cfg.tuner = TUNER_TEA5767;
5833 tea5767_cfg.priv = &ctl;
5834 saa7134_i2c_call_clients(dev, TUNER_SET_CONFIG, &tea5767_cfg);
5835 }
5836 break;
5405 } 5837 }
5838
5839 if (dev->tuner_type == TUNER_XC2028) {
5840 struct v4l2_priv_tun_config xc2028_cfg;
5841 struct xc2028_ctrl ctl;
5842
5843 memset(&xc2028_cfg, 0, sizeof(ctl));
5844 memset(&ctl, 0, sizeof(ctl));
5845
5846 ctl.fname = XC2028_DEFAULT_FIRMWARE;
5847 ctl.max_len = 64;
5848
5849 switch (dev->board) {
5850 case SAA7134_BOARD_AVERMEDIA_A16D:
5851 ctl.demod = XC3028_FE_ZARLINK456;
5852 break;
5853 default:
5854 ctl.demod = XC3028_FE_OREN538;
5855 ctl.mts = 1;
5856 }
5857
5858 xc2028_cfg.tuner = TUNER_XC2028;
5859 xc2028_cfg.priv = &ctl;
5860
5861 saa7134_i2c_call_clients(dev, TUNER_SET_CONFIG, &xc2028_cfg);
5862 }
5863
5406 return 0; 5864 return 0;
5407} 5865}
5408
5409/* ----------------------------------------------------------- */
5410/*
5411 * Local variables:
5412 * c-basic-offset: 8
5413 * End:
5414 */