From patchwork Wed Apr 29 10:12:25 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitri Belimov X-Patchwork-Id: 805 Return-path: Envelope-to: mchehab@infradead.org Delivery-date: Thu, 30 Apr 2009 00:12:30 +0000 Received: from vger.kernel.org ([209.132.176.167]) by bombadil.infradead.org with esmtp (Exim 4.69 #1 (Red Hat Linux)) id 1LzJt7-0001OC-Vf; Thu, 30 Apr 2009 00:12:30 +0000 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753887AbZD3AMT (ORCPT + 1 other); Wed, 29 Apr 2009 20:12:19 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1754013AbZD3AMT (ORCPT ); Wed, 29 Apr 2009 20:12:19 -0400 Received: from mail-ew0-f176.google.com ([209.85.219.176]:56694 "EHLO mail-ew0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753887AbZD3AMS (ORCPT ); Wed, 29 Apr 2009 20:12:18 -0400 Received: by ewy24 with SMTP id 24so1601597ewy.37 for ; Wed, 29 Apr 2009 17:12:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:date:from:to:cc:subject :message-id:in-reply-to:references:x-mailer:mime-version :content-type:content-transfer-encoding; bh=8CYcSeysDFC/jS+lWE4JO10pZ6jaoOX0hRje/UypkN8=; b=Buny+1WyUd6k80d8ym6uwzp/OKiXdrL0GKr+ynQNPEcO9Ybr4bpvs3JJVyzeGVXc81 lBUKmysgtI2ya2yHwL1bKxA/KcNfEx1U48I4Rqc1Xytd6Gm4RV63LYkaoAw2WybmOg95 6sM741Psv71xWGDu0RpJMHi8ZkD4I7sXzHHhQ= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=date:from:to:cc:subject:message-id:in-reply-to:references:x-mailer :mime-version:content-type:content-transfer-encoding; b=CLHLkqdaEOPmxV+mf0OgBQ+qfdjdEsUpkD195pc004zFFQZk9CR2jZxW9qIa7eBz09 hWNkXKSKDjj2BHaY2SIXEhyt6sCyy1ocfCiBTWKy77EwDz65+csyqxT+94VA+wIT/I9G I4TUFB84SkgEoiNeuCRvBvEfy4JrBCUT0cRns= Received: by 10.210.34.5 with SMTP id h5mr1049180ebh.95.1241050336260; Wed, 29 Apr 2009 17:12:16 -0700 (PDT) Received: from glory.loctelecom.ru (ns2.openhardware.ru [84.19.183.172]) by mx.google.com with ESMTPS id 5sm2931656eyf.44.2009.04.29.17.12.12 (version=SSLv3 cipher=RC4-MD5); Wed, 29 Apr 2009 17:12:14 -0700 (PDT) Date: Wed, 29 Apr 2009 20:12:25 +1000 From: Dmitri Belimov To: hermann pitton Cc: Mauro Carvalho Chehab , Andy Walls , video4linux-list@redhat.com, linux-media@vger.kernel.org Subject: Re: [PATCH] FM1216ME_MK3 some changes Message-ID: <20090429201225.6ba681cf@glory.loctelecom.ru> In-Reply-To: <1240974643.4280.24.camel@pc07.localdom.local> References: <20090422174848.1be88f61@glory.loctelecom.ru> <1240452534.3232.70.camel@palomino.walls.org> <20090423203618.4ac2bc6f@glory.loctelecom.ru> <1240537394.3231.37.camel@palomino.walls.org> <20090427192905.3ad2b88c@glory.loctelecom.ru> <20090428151832.241fa9b4@pedra.chehab.org> <20090428195922.1a079e46@glory.loctelecom.ru> <1240974643.4280.24.camel@pc07.localdom.local> X-Mailer: Claws Mail 3.5.0 (GTK+ 2.12.12; i486-pc-linux-gnu) Mime-Version: 1.0 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org 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 wrote: > > > > > On Mon, 27 Apr 2009 19:29:05 +1000 > > > Dmitri Belimov 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. 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 > > > > > > > > > > > > > > > > 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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html 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 */