V4L/DVB (10823): saa7134: add DVB support for Avermedia A700 cards
authorMatthias Schwarzott <zzam@gentoo.org>
Tue, 24 Feb 2009 15:35:16 +0000 (12:35 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 30 Mar 2009 15:43:06 +0000 (12:43 -0300)
Add DVB support for Avermedia DVB-S Pro and
Avermedia DVB-S Hybrid+FM card both labled A700.

They use zl10313 demod (driver mt312) and zl10036 tuner.

[mchehab@redhat.com: change __FUNCTION__ into __func__]
Signed-off-by: Matthias Schwarzott <zzam@gentoo.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/saa7134/Kconfig
drivers/media/video/saa7134/saa7134-cards.c
drivers/media/video/saa7134/saa7134-dvb.c

index fc2164e28e76d11bbcb12fa60de4cb69d8acb7f3..a3470ebad50a0281cb0afc614d23f9d737c3c3a2 100644 (file)
@@ -37,6 +37,8 @@ config VIDEO_SAA7134_DVB
        select DVB_ISL6421 if !DVB_FE_CUSTOMISE
        select MEDIA_TUNER_TDA827X if !MEDIA_TUNER_CUSTOMIZE
        select MEDIA_TUNER_SIMPLE if !MEDIA_TUNER_CUSTOMIZE
+       select DVB_ZL10036 if !DVB_FE_CUSTOMISE
+       select DVB_MT312 if !DVB_FE_CUSTOMISE
        ---help---
          This adds support for DVB cards based on the
          Philips saa7134 chip.
index 67c223cc867f372579890b208e5dd0cc90f5edf8..9f69c7c85814a5663410beefe7f27f31a4bcb0a3 100644 (file)
@@ -4421,8 +4421,7 @@ struct saa7134_board saa7134_boards[] = {
                .radio_type     = UNSET,
                .tuner_addr     = ADDR_UNSET,
                .radio_addr     = ADDR_UNSET,
-               /* no DVB support for now */
-               /* .mpeg           = SAA7134_MPEG_DVB, */
+               .mpeg           = SAA7134_MPEG_DVB,
                .inputs         = { {
                        .name = name_comp,
                        .vmux = 1,
@@ -4441,8 +4440,7 @@ struct saa7134_board saa7134_boards[] = {
                .radio_type     = UNSET,
                .tuner_addr     = ADDR_UNSET,
                .radio_addr     = ADDR_UNSET,
-               /* no DVB support for now */
-               /* .mpeg           = SAA7134_MPEG_DVB, */
+               .mpeg           = SAA7134_MPEG_DVB,
                .inputs         = { {
                        .name = name_comp,
                        .vmux = 1,
@@ -6084,15 +6082,15 @@ 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 "
+                      "%s: Sorry, of the analog inputs, only analog s-video and composite "
                       "are supported for now.\n",
                        dev->name, card(dev).name, dev->name);
+       case SAA7134_BOARD_AVERMEDIA_A700_PRO:
+               /* write windows gpio values */
+               saa_andorl(SAA7134_GPIO_GPMODE0 >> 2,   0x80040100, 0x80040100);
+               saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x80040100, 0x00040100);
                break;
        }
        return 0;
index af9a22d1b94d6691e235c6799d0022e92f95c176..80ad96ad8939ec4a492bdaf30954d125d8fb97e3 100644 (file)
@@ -51,6 +51,9 @@
 
 #include "zl10353.h"
 
+#include "zl10036.h"
+#include "mt312.h"
+
 MODULE_AUTHOR("Gerd Knorr <kraxel@bytesex.org> [SuSE Labs]");
 MODULE_LICENSE("GPL");
 
@@ -950,6 +953,17 @@ static struct nxt200x_config kworldatsc110 = {
        .demod_address    = 0x0a,
 };
 
+/* ------------------------------------------------------------------ */
+
+static struct mt312_config avertv_a700_mt312 = {
+       .demod_address = 0x0e,
+       .voltage_inverted = 1,
+};
+
+static struct zl10036_config avertv_a700_tuner = {
+       .tuner_address = 0x60,
+};
+
 /* ==================================================================
  * Core code
  */
@@ -1376,6 +1390,19 @@ static int dvb_init(struct saa7134_dev *dev)
                                   TUNER_PHILIPS_FMD1216ME_MK3);
                }
                break;
+       case SAA7134_BOARD_AVERMEDIA_A700_PRO:
+       case SAA7134_BOARD_AVERMEDIA_A700_HYBRID:
+               /* Zarlink ZL10313 */
+               fe0->dvb.frontend = dvb_attach(mt312_attach,
+                       &avertv_a700_mt312, &dev->i2c_adap);
+               if (fe0->dvb.frontend) {
+                       if (dvb_attach(zl10036_attach, fe0->dvb.frontend,
+                                       &avertv_a700_tuner, &dev->i2c_adap) == NULL) {
+                               wprintk("%s: No zl10036 found!\n",
+                                       __func__);
+                       }
+               }
+               break;
        default:
                wprintk("Huh? unknown DVB card?\n");
                break;