Re: [PATCH] FM1216ME_MK3 some changes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am Mittwoch, den 29.04.2009, 21:14 -0400 schrieb Andy Walls:
> On Wed, 2009-04-29 at 20:12 +1000, Dmitri Belimov wrote:
> > Hi,
> >  
> > > Am Dienstag, den 28.04.2009, 19:59 +1000 schrieb Dmitri Belimov:
> > > > On Tue, 28 Apr 2009 15:18:32 -0300
> > > > Mauro Carvalho Chehab <mchehab@xxxxxxxxxxxxx> wrote:
> > > > 
> > > > > On Mon, 27 Apr 2009 19:29:05 +1000
> > > > > Dmitri Belimov <d.belimov@xxxxxxxxx> wrote:
> > > > > 
> > > > > > Hi All
> > > > > > 
> > > > > > Step by step.
> > > > > > 
> > > > > > This is patch for change only range of FM1216ME_MK3. Slow
> > > > > > tunning is not a big problem.
> > > > > 
> > > > > Dmitri,
> > > > > 
> > > > > I'll mark those patches as RFC at patchwork until the end of those
> > > > > discussions. After that, please send it again into a new thread.
> > > > 
> > > > You mark patch with TOP AGC not this.
> > > > 
> > > > I think need discuss about FM1216ME_MK3 because I'll have a big
> > > > patch for support control TOP AGC (sensitivity) of this tuner. It
> > > > can be bad for compatible tuners.
> > > 
> > > hmm, in Europe, that TOP AGC did not ever made much difference and it
> > > is an insmod option since ever.
> > > 
> > > I can't tell for Sibiria and initially that tuner had no SECAM-DK
> > > support officially at all. There are no good/much_better tuners for
> > > FTA at all and never have been ;)
> > > 
> > > Some examples, user success reports, to make it more easily to
> > > understand? I think it can only change some _very little_ under
> > > already worst conditions.
> > 
> > This is my idea for RFC about TOP AGC:
> > 
> > 1. Add gain variable to tuner structure.
> > 2. Add V4L2_CID_GAIN control to saa7134 and disable this control.
> > 3. Add workaround to simple_post_tune function for write sensitivity level to the tuner.
> > 4. Enable V4L2_CID_GAIN control when module load if card is right.
> > 
> > My expirience not so good, step 4 segfault the kernel. How to we can make it?
> > 
> > Our windows end-user programm control the sensitivity of each TV channel and change when
> > channel changed.
> > 
> > What you think about it??
> 
> Dmitri,
> 
> >From my understanding the take over point is the signal strength level
> that you want the second stage (an IF demod chip like the TDA9887) to
> take over automatic gain control from the first stage (a tuner chip like
> the TUA6030).  The objective is to set the TOP to achieve maximum gain
> in the first stage while avoiding clipping in the first stage.  When the
> input signal level is smaller than the TOP, the first stage gain is at a
> maximum, and the second stage is performing automatic gain control
> internally.  When the input signal level becomes greater than the TOP,
> the first stage gain needs to be reduced by an AGC, and the second stage
> gain remains constant.
> 
> 
> As I understand it, it would be best to set the first stage (TUA6030 or
> similar) to "External AGC" and set the take over point in the second
> stage (the TDA9887), if the pins between the chips are wired up properly
> inside the tuner.  This should coordinate the AGC in both the first
> stage and second stage of the tuner, as the second stage will be
> providing the gain control to the first stage as needed when the signal
> reaches the TOP.
> 
> http://www.comsec.com/usrp/microtune/NF_tutorial.pdf
> 
> It allows you to achieve maximum gain in the first stage to minimize
> overall receiver noise figure, and avoid clipping the input signal in
> the first stage (TUA6030) with a proper TOP setting in the second stage
> (TDA9887).  The TOP setting in the second stage needs to take into
> account IF SAW filter attenuation of course.
> 
> Do the circuit board traces in the FM1216ME_MK3 support the TDA9887
> controlling the gain of the first stage?  (I've never opened an
> equivalent NTSC tuner assembly to take a look.)

"equivalent" NTSC tuners _do not_ exist at all.

I don't forget all the time we spend to find out that some of them are
Intercarrier only!

Also, the tda988x stuff is underneath the tuner PCB.

I cut one off for those interested in line tracing ...

Without port2=0 you don't get any SECAM-L into the sound trap.

It needs amplification from minus 40 dB AM for the first sound carrier,
and then of course you prefer the second with NICAM.

> If not, then, if I understand things correctly, you need to set the
> first stage and second stage TOP settings so that they refer to about
> the same signal level before the IF SAW filter.  
> 
> 
> I would think AGC TOP settings, for both stages of the tuner, are
> tuner-dependent and relatively constant once you figure out what they
> should be.
> 
> Do you have a different understanding or insight?
> 
> Regards,
> Andy

Since I have some m$ system again after 9 years, not used within the
last three months, I would prefer to get it demonstrated there at first.

I leave on the first BSOD.

Cheers,
Hermann

> 
> 
> 
> > If TV card is not touch V4L2_CTRL_FLAG_DISABLED in this control. The programm can't change AGC TOP.
> > And write default value to AGC TOP like now.
> > 
> > diff -r 43dbc8ebb5a2 linux/drivers/media/common/tuners/tuner-simple.c
> > --- a/linux/drivers/media/common/tuners/tuner-simple.c	Tue Jan 27 23:47:50 2009 -0200
> > +++ b/linux/drivers/media/common/tuners/tuner-simple.c	Tue Apr 21 09:44:38 2009 +1000
> > @@ -116,6 +116,7 @@
> >  
> >  	u32 frequency;
> >  	u32 bandwidth;
> > +	signed int gain;
> >  };
> >  
> >  /* ---------------------------------------------------------------------- */
> > @@ -495,15 +507,57 @@
> >  				   "(should be 4)\n", rc);
> >  		break;
> >  	}
> > +	case TUNER_PHILIPS_FM1216ME_MK3:
> > +	{
> > +		buffer[2] = 0xDE; /* T2 = 0, T1 = 1 and T0 = 1 */
> > +		switch (priv->gain) {
> > +		case 0:
> > +			/* TOP = External AGC, ATC = OFF */
> > +			buffer[3] = 0x60;
> > +			break;
> > +		case 1:
> > +			/* TOP = 118 dB, ATC = OFF */
> > +			buffer[3] = 0x00;
> > +			break;
> > +		case 2:
> > +			/* TOP = 115 dB, ATC = OFF */
> > +			buffer[3] = 0x10;
> > +			break;
> > +		case 3:
> > +			/* TOP = 112 dB, ATC = OFF */
> > +			buffer[3] = 0x20;
> > +			break;
> > +		case 4:
> > +			/* TOP = 109 dB, ATC = OFF */
> > +			buffer[3] = 0x30;
> > +			break;
> > +		case 5:
> > +			/* TOP = 106 dB, ATC = OFF */
> > +			buffer[3] = 0x40;
> > +			break;
> > +		case 6:
> > +			/* TOP = 103 dB, ATC = OFF */
> > +			buffer[3] = 0x50;
> > +			break;
> > +		default:
> > +			/* TOP = 112 dB, ATC = OFF */
> > +			buffer[3] = 0x20;
> > +			break;
> > +		}
> > +
> > +		tuner_dbg("tv 0x%02x 0x%02x 0x%02x 0x%02x\n",
> > +			  buffer[0], buffer[1], buffer[2], buffer[3]);
> > +
> > +		rc = tuner_i2c_xfer_send(&priv->i2c_props, buffer, 4);
> > +		if (4 != rc)
> > +			tuner_warn("i2c i/o error: rc == %d "
> > +				   "(should be 4)\n", rc);
> > +
> > +		break;
> >  	}
> > -
> > +	}
> >  	return 0;
> >  }
> >  
> > diff -r 43dbc8ebb5a2 linux/drivers/media/video/saa7134/saa7134-cards.c
> > --- a/linux/drivers/media/video/saa7134/saa7134-cards.c	Tue Jan 27 23:47:50 2009 -0200
> > +++ b/linux/drivers/media/video/saa7134/saa7134-cards.c	Tue Apr 21 09:44:38 2009 +1000
> > @@ -6506,6 +6806,20 @@
> >  		saa_call_all(dev, tuner, s_config, &tea5767_cfg);
> >  		break;
> >  	}
> > +	case SAA7134_BOARD_BEHOLD_M6_EXTRA:
> > +	{
> > +		struct v4l2_queryctrl *ctl;
> > +		struct saa7134_fh *fh;
> > +		struct file *fl;
> > +
> > +		ctl->id = V4L2_CID_GAIN;
> > +		if (saa7134_queryctrl(fl, fh, ctl) == 0) {                /* BUG here */
> > +			/* enable this control */
> > +			ctl->flags &= ~(V4L2_CTRL_FLAG_DISABLED);
> > +		}
> > +	}
> >  	} /* switch() */
> >  
> >  	saa7134_tuner_setup(dev);
> > diff -r 43dbc8ebb5a2 linux/drivers/media/video/saa7134/saa7134-video.c
> > --- a/linux/drivers/media/video/saa7134/saa7134-video.c	Tue Jan 27 23:47:50 2009 -0200
> > +++ b/linux/drivers/media/video/saa7134/saa7134-video.c	Tue Apr 21 09:44:38 2009 +1000
> > @@ -417,6 +417,15 @@
> >  		.step          = 1,
> >  		.default_value = 0,
> >  		.type          = V4L2_CTRL_TYPE_INTEGER,
> > +	}, {
> > +		.id 		= V4L2_CID_GAIN,
> > +		.name 		= "Gain",
> > +		.minimum 	= 0,
> > +		.maximum 	= 6,
> > +		.step 		= 1,
> > +		.default_value 	= 3,
> > +		.type 		= V4L2_CTRL_TYPE_INTEGER,
> > +		.flags 		= V4L2_CTRL_FLAG_DISABLED,
> >  	},{
> >  		.id            = V4L2_CID_HFLIP,
> >  		.name          = "Mirror",
> > @@ -1129,6 +1138,9 @@
> >  	case V4L2_CID_HUE:
> >  		c->value = dev->ctl_hue;
> >  		break;
> > +	case V4L2_CID_GAIN:
> > +		c->value = dev->ctl_gain;
> > +		break;
> >  	case V4L2_CID_CONTRAST:
> >  		c->value = dev->ctl_contrast;
> >  		break;
> > @@ -1214,6 +1226,10 @@
> >  	case V4L2_CID_HUE:
> >  		dev->ctl_hue = c->value;
> >  		saa_writeb(SAA7134_DEC_CHROMA_HUE, dev->ctl_hue);
> > +		break;
> > +	case V4L2_CID_GAIN:
> > +		dev->ctl_gain = c->value;
> > +
> >  		break;
> >  	case V4L2_CID_CONTRAST:
> >  		dev->ctl_contrast = c->value;
> > @@ -2502,6 +2518,7 @@
> >  	dev->ctl_bright     = ctrl_by_id(V4L2_CID_BRIGHTNESS)->default_value;
> >  	dev->ctl_contrast   = ctrl_by_id(V4L2_CID_CONTRAST)->default_value;
> >  	dev->ctl_hue        = ctrl_by_id(V4L2_CID_HUE)->default_value;
> > +	dev->ctl_gain       = ctrl_by_id(V4L2_CID_GAIN)->default_value;
> >  	dev->ctl_saturation = ctrl_by_id(V4L2_CID_SATURATION)->default_value;
> >  	dev->ctl_volume     = ctrl_by_id(V4L2_CID_AUDIO_VOLUME)->default_value;
> >  	dev->ctl_mute       = 1; // ctrl_by_id(V4L2_CID_AUDIO_MUTE)->default_value;
> > diff -r 43dbc8ebb5a2 linux/drivers/media/video/saa7134/saa7134.h
> > --- a/linux/drivers/media/video/saa7134/saa7134.h	Tue Jan 27 23:47:50 2009 -0200
> > +++ b/linux/drivers/media/video/saa7134/saa7134.h	Tue Apr 21 09:44:38 2009 +1000
> > @@ -548,6 +558,7 @@
> >  	int                        ctl_bright;
> >  	int                        ctl_contrast;
> >  	int                        ctl_hue;
> > +	int                        ctl_gain;             /* gain */
> >  	int                        ctl_saturation;
> >  	int                        ctl_freq;
> >  	int                        ctl_mute;             /* audio */
> > 
> > 
> > With my best regards, Dmitry.
> > 
> > > Cheers,
> > > Hermann
> > > 
> > > > With my best regards, Dmitry.
> > > > 
> > > > > 
> > > > > Cheers,
> > > > > Mauro.
> > > > > 
> > > > > > 
> > > > > > diff -r b40d628f830d
> > > > > > linux/drivers/media/common/tuners/tuner-types.c ---
> > > > > > a/linux/drivers/media/common/tuners/tuner-types.c	Fri
> > > > > > Apr 24 01:46:41 2009 -0300 +++
> > > > > > b/linux/drivers/media/common/tuners/tuner-types.c	Tue
> > > > > > Apr 28 03:35:42 2009 +1000 @@ -558,8 +558,8 @@ static struct
> > > > > > tuner_range tuner_fm1216me_mk3_pal_ranges[] = { { 16 *
> > > > > > 158.00 /*MHz*/, 0x8e, 0x01, },
> > > > > > -	{ 16 * 442.00 /*MHz*/, 0x8e, 0x02, },
> > > > > > -	{ 16 * 999.99        , 0x8e, 0x04, },
> > > > > > +	{ 16 * 441.00 /*MHz*/, 0x8e, 0x02, },
> > > > > > +	{ 16 * 864.00        , 0x8e, 0x04, },
> > > > > >  };
> > > > > >  
> > > > > >  static struct tuner_params tuner_fm1216me_mk3_params[] = {
> > > > > > 
> > > > > > Signed-off-by: Beholder Intl. Ltd. Dmitry Belimov
> > > > > > <d.belimov@xxxxxxxxx>
> > > > > > 
> > > > > > 
> > > > > > With my best regards, Dmitry.
> > > > > > 
> > > > > > > Hi Dmitri,
> > > > > > > 
> > > > > > > Thank you for you responses.
> > > > > > > 
> > > > > > > Just a few more comments...
> > > > > > > 
> > > > > > > On Thu, 2009-04-23 at 20:36 +1000, Dmitri Belimov wrote:
> > > > > > > > Hi Andy
> > > > > > > > 
> > > > > > > > > Dmitri,
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > On Wed, 2009-04-22 at 17:48 +1000, Dmitri Belimov wrote:
> > > > > > > > > > Hi All
> > > > > > > > > > 
> > > > > > > > > > 1. Change middle band. In the end of the middle band the
> > > > > > > > > > sensitivity of receiver not good. If we switch to higher
> > > > > > > > > > band, sensitivity more better. Hardware trick.
> > > > > > > > > 
> > > > > > > 
> > > > > > > > Several years a go your customers write some messages about
> > > > > > > > bad quality of TV if frequency of TV is the end of band. It
> > > > > > > > can be low band or middle. Our hardware engeneer make some
> > > > > > > > tests with hardware TV generator and our TV tuners.
> > > > > > > > 
> > > > > > > > If we set default frequency range for low and middle band,
> > > > > > > > quality of TV signal on 159MHz and 442 MHz is bad. When we
> > > > > > > > make our changes with moving end of bands the quality of TV
> > > > > > > > much better. And our system programmer for OS Windows use
> > > > > > > > changed bands for drivers. Customers be happy.
> > > > > > > 
> > > > > > > OK.  A properly run experiment wins over theory every time. :)
> > > > > > > 
> > > > > > > 
> > > > > > > 
> > > > > > > > You can test it if in your placement available TV programm
> > > > > > > > on 159MHz or 442MHz. This trick can be usefull for other
> > > > > > > > tuners.
> > > > > > > 
> > > > > > > If you look at tveeprom.c, a number of other tuners are using
> > > > > > > that tuner definition:
> > > > > > > 
> > > > > > > $ grep FM1216ME_MK3 tveeprom.c
> > > > > > > 	{ TUNER_PHILIPS_FM1216ME_MK3, 	"Philips
> > > > > > > FQ1216ME MK3"}, { TUNER_PHILIPS_FM1216ME_MK3,
> > > > > > > 	"Philips FM1216 ME MK3"},
> > > > > > > { TUNER_PHILIPS_FM1216ME_MK3, 	"LG S001D MK3"},
> > > > > > > { TUNER_PHILIPS_FM1216ME_MK3, 	"LG S701D MK3"},
> > > > > > > { TUNER_PHILIPS_FM1216ME_MK3, 	"Philips FQ1216LME
> > > > > > > MK3"}, { TUNER_PHILIPS_FM1216ME_MK3, 	"TCL MFPE05 2"},
> > > > > > > { TUNER_PHILIPS_FM1216ME_MK3, 	"TCL MPE05-2"},
> > > > > > > { TUNER_PHILIPS_FM1216ME_MK3, 	"Philips FM1216ME MK5"},
> > > > > > > 
> > > > > > > If your change makes things bad for the other tuners, we'll
> > > > > > > probably have to create an alternate entry for the other
> > > > > > > tuners instead of using the FM1216ME_MK3 defintion.  I
> > > > > > > suspect most of them are clones of the FM1216ME MK3 however,
> > > > > > > so it probably won't matter.
> > > > > > > 
> > > > > > > > > > 3. Set charge pump bit
> > > > > > > > > 
> > > > > > > > > This will improve the time to initially tune to a
> > > > > > > > > frequency, but will likely add some noise as the PLL
> > > > > > > > > continues to maintain lock on the signal.  If there is no
> > > > > > > > > way to turn off the CP after the lock bit is set in the
> > > > > > > > > tuner, it's probably better to leave it off for lower
> > > > > > > > > noise and just live with slower tuning.
> > > > > > > > 
> > > > > > > > We discuss with our windows system programmer about it. He
> > > > > > > > sad that in analog TV mode noise from PLL don't give any
> > > > > > > > problem.
> > > > > > > 
> > > > > > > I would be concerned about phase noise affecting the colors or
> > > > > > > any FM sound carriers.  If the noise isn't noticably affecting
> > > > > > > colors to the human eye (do color bars look OK?), or sound to
> > > > > > > the human ear, then OK.
> > > > > > > 
> > > > > > > 
> > > > > > > >  But in digital TV mode
> > > > > > > > noise from PLL decreased BER.
> > > > > > > 
> > > > > > > I thought the FM1216ME MK3 was an analog only tuner.  I guess
> > > > > > > I don't know DVB-T or cable in Europe well enough.
> > > > > > > 
> > > > > > > 
> > > > > > > > > Leaving the CP bit set should be especially noticable ad
> > > > > > > > > FM noise when set to tune to FM radio stations.  From the
> > > > > > > > > FM1236ME_MK3 datasheet: "It is recommended to set CP=0 in
> > > > > > > > > the FM mode at all times." But the VHF low band control
> > > > > > > > > byte is also used when setting FM radio (AFAICT with a
> > > > > > > > > quick look at the code.)
> > > > > > > > 
> > > > > > > > Yes. You are right. We can swith CP off in FM mode.
> > > > > > > 
> > > > > > > OK.  Thank you.
> > > > > > > 
> > > > > > > > With my best regards, Dmitry.
> > > > > > > 
> > > > > > > 
> > > > > > > Regards,
> > > > > > > Andy
> > > > > > > 
> > > > > > > 
> > > > > > > 
> > > > > 
> > > > > 
> > > > > 
> > > > > 
> > > > > Cheers,
> > > > > Mauro
> > > 
> > > 
> > 
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux