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 <mche...@infradead.org> wrote:
> > 
> > > On Mon, 27 Apr 2009 19:29:05 +1000
> > > Dmitri Belimov <d.beli...@gmail.com> 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??

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.beli...@gmail.com>
> > > > 
> > > > 
> > > > 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to