Merge master.kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb
authorLinus Torvalds <torvalds@g5.osdl.org>
Wed, 4 Oct 2006 17:30:07 +0000 (10:30 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Wed, 4 Oct 2006 17:30:07 +0000 (10:30 -0700)
* master.kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb:
  V4L/DVB (4712): Fix warning when compiling on x86_i64
  V4L/DVB (4711): Radio: No need to return void
  V4L/DVB (4708): Add tveeprom support for Philips FM1236/FM1216ME MK5
  V4L/DVB (4707): 4linux: complete conversion to hotplug safe PCI API
  V4L/DVB (4706): Do not enable VIDEO_V4L2 unconditionally
  V4L/DVB (4704): SAA713x: fixed compile warning in SECAM fixup
  V4L/DVB (4703): Add support for the ASUS EUROPA2 OEM board
  V4L/DVB (4702): Fix: set antenna input for DVB-T for Asus P7131 Dual hybrid
  V4L/DVB (4701): Saa713x audio fixes
  V4L/DVB (4676a): Remove Kconfig item for DiB7000M support

13 files changed:
Documentation/video4linux/CARDLIST.saa7134
drivers/media/Kconfig
drivers/media/dvb/dvb-usb/Kconfig
drivers/media/dvb/dvb-usb/usb-urb.c
drivers/media/radio/radio-gemtek-pci.c
drivers/media/video/saa7134/saa7134-cards.c
drivers/media/video/saa7134/saa7134-dvb.c
drivers/media/video/saa7134/saa7134-tvaudio.c
drivers/media/video/saa7134/saa7134-video.c
drivers/media/video/saa7134/saa7134.h
drivers/media/video/tveeprom.c
drivers/media/video/zoran_card.c
drivers/media/video/zr36120.c

index 6fb82ac3bef09e6c40aa48c76b37f42d21ad9c5c..53ce6a39083c22036bd7b52678da54cbc4a27d20 100644 (file)
@@ -98,3 +98,4 @@
  97 -> LifeView FlyDVB-S /Acorp TV134DS         [5168:0300,4e42:0300]
  98 -> Proteus Pro 2309                         [0919:2003]
  99 -> AVerMedia TV Hybrid A16AR                [1461:2c00]
+100 -> Asus Europa2 OEM                         [1043:4860]
index ed4aa4e7912c39fd3ed764eab623e64490735073..9f7e1fe8c97e254ee107bbf771550223d6219557 100644 (file)
@@ -54,6 +54,7 @@ config VIDEO_V4L1_COMPAT
 
 config VIDEO_V4L2
        bool
+       depends on VIDEO_DEV
        default y
 
 source "drivers/media/video/Kconfig"
index 67cefdd2334a5d31ec486f9e1cf996b70acc0852..2cc5caa26a0ac12828d6e6a7d0cf67ebaf91a807 100644 (file)
@@ -69,7 +69,6 @@ config DVB_USB_DIBUSB_MC
 config DVB_USB_DIB0700
        tristate "DiBcom DiB0700 USB DVB devices (see help for supported devices)"
        depends on DVB_USB
-       select DVB_DIB7000M
        select DVB_DIB3000MC
        select DVB_TUNER_MT2060
        help
index 8728cf347a717959adb4611892174d2d99adab02..572b2d9aa66a7300c8b2b37816ab8d8de0369bb2 100644 (file)
@@ -122,8 +122,9 @@ static int usb_allocate_stream_buffers(struct usb_data_stream *stream, int num,
                        usb_free_stream_buffers(stream);
                        return -ENOMEM;
                }
-               deb_mem("buffer %d: %p (dma: %u)\n",
-                       stream->buf_num, stream->buf_list[stream->buf_num], stream->dma_addr[stream->buf_num]);
+               deb_mem("buffer %d: %p (dma: %Lu)\n",
+                       stream->buf_num,
+stream->buf_list[stream->buf_num], (long long)stream->dma_addr[stream->buf_num]);
                memset(stream->buf_list[stream->buf_num],0,size);
                stream->state |= USB_STATE_URB_BUF;
        }
index cfab57d6bc4a7b9d8dfcf3a86c1252affa7167da..eb14106f66fa28a33777ce7c53cf368512ff9ac7 100644 (file)
@@ -449,7 +449,7 @@ static int __init gemtek_pci_init_module( void )
 
 static void __exit gemtek_pci_cleanup_module( void )
 {
-       return pci_unregister_driver( &gemtek_pci_driver );
+       pci_unregister_driver(&gemtek_pci_driver);
 }
 
 MODULE_AUTHOR( "Vladimir Shebordaev <vshebordaev@mail.ru>" );
index fe3c83ca3de3b2af716c64e5afc3d1cd35e17911..c9d8e3b9cc374387532a9696a59f9d92f1ab7784 100644 (file)
@@ -2994,6 +2994,34 @@ struct saa7134_board saa7134_boards[] = {
                        .amux = LINE1,
                },
        },
+       [SAA7134_BOARD_ASUS_EUROPA2_HYBRID] = {
+               .name           = "Asus Europa2 OEM",
+               .audio_clock    = 0x00187de7,
+               .tuner_type     = TUNER_PHILIPS_FMD1216ME_MK3,
+               .radio_type     = UNSET,
+               .tuner_addr     = ADDR_UNSET,
+               .radio_addr     = ADDR_UNSET,
+               .tda9887_conf   = TDA9887_PRESENT| TDA9887_PORT1_ACTIVE | TDA9887_PORT2_ACTIVE,
+               .mpeg           = SAA7134_MPEG_DVB,
+               .inputs = {{
+                       .name   = name_tv,
+                       .vmux   = 3,
+                       .amux   = TV,
+                       .tv     = 1,
+               },{
+                       .name   = name_comp1,
+                       .vmux   = 4,
+                       .amux   = LINE2,
+               },{
+                       .name   = name_svideo,
+                       .vmux   = 8,
+                       .amux   = LINE2,
+               }},
+               .radio = {
+                       .name   = name_radio,
+                       .amux   = LINE1,
+               },
+       },
 };
 
 const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards);
@@ -3596,6 +3624,12 @@ struct pci_device_id saa7134_pci_tbl[] = {
                .subvendor    = 0x1461,
                .subdevice    = 0x2c00,
                .driver_data  = SAA7134_BOARD_AVERMEDIA_A16AR,
+       },{
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
+               .subvendor    = 0x1043,
+               .subdevice    = 0x4860,
+               .driver_data  = SAA7134_BOARD_ASUS_EUROPA2_HYBRID,
        },{
                /* --- boards without eeprom + subsystem ID --- */
                .vendor       = PCI_VENDOR_ID_PHILIPS,
@@ -3871,6 +3905,7 @@ int saa7134_board_init2(struct saa7134_dev *dev)
                break;
        case SAA7134_BOARD_PHILIPS_EUROPA:
        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
                 */
index fb741fa465a500effd4dd193f7aad4175309340c..1ba53b525ad27812a66e06b826c7d162f1b10d5a 100644 (file)
@@ -874,6 +874,34 @@ static struct tda1004x_config philips_tiger_config = {
 
 /* ------------------------------------------------------------------ */
 
+static int asus_p7131_dual_tuner_init(struct dvb_frontend *fe)
+{
+       struct saa7134_dev *dev = fe->dvb->priv;
+       static u8 data[] = { 0x3c, 0x33, 0x6a};
+       struct i2c_msg msg = {.addr=0x08, .flags=0, .buf=data, .len = sizeof(data)};
+
+       if (i2c_transfer(&dev->i2c_adap, &msg, 1) != 1)
+               return -EIO;
+       /* make sure the DVB-T antenna input is set */
+       saa_setl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x0200000);
+       return 0;
+}
+
+static int asus_p7131_dual_tuner_sleep(struct dvb_frontend *fe)
+{
+       struct saa7134_dev *dev = fe->dvb->priv;
+       static 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);
+       philips_tda827xa_tuner_sleep( 0x61, fe);
+       /* reset antenna inputs for analog usage */
+       saa_clearl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x0200000);
+       return 0;
+}
+
+/* ------------------------------------------------------------------ */
+
 static int lifeview_trio_tuner_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
 {
        int ret;
@@ -1148,8 +1176,8 @@ static int dvb_init(struct saa7134_dev *dev)
                                               &philips_tiger_config,
                                               &dev->i2c_adap);
                if (dev->dvb.frontend) {
-                       dev->dvb.frontend->ops.tuner_ops.init = philips_tiger_tuner_init;
-                       dev->dvb.frontend->ops.tuner_ops.sleep = philips_tiger_tuner_sleep;
+                       dev->dvb.frontend->ops.tuner_ops.init = asus_p7131_dual_tuner_init;
+                       dev->dvb.frontend->ops.tuner_ops.sleep = asus_p7131_dual_tuner_sleep;
                        dev->dvb.frontend->ops.tuner_ops.set_params = philips_tiger_tuner_set_params;
                }
                break;
@@ -1240,6 +1268,18 @@ static int dvb_init(struct saa7134_dev *dev)
                        }
                }
                break;
+       case SAA7134_BOARD_ASUS_EUROPA2_HYBRID:
+               dev->dvb.frontend = tda10046_attach(&medion_cardbus,
+                                                   &dev->i2c_adap);
+               if (dev->dvb.frontend) {
+                       dev->original_demod_sleep = dev->dvb.frontend->ops.sleep;
+                       dev->dvb.frontend->ops.sleep = philips_europa_demod_sleep;
+                       dev->dvb.frontend->ops.tuner_ops.init = philips_fmd1216_tuner_init;
+                       dev->dvb.frontend->ops.tuner_ops.sleep = philips_fmd1216_tuner_sleep;
+                       dev->dvb.frontend->ops.tuner_ops.set_params = philips_fmd1216_tuner_set_params;
+               }
+               break;
+
        default:
                printk("%s: Huh? unknown DVB card?\n",dev->name);
                break;
index d31220d204958f16ad7d4cdb9eea829b0369706f..dd759d6d8d25c88a831f4b0a9689d714222717fe 100644 (file)
@@ -72,12 +72,12 @@ static struct mainscan {
        int          carr;
 } mainscan[] = {
        {
-               .name = "M",
-               .std  = V4L2_STD_NTSC | V4L2_STD_PAL_M,
+               .name = "MN",
+               .std  = V4L2_STD_MN,
                .carr = 4500,
        },{
-               .name = "BG",
-               .std  = V4L2_STD_PAL_BG,
+               .name = "BGH",
+               .std  = V4L2_STD_B | V4L2_STD_GH,
                .carr = 5500,
        },{
                .name = "I",
@@ -85,7 +85,7 @@ static struct mainscan {
                .carr = 6000,
        },{
                .name = "DKL",
-               .std  = V4L2_STD_PAL_DK | V4L2_STD_SECAM,
+               .std  = V4L2_STD_DK | V4L2_STD_SECAM_L | V4L2_STD_SECAM_LC,
                .carr = 6500,
        }
 };
@@ -93,76 +93,70 @@ static struct mainscan {
 static struct saa7134_tvaudio tvaudio[] = {
        {
                .name          = "PAL-B/G FM-stereo",
-               .std           = V4L2_STD_PAL,
+               .std           = V4L2_STD_PAL_BG,
                .mode          = TVAUDIO_FM_BG_STEREO,
                .carr1         = 5500,
                .carr2         = 5742,
        },{
                .name          = "PAL-D/K1 FM-stereo",
-               .std           = V4L2_STD_PAL,
+               .std           = V4L2_STD_PAL_DK,
                .carr1         = 6500,
                .carr2         = 6258,
                .mode          = TVAUDIO_FM_BG_STEREO,
        },{
                .name          = "PAL-D/K2 FM-stereo",
-               .std           = V4L2_STD_PAL,
+               .std           = V4L2_STD_PAL_DK,
                .carr1         = 6500,
                .carr2         = 6742,
                .mode          = TVAUDIO_FM_BG_STEREO,
        },{
                .name          = "PAL-D/K3 FM-stereo",
-               .std           = V4L2_STD_PAL,
+               .std           = V4L2_STD_PAL_DK,
                .carr1         = 6500,
                .carr2         = 5742,
                .mode          = TVAUDIO_FM_BG_STEREO,
        },{
                .name          = "PAL-B/G NICAM",
-               .std           = V4L2_STD_PAL,
+               .std           = V4L2_STD_PAL_BG,
                .carr1         = 5500,
                .carr2         = 5850,
                .mode          = TVAUDIO_NICAM_FM,
        },{
                .name          = "PAL-I NICAM",
-               .std           = V4L2_STD_PAL,
+               .std           = V4L2_STD_PAL_I,
                .carr1         = 6000,
                .carr2         = 6552,
                .mode          = TVAUDIO_NICAM_FM,
        },{
                .name          = "PAL-D/K NICAM",
-               .std           = V4L2_STD_PAL,
+               .std           = V4L2_STD_PAL_DK,
                .carr1         = 6500,
                .carr2         = 5850,
                .mode          = TVAUDIO_NICAM_FM,
        },{
                .name          = "SECAM-L NICAM",
-               .std           = V4L2_STD_SECAM,
+               .std           = V4L2_STD_SECAM_L,
                .carr1         = 6500,
                .carr2         = 5850,
                .mode          = TVAUDIO_NICAM_AM,
        },{
-               .name          = "SECAM-L MONO",
-               .std           = V4L2_STD_SECAM,
+               .name          = "SECAM-D/K NICAM",
+               .std           = V4L2_STD_SECAM_DK,
                .carr1         = 6500,
-               .carr2         = -1,
-               .mode          = TVAUDIO_AM_MONO,
+               .carr2         = 5850,
+               .mode          = TVAUDIO_NICAM_FM,
        },{
-               .name          = "SECAM-D/K",
-               .std           = V4L2_STD_SECAM,
-               .carr1         = 6500,
-               .carr2         = -1,
-               .mode          = TVAUDIO_FM_MONO,
+               .name          = "NTSC-A2 FM-stereo",
+               .std           = V4L2_STD_NTSC,
+               .carr1         = 4500,
+               .carr2         = 4724,
+               .mode          = TVAUDIO_FM_K_STEREO,
        },{
                .name          = "NTSC-M",
                .std           = V4L2_STD_NTSC,
                .carr1         = 4500,
                .carr2         = -1,
                .mode          = TVAUDIO_FM_MONO,
-       },{
-               .name          = "NTSC-A2 FM-stereo",
-               .std           = V4L2_STD_NTSC,
-               .carr1         = 4500,
-               .carr2         = 4724,
-               .mode          = TVAUDIO_FM_K_STEREO,
        }
 };
 #define TVAUDIO (sizeof(tvaudio)/sizeof(struct saa7134_tvaudio))
@@ -340,12 +334,6 @@ static void tvaudio_setmode(struct saa7134_dev *dev,
                saa_writeb(SAA7134_STEREO_DAC_OUTPUT_SELECT,  0xa1);
                saa_writeb(SAA7134_NICAM_CONFIG,              0x00);
                break;
-       case TVAUDIO_AM_MONO:
-               saa_writeb(SAA7134_DEMODULATOR,               0x12);
-               saa_writeb(SAA7134_DCXO_IDENT_CTRL,           0x00);
-               saa_writeb(SAA7134_FM_DEEMPHASIS,             0x44);
-               saa_writeb(SAA7134_STEREO_DAC_OUTPUT_SELECT,  0xa0);
-               break;
        case TVAUDIO_FM_SAT_STEREO:
                /* not implemented (yet) */
                break;
@@ -390,7 +378,6 @@ static int tvaudio_checkcarrier(struct saa7134_dev *dev, struct mainscan *scan)
                }
                printk("\n");
        }
-
        if (dev->tvnorm->id & scan->std) {
                tvaudio_setcarrier(dev,scan->carr-90,scan->carr-90);
                saa_readl(SAA7134_LEVEL_READOUT1 >> 2);
@@ -426,7 +413,6 @@ static int tvaudio_getstereo(struct saa7134_dev *dev, struct saa7134_tvaudio *au
 
        switch (audio->mode) {
        case TVAUDIO_FM_MONO:
-       case TVAUDIO_AM_MONO:
                return V4L2_TUNER_SUB_MONO;
        case TVAUDIO_FM_K_STEREO:
        case TVAUDIO_FM_BG_STEREO:
@@ -495,7 +481,6 @@ static int tvaudio_setstereo(struct saa7134_dev *dev, struct saa7134_tvaudio *au
 
        switch (audio->mode) {
        case TVAUDIO_FM_MONO:
-       case TVAUDIO_AM_MONO:
                /* nothing to do ... */
                break;
        case TVAUDIO_FM_K_STEREO:
@@ -556,6 +541,7 @@ static int tvaudio_thread(void *data)
 
                if (1 == nscan) {
                        /* only one candidate -- skip scan ;) */
+                       dprintk("only one main carrier candidate - skipping scan\n");
                        max1 = 12345;
                        carrier = default_carrier;
                } else {
@@ -603,7 +589,6 @@ static int tvaudio_thread(void *data)
                dev->automute = 0;
                saa_andorb(SAA7134_STEREO_DAC_OUTPUT_SELECT, 0x30, 0x00);
                saa7134_tvaudio_setmute(dev);
-
                /* find the exact tv audio norm */
                for (audio = UNSET, i = 0; i < TVAUDIO; i++) {
                        if (dev->tvnorm->id != UNSET &&
@@ -611,7 +596,7 @@ static int tvaudio_thread(void *data)
                                continue;
                        if (tvaudio[i].carr1 != carrier)
                                continue;
-
+                       /* Note: at least the primary carrier is right here */
                        if (UNSET == audio)
                                audio = i;
                        tvaudio_setmode(dev,&tvaudio[i],"trying");
@@ -626,6 +611,7 @@ static int tvaudio_thread(void *data)
                if (UNSET == audio)
                        continue;
                tvaudio_setmode(dev,&tvaudio[audio],"using");
+
                tvaudio_setstereo(dev,&tvaudio[audio],V4L2_TUNER_MODE_MONO);
                dev->tvaudio = &tvaudio[audio];
 
@@ -750,7 +736,6 @@ static int mute_input_7133(struct saa7134_dev *dev)
        int mask;
        struct saa7134_input *in;
 
-       /* Hac 0506 route OSS sound simultanously  */
        xbarin = 0x03;
        switch (dev->input->amux) {
        case TV:
@@ -834,18 +819,16 @@ static int tvaudio_thread_ddep(void *data)
                } else {
                        /* (let chip) scan for sound carrier */
                        norms = 0;
-                       if (dev->tvnorm->id & V4L2_STD_PAL) {
-                               dprintk("PAL scan\n");
-                               norms |= 0x2c; /* B/G + D/K + I */
-                       }
-                       if (dev->tvnorm->id & V4L2_STD_NTSC) {
-                               dprintk("NTSC scan\n");
-                               norms |= 0x40; /* M */
-                       }
-                       if (dev->tvnorm->id & V4L2_STD_SECAM) {
-                               dprintk("SECAM scan\n");
-                               norms |= 0x18; /* L + D/K */
-                       }
+                       if (dev->tvnorm->id & (V4L2_STD_B | V4L2_STD_GH))
+                               norms |= 0x04;
+                       if (dev->tvnorm->id & V4L2_STD_PAL_I)
+                               norms |= 0x20;
+                       if (dev->tvnorm->id & V4L2_STD_DK)
+                               norms |= 0x08;
+                       if (dev->tvnorm->id & V4L2_STD_MN)
+                               norms |= 0x40;
+                       if (dev->tvnorm->id & (V4L2_STD_SECAM_L | V4L2_STD_SECAM_LC))
+                               norms |= 0x10;
                        if (0 == norms)
                                norms = 0x7c; /* all */
                        dprintk("scanning:%s%s%s%s%s\n",
@@ -1034,7 +1017,11 @@ int saa7134_tvaudio_fini(struct saa7134_dev *dev)
 
 int saa7134_tvaudio_do_scan(struct saa7134_dev *dev)
 {
-       if (dev->thread.pid >= 0) {
+       if (dev->input->amux != TV) {
+               dprintk("sound IF not in use, skipping scan\n");
+               dev->automute = 0;
+               saa7134_tvaudio_setmute(dev);
+       } else if (dev->thread.pid >= 0) {
                dev->thread.mode = UNSET;
                dev->thread.scan2++;
                wake_up_interruptible(&dev->thread.wq);
index 2c171af9a9f2fb868f81ded74eb70fba0c6353f2..203302f21827e5104e8b7d1b2485afbb369b76c2 100644 (file)
@@ -43,12 +43,16 @@ static unsigned int gbuffers      = 8;
 static unsigned int noninterlaced = 1;
 static unsigned int gbufsize      = 720*576*4;
 static unsigned int gbufsize_max  = 720*576*4;
+static char secam[] = "--";
 module_param(video_debug, int, 0644);
 MODULE_PARM_DESC(video_debug,"enable debug messages [video]");
 module_param(gbuffers, int, 0444);
 MODULE_PARM_DESC(gbuffers,"number of capture buffers, range 2-32");
 module_param(noninterlaced, int, 0644);
 MODULE_PARM_DESC(noninterlaced,"capture non interlaced video");
+module_param_string(secam, secam, sizeof(secam), 0644);
+MODULE_PARM_DESC(secam, "force SECAM variant, either DK,L or Lc");
+
 
 #define dprintk(fmt, arg...)   if (video_debug) \
        printk(KERN_DEBUG "%s/video: " fmt, dev->name , ## arg)
@@ -279,7 +283,43 @@ static struct saa7134_tvnorm tvnorms[] = {
                .id            = V4L2_STD_SECAM,
                NORM_625_50,
 
-               .sync_control  = 0x18, /* old: 0x58, */
+               .sync_control  = 0x18,
+               .luma_control  = 0x1b,
+               .chroma_ctrl1  = 0xd1,
+               .chroma_gain   = 0x80,
+               .chroma_ctrl2  = 0x00,
+               .vgate_misc    = 0x1c,
+
+       },{
+               .name          = "SECAM-DK",
+               .id            = V4L2_STD_SECAM_DK,
+               NORM_625_50,
+
+               .sync_control  = 0x18,
+               .luma_control  = 0x1b,
+               .chroma_ctrl1  = 0xd1,
+               .chroma_gain   = 0x80,
+               .chroma_ctrl2  = 0x00,
+               .vgate_misc    = 0x1c,
+
+       },{
+               .name          = "SECAM-L",
+               .id            = V4L2_STD_SECAM_L,
+               NORM_625_50,
+
+               .sync_control  = 0x18,
+               .luma_control  = 0x1b,
+               .chroma_ctrl1  = 0xd1,
+               .chroma_gain   = 0x80,
+               .chroma_ctrl2  = 0x00,
+               .vgate_misc    = 0x1c,
+
+       },{
+               .name          = "SECAM-Lc",
+               .id            = V4L2_STD_SECAM_LC,
+               NORM_625_50,
+
+               .sync_control  = 0x18,
                .luma_control  = 0x1b,
                .chroma_ctrl1  = 0xd1,
                .chroma_gain   = 0x80,
@@ -1769,6 +1809,7 @@ static int video_do_ioctl(struct inode *inode, struct file *file,
        {
                v4l2_std_id *id = arg;
                unsigned int i;
+               v4l2_std_id fixup;
 
                for (i = 0; i < TVNORMS; i++)
                        if (*id == tvnorms[i].id)
@@ -1779,7 +1820,22 @@ static int video_do_ioctl(struct inode *inode, struct file *file,
                                        break;
                if (i == TVNORMS)
                        return -EINVAL;
-
+               if ((*id & V4L2_STD_SECAM) && (secam[0] != '-')) {
+                       if (secam[0] == 'L' || secam[0] == 'l') {
+                               if (secam[1] == 'C' || secam[1] == 'c')
+                                       fixup = V4L2_STD_SECAM_LC;
+                               else
+                                       fixup = V4L2_STD_SECAM_L;
+                       } else {
+                               if (secam[0] == 'D' || secam[0] == 'd')
+                                       fixup = V4L2_STD_SECAM_DK;
+                               else
+                                       fixup = V4L2_STD_SECAM;
+                       }
+                       for (i = 0; i < TVNORMS; i++)
+                               if (fixup == tvnorms[i].id)
+                                       break;
+               }
                mutex_lock(&dev->lock);
                if (res_check(fh, RESOURCE_OVERLAY)) {
                        spin_lock_irqsave(&dev->slock,flags);
index 701a90942108d2946c8e04b6e4336923713b95a8..7cf96b430250013710409a118578d5129822b51a 100644 (file)
@@ -61,7 +61,6 @@ enum saa7134_tvaudio_mode {
        TVAUDIO_FM_K_STEREO   = 4,
        TVAUDIO_NICAM_AM      = 5,
        TVAUDIO_NICAM_FM      = 6,
-       TVAUDIO_AM_MONO       = 7
 };
 
 enum saa7134_audio_in {
@@ -227,6 +226,7 @@ struct saa7134_format {
 #define SAA7134_BOARD_FLYDVBS_LR300 97
 #define SAA7134_BOARD_PROTEUS_2309 98
 #define SAA7134_BOARD_AVERMEDIA_A16AR   99
+#define SAA7134_BOARD_ASUS_EUROPA2_HYBRID 100
 
 #define SAA7134_MAXBOARDS 8
 #define SAA7134_INPUT_MAX 8
index cd1502ac956056f5e0e461b3b7fcdeac076d25f4..e6baaee038bfde5d3843eb6a7a11879adc0a6df6 100644 (file)
@@ -222,8 +222,8 @@ hauppauge_tuner[] =
        { TUNER_TCL_2002MB,    "TCL M2523_3DB_E"},
        { TUNER_ABSENT,        "Philips 8275A"},
        { TUNER_ABSENT,        "Microtune MT2060"},
-       { TUNER_ABSENT,        "Philips FM1236 MK5"},
-       { TUNER_ABSENT,        "Philips FM1216ME MK5"},
+       { TUNER_PHILIPS_FM1236_MK3, "Philips FM1236 MK5"},
+       { TUNER_PHILIPS_FM1216ME_MK3, "Philips FM1216ME MK5"},
        { TUNER_ABSENT,        "TCL M2523_3DI_E"},
        { TUNER_ABSENT,        "Samsung THPD5222FG30A"},
        /* 120-129 */
index 9f21d0ba0f0f721df3d44cad9d8b8566288964cd..653822ce391c574492f5c78c677ad7414edcd696 100644 (file)
@@ -1278,9 +1278,7 @@ find_zr36057 (void)
 
        zoran_num = 0;
        while (zoran_num < BUZ_MAX &&
-              (dev =
-               pci_find_device(PCI_VENDOR_ID_ZORAN,
-                               PCI_DEVICE_ID_ZORAN_36057, dev)) != NULL) {
+              (dev = pci_get_device(PCI_VENDOR_ID_ZORAN, PCI_DEVICE_ID_ZORAN_36057, dev)) != NULL) {
                card_num = card[zoran_num];
                zr = &zoran[zoran_num];
                memset(zr, 0, sizeof(struct zoran));    // Just in case if previous cycle failed
@@ -1541,7 +1539,8 @@ find_zr36057 (void)
                                goto zr_detach_vfe;
                        }
                }
-
+               /* Success so keep the pci_dev referenced */
+               pci_dev_get(zr->pci_dev);
                zoran_num++;
                continue;
 
@@ -1563,6 +1562,9 @@ find_zr36057 (void)
                iounmap(zr->zr36057_mem);
                continue;
        }
+       if (dev)        /* Clean up ref count on early exit */
+               pci_dev_put(dev);
+
        if (zoran_num == 0) {
                dprintk(1, KERN_INFO "No known MJPEG cards found.\n");
        }
index 9240638a01342bca3ad81d7b463dc906b30764cd..b5ffe53c40d8ee275a66de704bd4f9dcddf2a5ed 100644 (file)
@@ -1840,16 +1840,16 @@ int __init find_zoran(void)
        struct zoran *ztv;
        struct pci_dev *dev = NULL;
        unsigned char revision;
-       int zoran_num=0;
+       int zoran_num = 0;
 
-       while ((dev = pci_find_device(PCI_VENDOR_ID_ZORAN,PCI_DEVICE_ID_ZORAN_36120, dev)))
+       while ((dev = pci_get_device(PCI_VENDOR_ID_ZORAN,PCI_DEVICE_ID_ZORAN_36120, dev)))
        {
                /* Ok, a ZR36120/ZR36125 found! */
                ztv = &zorans[zoran_num];
                ztv->dev = dev;
 
                if (pci_enable_device(dev))
-                       return -EIO;
+                       continue;
 
                pci_read_config_byte(dev, PCI_CLASS_REVISION, &revision);
                printk(KERN_INFO "zoran: Zoran %x (rev %d) ",
@@ -1867,17 +1867,18 @@ int __init find_zoran(void)
                {
                        iounmap(ztv->zoran_mem);
                        printk(KERN_ERR "zoran: Bad irq number or handler\n");
-                       return -EINVAL;
+                       continue;
                }
                if (result==-EBUSY)
                        printk(KERN_ERR "zoran: IRQ %d busy, change your PnP config in BIOS\n",dev->irq);
                if (result < 0) {
                        iounmap(ztv->zoran_mem);
-                       return result;
+                       continue;
                }
                /* Enable bus-mastering */
                pci_set_master(dev);
-
+               /* Keep a reference */
+               pci_dev_get(dev);
                zoran_num++;
        }
        if(zoran_num)
@@ -2041,6 +2042,9 @@ void release_zoran(int max)
                if (ztv->zoran_mem)
                        iounmap(ztv->zoran_mem);
 
+               /* Drop PCI device */
+               pci_dev_put(ztv->dev);
+
                video_unregister_device(&ztv->video_dev);
                video_unregister_device(&ztv->vbi_dev);
        }
@@ -2057,13 +2061,12 @@ int __init zr36120_init(void)
 
        handle_chipset();
        zoran_cards = find_zoran();
-       if (zoran_cards<0)
-               /* no cards found, no need for a driver */
+       if (zoran_cards <= 0)
                return -EIO;
 
        /* initialize Zorans */
        for (card=0; card<zoran_cards; card++) {
-               if (init_zoran(card)<0) {
+               if (init_zoran(card) < 0) {
                        /* only release the zorans we have registered */
                        release_zoran(card);
                        return -EIO;