hello, this patch enables the before not implemented video inputs of the SAA7113 Analog Cable Extension Module of that "classic" dvb-c card listed: http://www.vdr-wiki.de/wiki/index.php/DVB-C_full-featured-Karten#Fujitsu-Siemens_DVB-C - tested O.K. with original Siemens PCI Card + CI + Analog Module - tested O.K. with xawtv (latest 3.xx release at this time) - tested O.K. with gnomemeeting (v4l1 only) - tested O.K. with tvtime 0.9x (NOT OK if tuner is accessed! be careful) - not tested the Y/C input configuration, is guessed from datasheet. signed-off-by: t.schorpp@xxxxxx y tom --- linux-2.6.12/drivers/media/dvb/ttpci/av7110_v4l.c 2005-06-17 21:48:29.000000000 +0200 +++ linux-2.6.12/drivers/media/dvb/ttpci/av7110_v4l.c 2005-07-11 01:43:18.000000000 +0200 @@ -70,7 +70,7 @@ return 0; } -static struct v4l2_input inputs[2] = { +static struct v4l2_input inputs[4] = { { .index = 0, .name = "DVB", @@ -87,6 +87,22 @@ .tuner = 0, .std = V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, .status = 0, + }, { + .index = 2, + .name = "Video", + .type = V4L2_INPUT_TYPE_CAMERA, + .audioset = 0, + .tuner = 0, + .std = V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, + .status = 0, + }, { + .index = 3, + .name = "Y/C", + .type = V4L2_INPUT_TYPE_CAMERA, + .audioset = 0, + .tuner = 0, + .std = V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, + .status = 0, } }; @@ -212,11 +228,17 @@ } if (0 != av7110->current_input) { + + dprintk(1, "switching to analog TV: \n"); adswitch = 1; source = SAA7146_HPS_SOURCE_PORT_B; sync = SAA7146_HPS_SYNC_PORT_B; memcpy(standard, analog_standard, sizeof(struct saa7146_standard) * 2); - dprintk(1, "switching to analog TV\n"); + + switch (av7110->current_input) { + case 1: + { + dprintk(1, "switching SAA7113 to Analog Tuner Input.\n"); msp_writereg(av7110, MSP_WR_DSP, 0x0008, 0x0000); // loudspeaker source msp_writereg(av7110, MSP_WR_DSP, 0x0009, 0x0000); // headphone source msp_writereg(av7110, MSP_WR_DSP, 0x000a, 0x0000); // SCART 1 source @@ -231,6 +253,37 @@ saa7146_setgpio(dev, 1, SAA7146_GPIO_OUTHI); // TDA9198 pin9(STD) saa7146_setgpio(dev, 3, SAA7146_GPIO_OUTHI); // TDA9198 pin30(VIF) } + + if (i2c_writereg(av7110, 0x48, 0x02, 0xd0) != 1) { + dprintk(1, "saa7113 write failed @ card %d", av7110->dvb_adapter.num); + } + break; + } + + case 2: + { + if (i2c_writereg(av7110, 0x48, 0x02, 0xd2) != 1) { + dprintk(1, "saa7113 write failed @ card %d", av7110->dvb_adapter.num); + } + dprintk(1, "switching SAA7113 to Video AV CVBS Input.\n"); + break; + } + + case 3: + { + if (i2c_writereg(av7110, 0x48, 0x02, 0xd9) != 1) { + dprintk(1, "saa7113 write failed @ card %d", av7110->dvb_adapter.num); + } + dprintk(1, "switching SAA7113 to Video AV Y/C Input.\n"); + break; + } + + default: + { + dprintk(1, "switching SAA7113 to Input: AV7110: SAA7113: invalid input.\n"); + } + } + } else { adswitch = 0; source = SAA7146_HPS_SOURCE_PORT_A; @@ -406,7 +459,7 @@ dprintk(2, "VIDIOC_ENUMINPUT: %d\n", i->index); if (av7110->analog_tuner_flags) { - if (i->index < 0 || i->index >= 2) + if (i->index < 0 || i->index >= 4) return -EINVAL; } else { if (i->index != 0) @@ -433,7 +486,7 @@ if (!av7110->analog_tuner_flags) return 0; - if (input < 0 || input >= 2) + if (input < 0 || input >= 4) return -EINVAL;