V4L/DVB (10632): Added support for AVerMedia Cardbus Hybrid remote control
[safe/jmp/linux-2.6] / drivers / media / video / saa7134 / saa7134-cards.c
index e30f34e..67c223c 100644 (file)
@@ -30,6 +30,7 @@
 #include "tuner-xc2028.h"
 #include <media/v4l2-common.h>
 #include <media/tveeprom.h>
+#include "tea5767.h"
 
 /* commly used strings */
 static char name_mute[]    = "mute";
@@ -46,6 +47,9 @@ static char name_svideo[]  = "S-Video";
 /* ------------------------------------------------------------------ */
 /* board config info                                                  */
 
+/* If radio_type !=UNSET, radio_addr should be specified
+ */
+
 struct saa7134_board saa7134_boards[] = {
        [SAA7134_BOARD_UNKNOWN] = {
                .name           = "UNKNOWN/GENERIC",
@@ -1049,7 +1053,7 @@ struct saa7134_board saa7134_boards[] = {
        },
        [SAA7134_BOARD_MANLI_MTV002] = {
                /* Ognjen Nastic <ognjen@logosoft.ba> */
-               .name           = "Manli MuchTV M-TV002/Behold TV 403 FM",
+               .name           = "Manli MuchTV M-TV002",
                .audio_clock    = 0x00200000,
                .tuner_type     = TUNER_PHILIPS_PAL,
                .radio_type     = UNSET,
@@ -1076,7 +1080,7 @@ struct saa7134_board saa7134_boards[] = {
        },
        [SAA7134_BOARD_MANLI_MTV001] = {
                /* Ognjen Nastic <ognjen@logosoft.ba> UNTESTED */
-               .name           = "Manli MuchTV M-TV001/Behold TV 401",
+               .name           = "Manli MuchTV M-TV001",
                .audio_clock    = 0x00200000,
                .tuner_type     = TUNER_PHILIPS_PAL,
                .radio_type     = UNSET,
@@ -1283,6 +1287,22 @@ struct saa7134_board saa7134_boards[] = {
                        .vmux = 8,
                }},
        },
+       [SAA7134_BOARD_AVERMEDIA_M103] = {
+               /* Massimo Piccioni <dafastidio@libero.it> */
+               .name           = "AVerMedia MiniPCI DVB-T Hybrid M103",
+               .audio_clock    = 0x187de7,
+               .tuner_type     = TUNER_XC2028,
+               .radio_type     = UNSET,
+               .tuner_addr     = ADDR_UNSET,
+               .radio_addr     = ADDR_UNSET,
+                .mpeg           = SAA7134_MPEG_DVB,
+                .inputs         = {{
+                        .name = name_tv,
+                        .vmux = 1,
+                        .amux = TV,
+                        .tv   = 1,
+                } },
+       },
        [SAA7134_BOARD_NOVAC_PRIMETV7133] = {
                /* toshii@netbsd.org */
                .name           = "Noval Prime TV 7133",
@@ -2198,6 +2218,8 @@ struct saa7134_board saa7134_boards[] = {
        },
        [SAA7134_BOARD_BEHOLD_409FM] = {
                /* <http://tuner.beholder.ru>, Sergey <skiv@orel.ru> */
+               /*       Beholder Intl. Ltd. 2008      */
+               /*Dmitry Belimov <d.belimov@gmail.com> */
                .name           = "Beholder BeholdTV 409 FM",
                .audio_clock    = 0x00187de7,
                .tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
@@ -2205,6 +2227,7 @@ struct saa7134_board saa7134_boards[] = {
                .tuner_addr     = ADDR_UNSET,
                .radio_addr     = ADDR_UNSET,
                .tda9887_conf   = TDA9887_PRESENT,
+               .gpiomask       = 0x00008000,
                .inputs         = {{
                          .name = name_tv,
                          .vmux = 3,
@@ -2911,15 +2934,13 @@ struct saa7134_board saa7134_boards[] = {
                }},
        },
        [SAA7134_BOARD_MD7134_BRIDGE_2] = {
-               /* This card has two saa7134 chips on it,
-                  but only one of them is currently working.
-                  The programming for the primary decoder is
-                  in SAA7134_BOARD_MD7134 */
+               /* The second saa7134 on this card only serves as DVB-S host bridge */
                .name           = "Medion 7134 Bridge #2",
                .audio_clock    = 0x00187de7,
                .radio_type     = UNSET,
                .tuner_addr     = ADDR_UNSET,
                .radio_addr     = ADDR_UNSET,
+               .mpeg           = SAA7134_MPEG_DVB,
        },
        [SAA7134_BOARD_FLYDVBT_HYBRID_CARDBUS] = {
                .name           = "LifeView FlyDVB-T Hybrid Cardbus/MSI TV @nywhere A/D NB",
@@ -3085,7 +3106,7 @@ struct saa7134_board saa7134_boards[] = {
                .tuner_type     = TUNER_PHILIPS_TD1316, /* untested */
                .radio_type     = TUNER_TEA5767, /* untested */
                .tuner_addr     = ADDR_UNSET,
-               .radio_addr     = ADDR_UNSET,
+               .radio_addr     = 0x60,
                .tda9887_conf   = TDA9887_PRESENT,
                .mpeg           = SAA7134_MPEG_DVB,
                .inputs         = {{
@@ -3239,6 +3260,7 @@ struct saa7134_board saa7134_boards[] = {
        },
        [SAA7134_BOARD_HAUPPAUGE_HVR1110] = {
                /* Thomas Genty <tomlohave@gmail.com> */
+               /* David Bentham <db260179@hotmail.com> */
                .name           = "Hauppauge WinTV-HVR1110 DVB-T/Hybrid",
                .audio_clock    = 0x00187de7,
                .tuner_type     = TUNER_PHILIPS_TDA8290,
@@ -3247,23 +3269,26 @@ struct saa7134_board saa7134_boards[] = {
                .radio_addr     = ADDR_UNSET,
                .tuner_config   = 1,
                .mpeg           = SAA7134_MPEG_DVB,
+               .gpiomask       = 0x0200100,
                .inputs         = {{
                        .name = name_tv,
                        .vmux = 1,
                        .amux = TV,
                        .tv   = 1,
-               },{
-                       .name   = name_comp1,
-                       .vmux   = 3,
-                       .amux   = LINE2, /* FIXME: audio doesn't work on svideo/composite */
-               },{
-                       .name   = name_svideo,
-                       .vmux   = 8,
-                       .amux   = LINE2, /* FIXME: audio doesn't work on svideo/composite */
-               }},
+                       .gpio = 0x0000100,
+               }, {
+                       .name = name_comp1,
+                       .vmux = 3,
+                       .amux = LINE1,
+               }, {
+                       .name = name_svideo,
+                       .vmux = 8,
+                       .amux = LINE1,
+               } },
                .radio = {
                        .name = name_radio,
-                       .amux   = TV,
+                       .amux = TV,
+                       .gpio = 0x0200100,
                },
        },
        [SAA7134_BOARD_CINERGY_HT_PCMCIA] = {
@@ -3367,6 +3392,42 @@ struct saa7134_board saa7134_boards[] = {
                        .amux = 0,
                },
        },
+       [SAA7134_BOARD_ENCORE_ENLTV_FM53] = {
+               .name           = "Encore ENLTV-FM v5.3",
+               .audio_clock    = 0x00200000,
+               .tuner_type     = TUNER_TNF_5335MF,
+               .radio_type     = UNSET,
+               .tuner_addr     = ADDR_UNSET,
+               .radio_addr     = ADDR_UNSET,
+               .gpiomask       = 0x7000,
+               .inputs         = { {
+                       .name = name_tv,
+                       .vmux = 1,
+                       .amux = 1,
+                       .tv   = 1,
+                       .gpio = 0x50000,
+               }, {
+                       .name = name_comp1,
+                       .vmux = 3,
+                       .amux = 2,
+                       .gpio = 0x2000,
+               }, {
+                       .name = name_svideo,
+                       .vmux = 8,
+                       .amux = 2,
+                       .gpio = 0x2000,
+               } },
+               .radio = {
+                       .name = name_radio,
+                       .vmux = 1,
+                       .amux = 1,
+               },
+               .mute = {
+                       .name = name_mute,
+                       .gpio = 0xf000,
+                       .amux = 0,
+               },
+       },
        [SAA7134_BOARD_CINERGY_HT_PCI] = {
                .name           = "Terratec Cinergy HT PCI",
                .audio_clock    = 0x00187de7,
@@ -3498,6 +3559,39 @@ struct saa7134_board saa7134_boards[] = {
                        .amux = TV,
                        .gpio = 0x0200000,
                },
+       },
+       [SAA7134_BOARD_ASUSTeK_P7131_ANALOG] = {
+              .name           = "ASUSTeK P7131 Analog",
+              .audio_clock    = 0x00187de7,
+              .tuner_type     = TUNER_PHILIPS_TDA8290,
+              .radio_type     = UNSET,
+              .tuner_addr     = ADDR_UNSET,
+              .radio_addr     = ADDR_UNSET,
+              .gpiomask       = 1 << 21,
+              .inputs         = {{
+                      .name = name_tv,
+                      .vmux = 1,
+                      .amux = TV,
+                      .tv   = 1,
+                      .gpio = 0x0000000,
+              }, {
+                      .name = name_comp1,
+                      .vmux = 3,
+                      .amux = LINE2,
+              }, {
+                      .name = name_comp2,
+                      .vmux = 0,
+                      .amux = LINE2,
+              }, {
+                      .name = name_svideo,
+                      .vmux = 8,
+                      .amux = LINE2,
+              } },
+              .radio = {
+                      .name = name_radio,
+                      .amux = TV,
+                      .gpio = 0x0200000,
+              },
        },
        [SAA7134_BOARD_SABRENT_TV_PCB05] = {
                .name           = "Sabrent PCMCIA TV-PCB05",
@@ -3577,13 +3671,50 @@ struct saa7134_board saa7134_boards[] = {
                        .tv     = 1,
                }},
        },
+       [SAA7134_BOARD_AVERMEDIA_M135A] = {
+               .name           = "Avermedia PCI pure analog (M135A)",
+               .audio_clock    = 0x00187de7,
+               .tuner_type     = TUNER_PHILIPS_TDA8290,
+               .radio_type     = UNSET,
+               .tuner_addr     = ADDR_UNSET,
+               .radio_addr     = ADDR_UNSET,
+               .tuner_config   = 2,
+               .gpiomask       = 0x020200000,
+               .inputs         = {{
+                       .name = name_tv,
+                       .vmux = 1,
+                       .amux = TV,
+                       .tv   = 1,
+               }, {
+                       .name = name_comp1,
+                       .vmux = 3,
+                       .amux = LINE1,
+               }, {
+                       .name = name_svideo,
+                       .vmux = 8,
+                       .amux = LINE1,
+               } },
+               .radio = {
+                       .name = name_radio,
+                       .amux = TV,
+                       .gpio = 0x00200000,
+               },
+               .mute = {
+                       .name = name_mute,
+                       .amux = TV,
+                       .gpio = 0x01,
+               },
+       },
        [SAA7134_BOARD_BEHOLD_401] = {
+               /*       Beholder Intl. Ltd. 2008      */
+               /*Dmitry Belimov <d.belimov@gmail.com> */
                .name           = "Beholder BeholdTV 401",
                .audio_clock    = 0x00187de7,
                .tuner_type     = TUNER_PHILIPS_FQ1216ME,
                .radio_type     = UNSET,
                .tuner_addr     = ADDR_UNSET,
                .radio_addr     = ADDR_UNSET,
+               .gpiomask       = 0x00008000,
                .inputs         = {{
                        .name = name_svideo,
                        .vmux = 8,
@@ -3604,12 +3735,15 @@ struct saa7134_board saa7134_boards[] = {
                },
        },
        [SAA7134_BOARD_BEHOLD_403] = {
+               /*       Beholder Intl. Ltd. 2008      */
+               /*Dmitry Belimov <d.belimov@gmail.com> */
                .name           = "Beholder BeholdTV 403",
                .audio_clock    = 0x00187de7,
                .tuner_type     = TUNER_PHILIPS_FQ1216ME,
                .radio_type     = UNSET,
                .tuner_addr     = ADDR_UNSET,
                .radio_addr     = ADDR_UNSET,
+               .gpiomask       = 0x00008000,
                .inputs         = {{
                        .name = name_svideo,
                        .vmux = 8,
@@ -3626,12 +3760,15 @@ struct saa7134_board saa7134_boards[] = {
                }},
        },
        [SAA7134_BOARD_BEHOLD_403FM] = {
+               /*       Beholder Intl. Ltd. 2008      */
+               /*Dmitry Belimov <d.belimov@gmail.com> */
                .name           = "Beholder BeholdTV 403 FM",
                .audio_clock    = 0x00187de7,
                .tuner_type     = TUNER_PHILIPS_FQ1216ME,
                .radio_type     = UNSET,
                .tuner_addr     = ADDR_UNSET,
                .radio_addr     = ADDR_UNSET,
+               .gpiomask       = 0x00008000,
                .inputs         = {{
                        .name = name_svideo,
                        .vmux = 8,
@@ -3652,6 +3789,8 @@ struct saa7134_board saa7134_boards[] = {
                },
        },
        [SAA7134_BOARD_BEHOLD_405] = {
+               /*       Beholder Intl. Ltd. 2008      */
+               /*Dmitry Belimov <d.belimov@gmail.com> */
                .name           = "Beholder BeholdTV 405",
                .audio_clock    = 0x00187de7,
                .tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
@@ -3659,6 +3798,7 @@ struct saa7134_board saa7134_boards[] = {
                .tuner_addr     = ADDR_UNSET,
                .radio_addr     = ADDR_UNSET,
                .tda9887_conf   = TDA9887_PRESENT,
+               .gpiomask       = 0x00008000,
                .inputs         = {{
                        .name = name_svideo,
                        .vmux = 8,
@@ -3676,6 +3816,8 @@ struct saa7134_board saa7134_boards[] = {
        },
        [SAA7134_BOARD_BEHOLD_405FM] = {
                /* Sergey <skiv@orel.ru> */
+               /*       Beholder Intl. Ltd. 2008      */
+               /*Dmitry Belimov <d.belimov@gmail.com> */
                .name           = "Beholder BeholdTV 405 FM",
                .audio_clock    = 0x00187de7,
                .tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
@@ -3683,6 +3825,7 @@ struct saa7134_board saa7134_boards[] = {
                .tuner_addr     = ADDR_UNSET,
                .radio_addr     = ADDR_UNSET,
                .tda9887_conf   = TDA9887_PRESENT,
+               .gpiomask       = 0x00008000,
                .inputs         = {{
                        .name = name_svideo,
                        .vmux = 8,
@@ -3703,6 +3846,8 @@ struct saa7134_board saa7134_boards[] = {
                },
        },
        [SAA7134_BOARD_BEHOLD_407] = {
+               /*       Beholder Intl. Ltd. 2008      */
+               /*Dmitry Belimov <d.belimov@gmail.com> */
                .name           = "Beholder BeholdTV 407",
                .audio_clock    = 0x00187de7,
                .tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
@@ -3710,7 +3855,7 @@ struct saa7134_board saa7134_boards[] = {
                .tuner_addr     = ADDR_UNSET,
                .radio_addr     = ADDR_UNSET,
                .tda9887_conf   = TDA9887_PRESENT,
-               .gpiomask = 0xc0c000,
+               .gpiomask       = 0x00008000,
                .inputs = {{
                        .name = name_svideo,
                        .vmux = 8,
@@ -3730,6 +3875,8 @@ struct saa7134_board saa7134_boards[] = {
                }},
        },
        [SAA7134_BOARD_BEHOLD_407FM] = {
+               /*       Beholder Intl. Ltd. 2008      */
+               /*Dmitry Belimov <d.belimov@gmail.com> */
                .name           = "Beholder BeholdTV 407 FM",
                .audio_clock    = 0x00187de7,
                .tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
@@ -3737,7 +3884,7 @@ struct saa7134_board saa7134_boards[] = {
                .tuner_addr     = ADDR_UNSET,
                .radio_addr     = ADDR_UNSET,
                .tda9887_conf   = TDA9887_PRESENT,
-               .gpiomask = 0xc0c000,
+               .gpiomask       = 0x00008000,
                .inputs = {{
                        .name = name_svideo,
                        .vmux = 8,
@@ -3762,6 +3909,8 @@ struct saa7134_board saa7134_boards[] = {
                },
        },
        [SAA7134_BOARD_BEHOLD_409] = {
+               /*       Beholder Intl. Ltd. 2008      */
+               /*Dmitry Belimov <d.belimov@gmail.com> */
                .name           = "Beholder BeholdTV 409",
                .audio_clock    = 0x00187de7,
                .tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
@@ -3769,6 +3918,7 @@ struct saa7134_board saa7134_boards[] = {
                .tuner_addr     = ADDR_UNSET,
                .radio_addr     = ADDR_UNSET,
                .tda9887_conf   = TDA9887_PRESENT,
+               .gpiomask       = 0x00008000,
                .inputs         = {{
                        .name = name_tv,
                        .vmux = 3,
@@ -3785,6 +3935,8 @@ struct saa7134_board saa7134_boards[] = {
                }},
        },
        [SAA7134_BOARD_BEHOLD_505FM] = {
+               /*       Beholder Intl. Ltd. 2008      */
+               /*Dmitry Belimov <d.belimov@gmail.com> */
                .name           = "Beholder BeholdTV 505 FM/RDS",
                .audio_clock    = 0x00200000,
                .tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
@@ -3792,6 +3944,7 @@ struct saa7134_board saa7134_boards[] = {
                .tuner_addr     = ADDR_UNSET,
                .radio_addr     = ADDR_UNSET,
                .tda9887_conf   = TDA9887_PRESENT,
+               .gpiomask       = 0x00008000,
                .inputs         = {{
                        .name = name_tv,
                        .vmux = 3,
@@ -3816,6 +3969,8 @@ struct saa7134_board saa7134_boards[] = {
                },
        },
        [SAA7134_BOARD_BEHOLD_507_9FM] = {
+               /*       Beholder Intl. Ltd. 2008      */
+               /*Dmitry Belimov <d.belimov@gmail.com> */
                .name           = "Beholder BeholdTV 507 FM/RDS / BeholdTV 509 FM",
                .audio_clock    = 0x00187de7,
                .tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
@@ -3823,6 +3978,7 @@ struct saa7134_board saa7134_boards[] = {
                .tuner_addr     = ADDR_UNSET,
                .radio_addr     = ADDR_UNSET,
                .tda9887_conf   = TDA9887_PRESENT,
+               .gpiomask       = 0x00008000,
                .inputs         = {{
                        .name = name_tv,
                        .vmux = 3,
@@ -3843,6 +3999,8 @@ struct saa7134_board saa7134_boards[] = {
                },
        },
        [SAA7134_BOARD_BEHOLD_COLUMBUS_TVFM] = {
+               /*       Beholder Intl. Ltd. 2008      */
+               /*Dmitry Belimov <d.belimov@gmail.com> */
                .name           = "Beholder BeholdTV Columbus TVFM",
                .audio_clock    = 0x00187de7,
                .tuner_type     = TUNER_ALPS_TSBE5_PAL,
@@ -3850,23 +4008,28 @@ struct saa7134_board saa7134_boards[] = {
                .tuner_addr     = ADDR_UNSET,
                .radio_addr     = ADDR_UNSET,
                .tda9887_conf   = TDA9887_PRESENT,
+               .gpiomask       = 0x000A8004,
                .inputs         = {{
                        .name = name_tv,
                        .vmux = 3,
                        .amux = TV,
                        .tv   = 1,
-               },{
+                       .gpio = 0x000A8004,
+               }, {
                        .name = name_comp1,
                        .vmux = 1,
                        .amux = LINE1,
-               },{
+                       .gpio = 0x000A8000,
+               }, {
                        .name = name_svideo,
                        .vmux = 8,
                        .amux = LINE1,
-               }},
+                       .gpio = 0x000A8000,
+               } },
                .radio = {
                        .name = name_radio,
                        .amux = LINE2,
+                       .gpio = 0x000A8000,
                },
        },
        [SAA7134_BOARD_BEHOLD_607_9FM] = {
@@ -3900,32 +4063,111 @@ struct saa7134_board saa7134_boards[] = {
        [SAA7134_BOARD_BEHOLD_M6] = {
                /* Igor Kuznetsov <igk@igk.ru> */
                /* Andrey Melnikoff <temnota@kmv.ru> */
-               .name           = "Beholder BeholdTV M6 / BeholdTV M6 Extra",
+               /* Beholder Intl. Ltd. Dmitry Belimov <d.belimov@gmail.com> */
+               .name           = "Beholder BeholdTV M6",
                .audio_clock    = 0x00187de7,
                .tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
                .radio_type     = UNSET,
                .tuner_addr     = ADDR_UNSET,
                .radio_addr     = ADDR_UNSET,
                .tda9887_conf   = TDA9887_PRESENT,
-               .inputs         = {{
+               .inputs         = { {
                        .name = name_tv,
                        .vmux = 3,
                        .amux = TV,
                        .tv   = 1,
-               },{
+               }, {
                        .name = name_comp1,
                        .vmux = 1,
                        .amux = LINE1,
-               },{
+               }, {
                        .name = name_svideo,
                        .vmux = 8,
                        .amux = LINE1,
-               }},
+               } },
+               .radio = {
+                       .name = name_radio,
+                       .amux = LINE2,
+               },
+               .mpeg  = SAA7134_MPEG_EMPRESS,
+               .video_out = CCIR656,
+               .vid_port_opts  = (SET_T_CODE_POLARITY_NON_INVERTED |
+                                       SET_CLOCK_NOT_DELAYED |
+                                       SET_CLOCK_INVERTED |
+                                       SET_VSYNC_OFF),
+       },
+       [SAA7134_BOARD_BEHOLD_M63] = {
+               /* Igor Kuznetsov <igk@igk.ru> */
+               /* Andrey Melnikoff <temnota@kmv.ru> */
+               /* Beholder Intl. Ltd. Dmitry Belimov <d.belimov@gmail.com> */
+               .name           = "Beholder BeholdTV M63",
+               .audio_clock    = 0x00187de7,
+               .tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
+               .radio_type     = UNSET,
+               .tuner_addr     = ADDR_UNSET,
+               .radio_addr     = ADDR_UNSET,
+               .tda9887_conf   = TDA9887_PRESENT,
+               .inputs         = { {
+                       .name = name_tv,
+                       .vmux = 3,
+                       .amux = TV,
+                       .tv   = 1,
+               }, {
+                       .name = name_comp1,
+                       .vmux = 1,
+                       .amux = LINE1,
+               }, {
+                       .name = name_svideo,
+                       .vmux = 8,
+                       .amux = LINE1,
+               } },
+               .radio = {
+                       .name = name_radio,
+                       .amux = LINE2,
+               },
+               .mpeg  = SAA7134_MPEG_EMPRESS,
+               .video_out = CCIR656,
+               .vid_port_opts  = (SET_T_CODE_POLARITY_NON_INVERTED |
+                                       SET_CLOCK_NOT_DELAYED |
+                                       SET_CLOCK_INVERTED |
+                                       SET_VSYNC_OFF),
+       },
+       [SAA7134_BOARD_BEHOLD_M6_EXTRA] = {
+               /* Igor Kuznetsov <igk@igk.ru> */
+               /* Andrey Melnikoff <temnota@kmv.ru> */
+               /* Beholder Intl. Ltd. Dmitry Belimov <d.belimov@gmail.com> */
+               .name           = "Beholder BeholdTV M6 Extra",
+               .audio_clock    = 0x00187de7,
+               /* FIXME: Must be PHILIPS_FM1216ME_MK5*/
+               .tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
+               .radio_type     = UNSET,
+               .tuner_addr     = ADDR_UNSET,
+               .radio_addr     = ADDR_UNSET,
+               .tda9887_conf   = TDA9887_PRESENT,
+               .inputs         = { {
+                       .name = name_tv,
+                       .vmux = 3,
+                       .amux = TV,
+                       .tv   = 1,
+               }, {
+                       .name = name_comp1,
+                       .vmux = 1,
+                       .amux = LINE1,
+               }, {
+                       .name = name_svideo,
+                       .vmux = 8,
+                       .amux = LINE1,
+               } },
                .radio = {
                        .name = name_radio,
                        .amux = LINE2,
                },
                .mpeg  = SAA7134_MPEG_EMPRESS,
+               .video_out = CCIR656,
+               .vid_port_opts  = (SET_T_CODE_POLARITY_NON_INVERTED |
+                                       SET_CLOCK_NOT_DELAYED |
+                                       SET_CLOCK_INVERTED |
+                                       SET_VSYNC_OFF),
        },
        [SAA7134_BOARD_TWINHAN_DTV_DVB_3056] = {
                .name           = "Twinhan Hybrid DTV-DVB 3056 PCI",
@@ -4074,11 +4316,7 @@ struct saa7134_board saa7134_boards[] = {
                .radio_type     = UNSET,
                .tuner_addr     = ADDR_UNSET,
                .radio_addr     = ADDR_UNSET,
-                /*
-                   TODO:
                 .mpeg           = SAA7134_MPEG_DVB,
-                */
-
                 .inputs         = {{
                         .name = name_tv,
                         .vmux = 1,
@@ -4087,11 +4325,11 @@ struct saa7134_board saa7134_boards[] = {
                 }, {
                         .name = name_comp1,
                         .vmux = 3,
-                        .amux = LINE2,
+                        .amux = LINE1,
                 }, {
                         .name = name_svideo,
                         .vmux = 8,
-                        .amux = LINE1,
+                        .amux = LINE2,
                 } },
                 .radio = {
                         .name = name_radio,
@@ -4105,6 +4343,7 @@ struct saa7134_board saa7134_boards[] = {
                .radio_type     = UNSET,
                .tuner_addr     = ADDR_UNSET,
                .radio_addr     = ADDR_UNSET,
+               .mpeg           = SAA7134_MPEG_DVB,
                .inputs         = {{
                        .name = name_tv,
                        .vmux = 1,
@@ -4114,10 +4353,14 @@ struct saa7134_board saa7134_boards[] = {
                        .name = name_svideo,
                        .vmux = 8,
                        .amux = LINE1,
+               }, {
+                       .name = name_comp,
+                       .vmux = 0,
+                       .amux = LINE1,
                } },
                .radio = {
                        .name = name_radio,
-                       .amux = LINE1,
+                       .amux = TV,
                },
        },
        [SAA7134_BOARD_AVERMEDIA_M115] = {
@@ -4169,77 +4412,338 @@ struct saa7134_board saa7134_boards[] = {
                        .name = name_radio,
                        .amux = TV,
                }
-       }
-};
-
-const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards);
-
-/* ------------------------------------------------------------------ */
-/* PCI ids + subsystem IDs                                            */
-
-struct pci_device_id saa7134_pci_tbl[] = {
-       {
-               .vendor       = PCI_VENDOR_ID_PHILIPS,
-               .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
-               .subvendor    = PCI_VENDOR_ID_PHILIPS,
-               .subdevice    = 0x2001,
-               .driver_data  = SAA7134_BOARD_PROTEUS_PRO,
-       },{
-               .vendor       = PCI_VENDOR_ID_PHILIPS,
-               .device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
-               .subvendor    = PCI_VENDOR_ID_PHILIPS,
-               .subdevice    = 0x2001,
-               .driver_data  = SAA7134_BOARD_PROTEUS_PRO,
-       },{
-               .vendor       = PCI_VENDOR_ID_PHILIPS,
-               .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
-               .subvendor    = PCI_VENDOR_ID_PHILIPS,
-               .subdevice    = 0x6752,
-               .driver_data  = SAA7134_BOARD_EMPRESS,
-       },{
-               .vendor       = PCI_VENDOR_ID_PHILIPS,
-               .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
-               .subvendor    = 0x1131,
-               .subdevice    = 0x4e85,
-               .driver_data  = SAA7134_BOARD_MONSTERTV,
-       },{
-               .vendor       = PCI_VENDOR_ID_PHILIPS,
-               .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
-               .subvendor    = 0x153b,
-               .subdevice    = 0x1142,
-               .driver_data  = SAA7134_BOARD_CINERGY400,
-       },{
-               .vendor       = PCI_VENDOR_ID_PHILIPS,
-               .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
-               .subvendor    = 0x153b,
-               .subdevice    = 0x1143,
-               .driver_data  = SAA7134_BOARD_CINERGY600,
-       },{
-               .vendor       = PCI_VENDOR_ID_PHILIPS,
-               .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
-               .subvendor    = 0x153b,
-               .subdevice    = 0x1158,
-               .driver_data  = SAA7134_BOARD_CINERGY600_MK3,
-       },{
-               .vendor       = PCI_VENDOR_ID_PHILIPS,
-               .device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
-               .subvendor    = 0x153b,
-               .subdevice    = 0x1162,
-               .driver_data  = SAA7134_BOARD_CINERGY400_CARDBUS,
-       },{
-               .vendor       = PCI_VENDOR_ID_PHILIPS,
-               .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
-               .subvendor    = 0x5169,
-               .subdevice    = 0x0138,
-               .driver_data  = SAA7134_BOARD_FLYVIDEO3000_NTSC,
-       },{
-               .vendor       = PCI_VENDOR_ID_PHILIPS,
-               .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
-               .subvendor    = 0x5168,
-               .subdevice    = 0x0138,
-               .driver_data  = SAA7134_BOARD_FLYVIDEO3000,
-       },{
-               .vendor       = PCI_VENDOR_ID_PHILIPS,
+       },
+       [SAA7134_BOARD_AVERMEDIA_A700_PRO] = {
+               /* Matthias Schwarzott <zzam@gentoo.org> */
+               .name           = "Avermedia DVB-S Pro A700",
+               .audio_clock    = 0x00187de7,
+               .tuner_type     = TUNER_ABSENT,
+               .radio_type     = UNSET,
+               .tuner_addr     = ADDR_UNSET,
+               .radio_addr     = ADDR_UNSET,
+               /* no DVB support for now */
+               /* .mpeg           = SAA7134_MPEG_DVB, */
+               .inputs         = { {
+                       .name = name_comp,
+                       .vmux = 1,
+                       .amux = LINE1,
+               }, {
+                       .name = name_svideo,
+                       .vmux = 6,
+                       .amux = LINE1,
+               } },
+       },
+       [SAA7134_BOARD_AVERMEDIA_A700_HYBRID] = {
+               /* Matthias Schwarzott <zzam@gentoo.org> */
+               .name           = "Avermedia DVB-S Hybrid+FM A700",
+               .audio_clock    = 0x00187de7,
+               .tuner_type     = TUNER_ABSENT, /* TUNER_XC2028 */
+               .radio_type     = UNSET,
+               .tuner_addr     = ADDR_UNSET,
+               .radio_addr     = ADDR_UNSET,
+               /* no DVB support for now */
+               /* .mpeg           = SAA7134_MPEG_DVB, */
+               .inputs         = { {
+                       .name = name_comp,
+                       .vmux = 1,
+                       .amux = LINE1,
+               }, {
+                       .name = name_svideo,
+                       .vmux = 6,
+                       .amux = LINE1,
+               } },
+       },
+       [SAA7134_BOARD_BEHOLD_H6] = {
+               /* Igor Kuznetsov <igk@igk.ru> */
+               .name           = "Beholder BeholdTV H6",
+               .audio_clock    = 0x00187de7,
+               .tuner_type     = TUNER_PHILIPS_FMD1216ME_MK3,
+               .radio_type     = UNSET,
+               .tuner_addr     = ADDR_UNSET,
+               .radio_addr     = ADDR_UNSET,
+               .tda9887_conf   = TDA9887_PRESENT,
+               .mpeg           = SAA7134_MPEG_DVB,
+               .inputs         = {{
+                       .name = name_tv,
+                       .vmux = 3,
+                       .amux = TV,
+                       .tv   = 1,
+               }, {
+                       .name = name_comp1,
+                       .vmux = 1,
+                       .amux = LINE1,
+               }, {
+                       .name = name_svideo,
+                       .vmux = 8,
+                       .amux = LINE1,
+               } },
+               .radio = {
+                       .name = name_radio,
+                       .amux = LINE2,
+               },
+       },
+       [SAA7134_BOARD_ASUSTeK_TIGER_3IN1] = {
+               .name           = "Asus Tiger 3in1",
+               .audio_clock    = 0x00187de7,
+               .tuner_type     = TUNER_PHILIPS_TDA8290,
+               .radio_type     = UNSET,
+               .tuner_addr     = ADDR_UNSET,
+               .radio_addr     = ADDR_UNSET,
+               .tuner_config   = 2,
+               .gpiomask       = 1 << 21,
+               .mpeg           = SAA7134_MPEG_DVB,
+               .inputs         = {{
+                       .name = name_tv,
+                       .vmux = 1,
+                       .amux = TV,
+                       .tv   = 1,
+               }, {
+                       .name = name_comp,
+                       .vmux = 0,
+                       .amux = LINE2,
+               }, {
+                       .name = name_svideo,
+                       .vmux = 8,
+                       .amux = LINE2,
+               } },
+               .radio = {
+                       .name = name_radio,
+                       .amux = TV,
+                       .gpio = 0x0200000,
+               },
+       },
+       [SAA7134_BOARD_REAL_ANGEL_220] = {
+               .name           = "Zogis Real Angel 220",
+               .audio_clock    = 0x00187de7,
+               .tuner_type     = TUNER_TNF_5335MF,
+               .radio_type     = UNSET,
+               .tuner_addr     = ADDR_UNSET,
+               .radio_addr     = ADDR_UNSET,
+               .gpiomask       = 0x801a8087,
+               .inputs = { {
+                       .name   = name_tv,
+                       .vmux   = 3,
+                       .amux   = LINE2,
+                       .tv     = 1,
+                       .gpio   = 0x624000,
+               }, {
+                       .name   = name_comp1,
+                       .vmux   = 1,
+                       .amux   = LINE1,
+                       .gpio   = 0x624000,
+               }, {
+                       .name   = name_svideo,
+                       .vmux   = 1,
+                       .amux   = LINE1,
+                       .gpio   = 0x624000,
+               } },
+               .radio = {
+                       .name   = name_radio,
+                       .amux   = LINE2,
+                       .gpio   = 0x624001,
+               },
+               .mute = {
+                       .name = name_mute,
+                       .amux = TV,
+               },
+       },
+       [SAA7134_BOARD_ADS_INSTANT_HDTV_PCI] = {
+               .name           = "ADS Tech Instant HDTV",
+               .audio_clock    = 0x00187de7,
+               .tuner_type     = TUNER_PHILIPS_TUV1236D,
+               .radio_type     = UNSET,
+               .tuner_addr     = ADDR_UNSET,
+               .radio_addr     = ADDR_UNSET,
+               .tda9887_conf   = TDA9887_PRESENT,
+               .mpeg           = SAA7134_MPEG_DVB,
+               .inputs         = { {
+                       .name = name_tv,
+                       .vmux = 1,
+                       .amux = TV,
+                       .tv   = 1,
+               }, {
+                       .name = name_comp,
+                       .vmux = 4,
+                       .amux = LINE1,
+               }, {
+                       .name = name_svideo,
+                       .vmux = 8,
+                       .amux = LINE1,
+               } },
+       },
+       [SAA7134_BOARD_ASUSTeK_TIGER] = {
+               .name           = "Asus Tiger Rev:1.00",
+               .audio_clock    = 0x00187de7,
+               .tuner_type     = TUNER_PHILIPS_TDA8290,
+               .radio_type     = UNSET,
+               .tuner_addr     = ADDR_UNSET,
+               .radio_addr     = ADDR_UNSET,
+               .tuner_config   = 0,
+               .mpeg           = SAA7134_MPEG_DVB,
+               .gpiomask       = 0x0200000,
+               .inputs = { {
+                       .name   = name_tv,
+                       .vmux   = 1,
+                       .amux   = TV,
+                       .tv     = 1,
+               }, {
+                       .name   = name_comp1,
+                       .vmux   = 3,
+                       .amux   = LINE2,
+               }, {
+                       .name   = name_comp2,
+                       .vmux   = 0,
+                       .amux   = LINE2,
+               }, {
+                       .name   = name_svideo,
+                       .vmux   = 8,
+                       .amux   = LINE2,
+               } },
+               .radio = {
+                       .name   = name_radio,
+                       .amux   = TV,
+                       .gpio   = 0x0200000,
+               },
+       },
+       [SAA7134_BOARD_KWORLD_PLUS_TV_ANALOG] = {
+               .name           = "Kworld Plus TV Analog Lite PCI",
+               .audio_clock    = 0x00187de7,
+               .tuner_type     = TUNER_YMEC_TVF_5533MF,
+               .radio_type     = TUNER_TEA5767,
+               .tuner_addr     = ADDR_UNSET,
+               .radio_addr     = 0x60,
+               .gpiomask       = 0x80000700,
+               .inputs = { {
+                       .name   = name_tv,
+                       .vmux   = 1,
+                       .amux   = LINE2,
+                       .tv     = 1,
+                       .gpio   = 0x100,
+               }, {
+                       .name   = name_comp1,
+                       .vmux   = 3,
+                       .amux   = LINE1,
+                       .gpio   = 0x200,
+               }, {
+                       .name   = name_svideo,
+                       .vmux   = 8,
+                       .amux   = LINE1,
+                       .gpio   = 0x200,
+               } },
+               .radio = {
+                       .name   = name_radio,
+                       .vmux   = 1,
+                       .amux   = LINE1,
+                       .gpio   = 0x100,
+               },
+               .mute = {
+                       .name = name_mute,
+                       .vmux = 8,
+                       .amux = 2,
+               },
+       },
+       [SAA7134_BOARD_AVERMEDIA_GO_007_FM_PLUS] = {
+               .name           = "Avermedia AVerTV GO 007 FM Plus",
+               .audio_clock    = 0x00187de7,
+               .tuner_type     = TUNER_PHILIPS_TDA8290,
+               .radio_type     = UNSET,
+               .tuner_addr     = ADDR_UNSET,
+               .radio_addr     = ADDR_UNSET,
+               .gpiomask       = 0x00300003,
+               /* .gpiomask       = 0x8c240003, */
+               .inputs         = { {
+                       .name = name_tv,
+                       .vmux = 1,
+                       .amux = TV,
+                       .tv   = 1,
+                       .gpio = 0x01,
+               }, {
+                       .name = name_svideo,
+                       .vmux = 6,
+                       .amux = LINE1,
+                       .gpio = 0x02,
+               } },
+               .radio = {
+                       .name = name_radio,
+                       .amux = TV,
+                       .gpio = 0x00300001,
+               },
+               .mute = {
+                       .name = name_mute,
+                       .amux = TV,
+                       .gpio = 0x01,
+               },
+       },
+};
+
+const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards);
+
+/* ------------------------------------------------------------------ */
+/* PCI ids + subsystem IDs                                            */
+
+struct pci_device_id saa7134_pci_tbl[] = {
+       {
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
+               .subvendor    = PCI_VENDOR_ID_PHILIPS,
+               .subdevice    = 0x2001,
+               .driver_data  = SAA7134_BOARD_PROTEUS_PRO,
+       },{
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
+               .subvendor    = PCI_VENDOR_ID_PHILIPS,
+               .subdevice    = 0x2001,
+               .driver_data  = SAA7134_BOARD_PROTEUS_PRO,
+       },{
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
+               .subvendor    = PCI_VENDOR_ID_PHILIPS,
+               .subdevice    = 0x6752,
+               .driver_data  = SAA7134_BOARD_EMPRESS,
+       },{
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
+               .subvendor    = 0x1131,
+               .subdevice    = 0x4e85,
+               .driver_data  = SAA7134_BOARD_MONSTERTV,
+       },{
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
+               .subvendor    = 0x153b,
+               .subdevice    = 0x1142,
+               .driver_data  = SAA7134_BOARD_CINERGY400,
+       },{
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
+               .subvendor    = 0x153b,
+               .subdevice    = 0x1143,
+               .driver_data  = SAA7134_BOARD_CINERGY600,
+       },{
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
+               .subvendor    = 0x153b,
+               .subdevice    = 0x1158,
+               .driver_data  = SAA7134_BOARD_CINERGY600_MK3,
+       },{
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
+               .subvendor    = 0x153b,
+               .subdevice    = 0x1162,
+               .driver_data  = SAA7134_BOARD_CINERGY400_CARDBUS,
+       },{
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
+               .subvendor    = 0x5169,
+               .subdevice    = 0x0138,
+               .driver_data  = SAA7134_BOARD_FLYVIDEO3000_NTSC,
+       },{
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
+               .subvendor    = 0x5168,
+               .subdevice    = 0x0138,
+               .driver_data  = SAA7134_BOARD_FLYVIDEO3000,
+       },{
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
                .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
                .subvendor    = 0x4e42,                         /* "Typhoon PCI Capture TV Card" Art.No. 50673 */
                .subdevice    = 0x0138,
@@ -4300,6 +4804,12 @@ struct pci_device_id saa7134_pci_tbl[] = {
                .driver_data  = SAA7134_BOARD_MD7134,
        },{
                .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
+               .subvendor    = 0x16be, /* CTX946 analog TV, HW mpeg, DVB-T */
+               .subdevice    = 0x5000, /* only analog TV and DVB-T for now */
+               .driver_data  = SAA7134_BOARD_MD7134,
+       }, {
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
                .device       = PCI_DEVICE_ID_PHILIPS_SAA7130,
                .subvendor    = 0x1048,
                .subdevice    = 0x226b,
@@ -4402,6 +4912,18 @@ struct pci_device_id saa7134_pci_tbl[] = {
                .driver_data  = SAA7134_BOARD_MD2819,
        },{
                .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
+               .subvendor    = 0x1461, /* Avermedia Technologies Inc */
+               .subdevice    = 0xa7a1,
+               .driver_data  = SAA7134_BOARD_AVERMEDIA_A700_PRO,
+       }, {
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
+               .subvendor    = 0x1461, /* Avermedia Technologies Inc */
+               .subdevice    = 0xa7a2,
+               .driver_data  = SAA7134_BOARD_AVERMEDIA_A700_HYBRID,
+       }, {
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
                .device       = PCI_DEVICE_ID_PHILIPS_SAA7130,
                .subvendor    = 0x1461, /* Avermedia Technologies Inc */
                .subdevice    = 0x2115,
@@ -4526,6 +5048,12 @@ struct pci_device_id saa7134_pci_tbl[] = {
 
        },{
                .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
+               .subvendor    = 0x1461, /* Avermedia Technologies Inc */
+               .subdevice    = 0xf11d,
+               .driver_data  = SAA7134_BOARD_AVERMEDIA_M135A,
+       }, {
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
                .device       = PCI_DEVICE_ID_PHILIPS_SAA7130,
                .subvendor    = PCI_VENDOR_ID_PHILIPS,
                .subdevice    = 0x2004,
@@ -4906,6 +5434,12 @@ struct pci_device_id saa7134_pci_tbl[] = {
                .driver_data  = SAA7134_BOARD_ENCORE_ENLTV_FM,
        },{
                .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7130,
+               .subvendor    = 0x1a7f,
+               .subdevice    = 0x2008,
+               .driver_data  = SAA7134_BOARD_ENCORE_ENLTV_FM53,
+       }, {
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
                .device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
                .subvendor    = 0x153b,
                .subdevice    = 0x1175,
@@ -4932,8 +5466,8 @@ struct pci_device_id saa7134_pci_tbl[] = {
                .vendor       = PCI_VENDOR_ID_PHILIPS,
                .device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
                .subvendor    = 0x1043,
-               .subdevice    = 0x4857,
-               .driver_data  = SAA7134_BOARD_ASUSTeK_P7131_DUAL,
+               .subdevice    = 0x4857,         /* REV:1.00 */
+               .driver_data  = SAA7134_BOARD_ASUSTeK_TIGER,
        },{
                .vendor       = PCI_VENDOR_ID_PHILIPS,
                .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
@@ -5107,7 +5641,13 @@ struct pci_device_id saa7134_pci_tbl[] = {
                .device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
                .subvendor    = 0x5ace,
                .subdevice    = 0x6193,
-               .driver_data  = SAA7134_BOARD_BEHOLD_M6,
+               .driver_data  = SAA7134_BOARD_BEHOLD_M6_EXTRA,
+       }, {
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
+               .subvendor    = 0x5ace,
+               .subdevice    = 0x6191,
+               .driver_data  = SAA7134_BOARD_BEHOLD_M63,
        },{
                .vendor       = PCI_VENDOR_ID_PHILIPS,
                .device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
@@ -5157,6 +5697,49 @@ struct pci_device_id saa7134_pci_tbl[] = {
                .subdevice    = 0xc900,
                .driver_data  = SAA7134_BOARD_VIDEOMATE_T750,
        }, {
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7133, /* SAA7135HL */
+               .subvendor    = 0x1421,
+               .subdevice    = 0x0380,
+               .driver_data  = SAA7134_BOARD_ADS_INSTANT_HDTV_PCI,
+       }, {
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
+               .subvendor    = 0x5169,
+               .subdevice    = 0x1502,
+               .driver_data  = SAA7134_BOARD_FLYTVPLATINUM_MINI,
+       }, {
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
+               .subvendor    = 0x5ace,
+               .subdevice    = 0x6290,
+               .driver_data  = SAA7134_BOARD_BEHOLD_H6,
+       }, {
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
+               .subvendor    = 0x1461, /* Avermedia Technologies Inc */
+               .subdevice    = 0xf636,
+               .driver_data  = SAA7134_BOARD_AVERMEDIA_M103,
+       }, {
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
+               .subvendor    = 0x1043,
+               .subdevice    = 0x4878, /* REV:1.02G */
+               .driver_data  = SAA7134_BOARD_ASUSTeK_TIGER_3IN1,
+       }, {
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
+               .subvendor    = 0x17de,
+               .subdevice    = 0x7128,
+               .driver_data  = SAA7134_BOARD_KWORLD_PLUS_TV_ANALOG,
+       }, {
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
+               .subvendor    = 0x1461, /* Avermedia Technologies Inc */
+               .subdevice    = 0xf31d,
+               .driver_data  = SAA7134_BOARD_AVERMEDIA_GO_007_FM_PLUS,
+
+       }, {
                /* --- boards without eeprom + subsystem ID --- */
                .vendor       = PCI_VENDOR_ID_PHILIPS,
                .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
@@ -5217,15 +5800,22 @@ static int saa7134_xc2028_callback(struct saa7134_dev *dev,
 {
        switch (command) {
        case XC2028_TUNER_RESET:
-               saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0x06e20000, 0x06e20000);
-               saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x06a20000, 0x06a20000);
-               saa_andorl(SAA7133_ANALOG_IO_SELECT >> 2, 0x02, 0x02);
-               saa_andorl(SAA7134_ANALOG_IN_CTRL1 >> 2, 0x81, 0x81);
-               saa_andorl(SAA7134_AUDIO_CLOCK0 >> 2, 0x03187de7, 0x03187de7);
-               saa_andorl(SAA7134_AUDIO_PLL_CTRL >> 2, 0x03, 0x03);
-               saa_andorl(SAA7134_AUDIO_CLOCKS_PER_FIELD0 >> 2,
-                          0x0001e000, 0x0001e000);
-               return 0;
+               saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x00008000, 0x00000000);
+               saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x00008000, 0x00008000);
+               switch (dev->board) {
+               case SAA7134_BOARD_AVERMEDIA_CARDBUS_506:
+               case SAA7134_BOARD_AVERMEDIA_M103:
+                       saa7134_set_gpio(dev, 23, 0);
+                       msleep(10);
+                       saa7134_set_gpio(dev, 23, 1);
+               break;
+               case SAA7134_BOARD_AVERMEDIA_A16D:
+                       saa7134_set_gpio(dev, 21, 0);
+                       msleep(10);
+                       saa7134_set_gpio(dev, 21, 1);
+               break;
+               }
+       return 0;
        }
        return -EINVAL;
 }
@@ -5258,16 +5848,19 @@ static int saa7134_tda8290_callback(struct saa7134_dev *dev,
        return 0;
 }
 
-int saa7134_tuner_callback(void *priv, int command, int arg)
+int saa7134_tuner_callback(void *priv, int component, int command, int arg)
 {
-       struct i2c_algo_bit_data *i2c_algo = priv;
-       struct saa7134_dev *dev = i2c_algo->data;
-
-       switch (dev->tuner_type) {
-       case TUNER_PHILIPS_TDA8290:
-               return saa7134_tda8290_callback(dev, command, arg);
-       case TUNER_XC2028:
-               return saa7134_xc2028_callback(dev, command, arg);
+       struct saa7134_dev *dev = priv;
+       if (dev != NULL) {
+               switch (dev->tuner_type) {
+               case TUNER_PHILIPS_TDA8290:
+                       return saa7134_tda8290_callback(dev, command, arg);
+               case TUNER_XC2028:
+                       return saa7134_xc2028_callback(dev, command, arg);
+               }
+       } else {
+               printk(KERN_ERR "saa7134: Error - device struct undefined.\n");
+               return -EINVAL;
        }
        return -EINVAL;
 }
@@ -5335,6 +5928,7 @@ int saa7134_board_init1(struct saa7134_dev *dev)
        case SAA7134_BOARD_AVERMEDIA_STUDIO_507:
        case SAA7134_BOARD_AVERMEDIA_GO_007_FM:
        case SAA7134_BOARD_AVERMEDIA_777:
+       case SAA7134_BOARD_AVERMEDIA_M135A:
 /*      case SAA7134_BOARD_SABRENT_SBTTVFM:  */ /* not finished yet */
        case SAA7134_BOARD_VIDEOMATE_TV_PVR:
        case SAA7134_BOARD_VIDEOMATE_GOLD_PLUS:
@@ -5353,11 +5947,13 @@ int saa7134_board_init1(struct saa7134_dev *dev)
        case SAA7134_BOARD_FLYDVBT_LR301:
        case SAA7134_BOARD_ASUSTeK_P7131_DUAL:
        case SAA7134_BOARD_ASUSTeK_P7131_HYBRID_LNA:
+       case SAA7134_BOARD_ASUSTeK_P7131_ANALOG:
        case SAA7134_BOARD_FLYDVBTDUO:
        case SAA7134_BOARD_PROTEUS_2309:
        case SAA7134_BOARD_AVERMEDIA_A16AR:
        case SAA7134_BOARD_ENCORE_ENLTV:
        case SAA7134_BOARD_ENCORE_ENLTV_FM:
+       case SAA7134_BOARD_ENCORE_ENLTV_FM53:
        case SAA7134_BOARD_10MOONSTVMASTER3:
        case SAA7134_BOARD_BEHOLD_401:
        case SAA7134_BOARD_BEHOLD_403:
@@ -5370,6 +5966,9 @@ int saa7134_board_init1(struct saa7134_dev *dev)
        case SAA7134_BOARD_BEHOLD_505FM:
        case SAA7134_BOARD_BEHOLD_507_9FM:
        case SAA7134_BOARD_GENIUS_TVGO_A11MCE:
+       case SAA7134_BOARD_REAL_ANGEL_220:
+       case SAA7134_BOARD_KWORLD_PLUS_TV_ANALOG:
+       case SAA7134_BOARD_AVERMEDIA_GO_007_FM_PLUS:
                dev->has_remote = SAA7134_REMOTE_GPIO;
                break;
        case SAA7134_BOARD_FLYDVBS_LR300:
@@ -5409,13 +6008,45 @@ int saa7134_board_init1(struct saa7134_dev *dev)
                saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x08000000, 0x00000000);
                break;
        case SAA7134_BOARD_AVERMEDIA_CARDBUS:
-       case SAA7134_BOARD_AVERMEDIA_CARDBUS_506:
        case SAA7134_BOARD_AVERMEDIA_M115:
-       case SAA7134_BOARD_BEHOLD_COLUMBUS_TVFM:
+               /* power-down tuner chip */
+               saa_andorl(SAA7134_GPIO_GPMODE0 >> 2,   0xffffffff, 0);
+               saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0xffffffff, 0);
+               msleep(10);
                /* power-up tuner chip */
                saa_andorl(SAA7134_GPIO_GPMODE0 >> 2,   0xffffffff, 0xffffffff);
                saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0xffffffff, 0xffffffff);
+               msleep(10);
+               break;
+       case SAA7134_BOARD_AVERMEDIA_CARDBUS_506:
+               saa7134_set_gpio(dev, 23, 0);
+               msleep(10);
+               saa7134_set_gpio(dev, 23, 1);
+               dev->has_remote = SAA7134_REMOTE_I2C;
+               break;
+       case SAA7134_BOARD_AVERMEDIA_M103:
+               saa7134_set_gpio(dev, 23, 0);
+               msleep(10);
+               saa7134_set_gpio(dev, 23, 1);
+               break;
+       case SAA7134_BOARD_AVERMEDIA_A16D:
+               saa7134_set_gpio(dev, 21, 0);
+               msleep(10);
+               saa7134_set_gpio(dev, 21, 1);
                msleep(1);
+               dev->has_remote = SAA7134_REMOTE_GPIO;
+               break;
+       case SAA7134_BOARD_BEHOLD_COLUMBUS_TVFM:
+               /* power-down tuner chip */
+               saa_andorl(SAA7134_GPIO_GPMODE0 >> 2,   0x000A8004, 0x000A8004);
+               saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x000A8004, 0);
+               msleep(10);
+               /* power-up tuner chip */
+               saa_andorl(SAA7134_GPIO_GPMODE0 >> 2,   0x000A8004, 0x000A8004);
+               saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x000A8004, 0x000A8004);
+               msleep(10);
+               /* remote via GPIO */
+               dev->has_remote = SAA7134_REMOTE_GPIO;
                break;
        case SAA7134_BOARD_RTD_VFG7350:
 
@@ -5432,13 +6063,16 @@ int saa7134_board_init1(struct saa7134_dev *dev)
        case SAA7134_BOARD_PINNACLE_PCTV_110i:
        case SAA7134_BOARD_PINNACLE_PCTV_310i:
        case SAA7134_BOARD_UPMOST_PURPLE_TV:
+       case SAA7134_BOARD_MSI_TVATANYWHERE_PLUS:
        case SAA7134_BOARD_HAUPPAUGE_HVR1110:
        case SAA7134_BOARD_BEHOLD_607_9FM:
        case SAA7134_BOARD_BEHOLD_M6:
+       case SAA7134_BOARD_BEHOLD_M63:
+       case SAA7134_BOARD_BEHOLD_M6_EXTRA:
+       case SAA7134_BOARD_BEHOLD_H6:
                dev->has_remote = SAA7134_REMOTE_I2C;
                break;
        case SAA7134_BOARD_AVERMEDIA_A169_B:
-       case SAA7134_BOARD_MD7134_BRIDGE_2:
                printk("%s: %s: dual saa713x broadcast decoders\n"
                       "%s: Sorry, none of the inputs to this chip are supported yet.\n"
                       "%s: Dual decoder functionality is disabled for now, use the other chip.\n",
@@ -5450,24 +6084,110 @@ int saa7134_board_init1(struct saa7134_dev *dev)
                saa_andorl(SAA7134_GPIO_GPMODE0 >> 2,   0x8c040007, 0x8c040007);
                saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x0c0007cd, 0x0c0007cd);
                break;
+       case SAA7134_BOARD_AVERMEDIA_A700_PRO:
+       case SAA7134_BOARD_AVERMEDIA_A700_HYBRID:
+               /* write windows gpio values */
+               saa_andorl(SAA7134_GPIO_GPMODE0 >> 2,   0x80040100, 0x80040100);
+               saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x80040100, 0x00040100);
+               printk("%s: %s: hybrid analog/dvb card\n"
+                      "%s: Sorry, only analog s-video and composite input "
+                      "are supported for now.\n",
+                       dev->name, card(dev).name, dev->name);
+               break;
        }
        return 0;
 }
 
+static void saa7134_tuner_setup(struct saa7134_dev *dev)
+{
+       struct tuner_setup tun_setup;
+       unsigned int mode_mask = T_RADIO     |
+                                T_ANALOG_TV |
+                                T_DIGITAL_TV;
+
+       memset(&tun_setup, 0, sizeof(tun_setup));
+       tun_setup.tuner_callback = saa7134_tuner_callback;
+
+       if (saa7134_boards[dev->board].radio_type != UNSET) {
+               tun_setup.type = saa7134_boards[dev->board].radio_type;
+               tun_setup.addr = saa7134_boards[dev->board].radio_addr;
+
+               tun_setup.mode_mask = T_RADIO;
+
+               saa_call_all(dev, tuner, s_type_addr, &tun_setup);
+               mode_mask &= ~T_RADIO;
+       }
+
+       if ((dev->tuner_type != TUNER_ABSENT) && (dev->tuner_type != UNSET)) {
+               tun_setup.type = dev->tuner_type;
+               tun_setup.addr = dev->tuner_addr;
+               tun_setup.config = saa7134_boards[dev->board].tuner_config;
+               tun_setup.tuner_callback = saa7134_tuner_callback;
+
+               tun_setup.mode_mask = mode_mask;
+
+               saa_call_all(dev, tuner, s_type_addr, &tun_setup);
+       }
+
+       if (dev->tda9887_conf) {
+               struct v4l2_priv_tun_config tda9887_cfg;
+
+               tda9887_cfg.tuner = TUNER_TDA9887;
+               tda9887_cfg.priv = &dev->tda9887_conf;
+
+               saa_call_all(dev, tuner, s_config, &tda9887_cfg);
+       }
+
+       if (dev->tuner_type == TUNER_XC2028) {
+               struct v4l2_priv_tun_config  xc2028_cfg;
+               struct xc2028_ctrl           ctl;
+
+               memset(&xc2028_cfg, 0, sizeof(xc2028_cfg));
+               memset(&ctl, 0, sizeof(ctl));
+
+               ctl.fname   = XC2028_DEFAULT_FIRMWARE;
+               ctl.max_len = 64;
+
+               switch (dev->board) {
+               case SAA7134_BOARD_AVERMEDIA_A16D:
+               case SAA7134_BOARD_AVERMEDIA_CARDBUS_506:
+               case SAA7134_BOARD_AVERMEDIA_M103:
+                       ctl.demod = XC3028_FE_ZARLINK456;
+                       break;
+               default:
+                       ctl.demod = XC3028_FE_OREN538;
+                       ctl.mts = 1;
+               }
+
+               xc2028_cfg.tuner = TUNER_XC2028;
+               xc2028_cfg.priv  = &ctl;
+
+               saa_call_all(dev, tuner, s_config, &xc2028_cfg);
+       }
+}
+
 /* stuff which needs working i2c */
 int saa7134_board_init2(struct saa7134_dev *dev)
 {
        unsigned char buf;
        int board;
-       struct tuner_setup tun_setup;
-       tun_setup.config = 0;
-       tun_setup.tuner_callback = saa7134_tuner_callback;
 
+       /* Put here the code that enables the chips that are needed
+          for analog mode and doesn't depend on the tuner attachment.
+          It is also a good idea to get tuner type from eeprom, etc before
+          initializing tuner, since we can avoid loading tuner driver
+          on devices that has TUNER_ABSENT
+        */
        switch (dev->board) {
        case SAA7134_BOARD_BMK_MPEX_NOTUNER:
        case SAA7134_BOARD_BMK_MPEX_TUNER:
+               /* Checks if the device has a tuner at 0x60 addr
+                  If the device doesn't have a tuner, TUNER_ABSENT
+                  will be used at tuner_type, avoiding loading tuner
+                  without needing it
+                */
                dev->i2c_client.addr = 0x60;
-               board = (i2c_master_recv(&dev->i2c_client,&buf,0) < 0)
+               board = (i2c_master_recv(&dev->i2c_client, &buf, 0) < 0)
                        ? SAA7134_BOARD_BMK_MPEX_NOTUNER
                        : SAA7134_BOARD_BMK_MPEX_TUNER;
                if (board == dev->board)
@@ -5477,29 +6197,21 @@ int saa7134_board_init2(struct saa7134_dev *dev)
                saa7134_boards[dev->board].name);
                dev->tuner_type = saa7134_boards[dev->board].tuner_type;
 
-               if (TUNER_ABSENT != dev->tuner_type) {
-                       tun_setup.mode_mask = T_RADIO     |
-                                             T_ANALOG_TV |
-                                             T_DIGITAL_TV;
-                       tun_setup.type = dev->tuner_type;
-                       tun_setup.addr = ADDR_UNSET;
-                       tun_setup.tuner_callback = saa7134_tuner_callback;
-
-                       saa7134_i2c_call_clients(dev,
-                                                TUNER_SET_TYPE_ADDR,
-                                                &tun_setup);
-               }
                break;
        case SAA7134_BOARD_MD7134:
-               {
+       {
                u8 subaddr;
                u8 data[3];
                int ret, tuner_t;
-
                struct i2c_msg msg[] = {{.addr=0x50, .flags=0, .buf=&subaddr, .len = 1},
                                        {.addr=0x50, .flags=I2C_M_RD, .buf=data, .len = 3}};
+
                subaddr= 0x14;
                tuner_t = 0;
+
+               /* Retrieve device data from eeprom, checking for the
+                  proper tuner_type.
+                */
                ret = i2c_transfer(&dev->i2c_adap, msg, 2);
                if (ret != 2) {
                        printk(KERN_ERR "EEPROM read failure\n");
@@ -5544,30 +6256,8 @@ int saa7134_board_init2(struct saa7134_dev *dev)
                }
 
                printk(KERN_INFO "%s Tuner type is %d\n", dev->name, dev->tuner_type);
-               if (dev->tuner_type == TUNER_PHILIPS_FMD1216ME_MK3) {
-                       struct v4l2_priv_tun_config tda9887_cfg;
-
-                       tda9887_cfg.tuner = TUNER_TDA9887;
-                       tda9887_cfg.priv  = &dev->tda9887_conf;
-
-                       dev->tda9887_conf = TDA9887_PRESENT      |
-                                           TDA9887_PORT1_ACTIVE |
-                                           TDA9887_PORT2_ACTIVE;
-
-                       saa7134_i2c_call_clients(dev, TUNER_SET_CONFIG,
-                                                &tda9887_cfg);
-               }
-
-               tun_setup.mode_mask = T_RADIO     |
-                                     T_ANALOG_TV |
-                                     T_DIGITAL_TV;
-               tun_setup.type = dev->tuner_type;
-               tun_setup.addr = ADDR_UNSET;
-
-               saa7134_i2c_call_clients(dev,
-                                        TUNER_SET_TYPE_ADDR, &tun_setup);
-               }
                break;
+       }
        case SAA7134_BOARD_PHILIPS_EUROPA:
                if (dev->autodetected && (dev->eedata[0x41] == 0x1c)) {
                        /* Reconfigure board as Snake reference design */
@@ -5577,103 +6267,105 @@ int saa7134_board_init2(struct saa7134_dev *dev)
                                dev->name, saa7134_boards[dev->board].name);
                        break;
                }
+               /* break intentionally omitted */
        case SAA7134_BOARD_VIDEOMATE_DVBT_300:
        case SAA7134_BOARD_ASUS_EUROPA2_HYBRID:
-               /* The Philips EUROPA based hybrid boards have the tuner connected through
-                * the channel decoder. We have to make it transparent to find it
+       {
+
+               /* The Philips EUROPA based hybrid boards have the tuner
+                  connected through the channel decoder. We have to make it
+                  transparent to find it
                 */
-               {
                u8 data[] = { 0x07, 0x02};
                struct i2c_msg msg = {.addr=0x08, .flags=0, .buf=data, .len = sizeof(data)};
                i2c_transfer(&dev->i2c_adap, &msg, 1);
 
-               tun_setup.mode_mask = T_ANALOG_TV | T_DIGITAL_TV;
-               tun_setup.type = dev->tuner_type;
-               tun_setup.addr = dev->tuner_addr;
-
-               saa7134_i2c_call_clients (dev, TUNER_SET_TYPE_ADDR,&tun_setup);
-               }
                break;
+       }
        case SAA7134_BOARD_PHILIPS_TIGER:
        case SAA7134_BOARD_PHILIPS_TIGER_S:
-               {
+       {
                u8 data[] = { 0x3c, 0x33, 0x60};
                struct i2c_msg msg = {.addr=0x08, .flags=0, .buf=data, .len = sizeof(data)};
-               if(dev->autodetected && (dev->eedata[0x49] == 0x50)) {
+               if (dev->autodetected && (dev->eedata[0x49] == 0x50)) {
                        dev->board = SAA7134_BOARD_PHILIPS_TIGER_S;
                        printk(KERN_INFO "%s: Reconfigured board as %s\n",
                                dev->name, saa7134_boards[dev->board].name);
                }
-               if(dev->board == SAA7134_BOARD_PHILIPS_TIGER_S) {
-                       tun_setup.mode_mask = T_ANALOG_TV | T_DIGITAL_TV;
-                       tun_setup.type = TUNER_PHILIPS_TDA8290;
-                       tun_setup.addr = 0x4b;
-                       tun_setup.config = 2;
+               if (dev->board == SAA7134_BOARD_PHILIPS_TIGER_S) {
+                       dev->tuner_type = TUNER_PHILIPS_TDA8290;
 
-                       saa7134_i2c_call_clients (dev, TUNER_SET_TYPE_ADDR,&tun_setup);
                        data[2] = 0x68;
+                       i2c_transfer(&dev->i2c_adap, &msg, 1);
+                       break;
                }
                i2c_transfer(&dev->i2c_adap, &msg, 1);
-               }
                break;
+       }
+       case SAA7134_BOARD_ASUSTeK_TVFM7135:
+       /* The card below is detected as card=53, but is different */
+              if (dev->autodetected && (dev->eedata[0x27] == 0x03)) {
+                      dev->board = SAA7134_BOARD_ASUSTeK_P7131_ANALOG;
+                      printk(KERN_INFO "%s: P7131 analog only, using "
+                                                      "entry of %s\n",
+                      dev->name, saa7134_boards[dev->board].name);
+              }
+              break;
        case SAA7134_BOARD_HAUPPAUGE_HVR1110:
                hauppauge_eeprom(dev, dev->eedata+0x80);
                /* break intentionally omitted */
        case SAA7134_BOARD_PINNACLE_PCTV_310i:
        case SAA7134_BOARD_KWORLD_DVBT_210:
        case SAA7134_BOARD_TEVION_DVBT_220RF:
+       case SAA7134_BOARD_ASUSTeK_TIGER:
        case SAA7134_BOARD_ASUSTeK_P7131_DUAL:
        case SAA7134_BOARD_ASUSTeK_P7131_HYBRID_LNA:
        case SAA7134_BOARD_MEDION_MD8800_QUADRO:
        case SAA7134_BOARD_AVERMEDIA_SUPER_007:
        case SAA7134_BOARD_TWINHAN_DTV_DVB_3056:
        case SAA7134_BOARD_CREATIX_CTX953:
+       {
                /* this is a hybrid board, initialize to analog mode
                 * and configure firmware eeprom address
                 */
-               {
                u8 data[] = { 0x3c, 0x33, 0x60};
                struct i2c_msg msg = {.addr=0x08, .flags=0, .buf=data, .len = sizeof(data)};
                i2c_transfer(&dev->i2c_adap, &msg, 1);
-               }
                break;
+       }
+       case SAA7134_BOARD_ASUSTeK_TIGER_3IN1:
+       {
+               u8 data[] = { 0x3c, 0x33, 0x60};
+               struct i2c_msg msg = {.addr = 0x0b, .flags = 0, .buf = data,
+                                                       .len = sizeof(data)};
+               i2c_transfer(&dev->i2c_adap, &msg, 1);
+               break;
+       }
        case SAA7134_BOARD_FLYDVB_TRIO:
-               {
+       {
                u8 data[] = { 0x3c, 0x33, 0x62};
                struct i2c_msg msg = {.addr=0x09, .flags=0, .buf=data, .len = sizeof(data)};
                i2c_transfer(&dev->i2c_adap, &msg, 1);
-               }
                break;
+       }
        case SAA7134_BOARD_ADS_DUO_CARDBUS_PTV331:
        case SAA7134_BOARD_FLYDVBT_HYBRID_CARDBUS:
+       {
                /* initialize analog mode  */
-               {
                u8 data[] = { 0x3c, 0x33, 0x6a};
                struct i2c_msg msg = {.addr=0x08, .flags=0, .buf=data, .len = sizeof(data)};
                i2c_transfer(&dev->i2c_adap, &msg, 1);
-               }
                break;
+       }
        case SAA7134_BOARD_CINERGY_HT_PCMCIA:
        case SAA7134_BOARD_CINERGY_HT_PCI:
+       {
                /* initialize analog mode */
-               {
                u8 data[] = { 0x3c, 0x33, 0x68};
                struct i2c_msg msg = {.addr=0x08, .flags=0, .buf=data, .len = sizeof(data)};
                i2c_transfer(&dev->i2c_adap, &msg, 1);
-               }
-               break;
-       case SAA7134_BOARD_KWORLD_ATSC110:
-               {
-                       /* enable tuner */
-                       int i;
-                       static const u8 buffer [] = { 0x10,0x12,0x13,0x04,0x16,0x00,0x14,0x04,0x017,0x00 };
-                       dev->i2c_client.addr = 0x0a;
-                       for (i = 0; i < 5; i++)
-                               if (2 != i2c_master_send(&dev->i2c_client,&buffer[i*2],2))
-                                       printk(KERN_WARNING "%s: Unable to enable tuner(%i).\n",
-                                              dev->name, i);
-               }
                break;
+       }
        case SAA7134_BOARD_VIDEOMATE_DVBT_200:
        case SAA7134_BOARD_VIDEOMATE_DVBT_200A:
                /* The T200 and the T200A share the same pci id.  Consequently,
@@ -5682,9 +6374,9 @@ int saa7134_board_init2(struct saa7134_dev *dev)
 
                /* Don't do this if the board was specifically selected with an
                 * insmod option or if we have the default configuration T200*/
-               if(!dev->autodetected || (dev->eedata[0x41] == 0xd0))
+               if (!dev->autodetected || (dev->eedata[0x41] == 0xd0))
                        break;
-               if(dev->eedata[0x41] == 0x02) {
+               if (dev->eedata[0x41] == 0x02) {
                        /* Reconfigure board  as T200A */
                        dev->board = SAA7134_BOARD_VIDEOMATE_DVBT_200A;
                        dev->tuner_type   = saa7134_boards[dev->board].tuner_type;
@@ -5697,27 +6389,73 @@ int saa7134_board_init2(struct saa7134_dev *dev)
                        break;
                }
                break;
+       case SAA7134_BOARD_ADS_INSTANT_HDTV_PCI:
+       case SAA7134_BOARD_KWORLD_ATSC110:
+       {
+               struct i2c_msg msg = { .addr = 0x0a, .flags = 0 };
+               int i;
+               static u8 buffer[][2] = {
+                       { 0x10, 0x12 },
+                       { 0x13, 0x04 },
+                       { 0x16, 0x00 },
+                       { 0x14, 0x04 },
+                       { 0x17, 0x00 },
+               };
+
+               for (i = 0; i < ARRAY_SIZE(buffer); i++) {
+                       msg.buf = &buffer[i][0];
+                       msg.len = ARRAY_SIZE(buffer[0]);
+                       if (i2c_transfer(&dev->i2c_adap, &msg, 1) != 1)
+                               printk(KERN_WARNING
+                                      "%s: Unable to enable tuner(%i).\n",
+                                      dev->name, i);
+               }
+               break;
        }
+       } /* switch() */
 
-       if (dev->tuner_type == TUNER_XC2028) {
-               struct v4l2_priv_tun_config  xc2028_cfg;
-               struct xc2028_ctrl           ctl;
+       /* initialize tuner */
+       if (TUNER_ABSENT != dev->tuner_type) {
+               int has_demod = (dev->tda9887_conf & TDA9887_PRESENT);
 
-               memset(&xc2028_cfg, 0, sizeof(ctl));
-               memset(&ctl, 0, sizeof(ctl));
+               /* Note: radio tuner address is always filled in,
+                  so we do not need to probe for a radio tuner device. */
+               if (dev->radio_type != UNSET)
+                       v4l2_i2c_new_subdev(&dev->i2c_adap,
+                               "tuner", "tuner", dev->radio_addr);
+               if (has_demod)
+                       v4l2_i2c_new_probed_subdev(&dev->i2c_adap, "tuner",
+                               "tuner", v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
+               if (dev->tuner_addr == ADDR_UNSET) {
+                       enum v4l2_i2c_tuner_type type =
+                               has_demod ? ADDRS_TV_WITH_DEMOD : ADDRS_TV;
 
-               ctl.fname   = XC2028_DEFAULT_FIRMWARE;
-               ctl.max_len = 64;
+                       v4l2_i2c_new_probed_subdev(&dev->i2c_adap, "tuner",
+                               "tuner", v4l2_i2c_tuner_addrs(type));
+               } else {
+                       v4l2_i2c_new_subdev(&dev->i2c_adap,
+                               "tuner", "tuner", dev->tuner_addr);
+               }
+       }
 
-               /* FIXME: This should be device-dependent */
-               ctl.demod = XC3028_FE_OREN538;
-               ctl.mts = 1;
+       saa7134_tuner_setup(dev);
 
-               xc2028_cfg.tuner = TUNER_XC2028;
-               xc2028_cfg.priv  = &ctl;
+       switch (dev->board) {
+       case SAA7134_BOARD_BEHOLD_COLUMBUS_TVFM:
+       {
+               struct v4l2_priv_tun_config tea5767_cfg;
+               struct tea5767_ctrl ctl;
 
-               saa7134_i2c_call_clients(dev, TUNER_SET_CONFIG, &xc2028_cfg);
+               dev->i2c_client.addr = 0xC0;
+               /* set TEA5767(analog FM) defines */
+               memset(&ctl, 0, sizeof(ctl));
+               ctl.xtal_freq = TEA5767_HIGH_LO_13MHz;
+               tea5767_cfg.tuner = TUNER_TEA5767;
+               tea5767_cfg.priv  = &ctl;
+               saa_call_all(dev, tuner, s_config, &tea5767_cfg);
+               break;
        }
+       } /* switch() */
 
        return 0;
 }