public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
From: Mauro Carvalho Chehab <mchehab@redhat.com>
To: Robert Lowery <rglowery@exemail.com.au>
Cc: Terry Wu <terrywu2009@gmail.com>, Andy Walls <awalls@radix.net>,
	Devin Heitmueller <dheitmueller@kernellabs.com>,
	Vincent McIntyre <vincent.mcintyre@gmail.com>,
	linux-media@vger.kernel.org,
	Stefan Ringel <stefan.ringel@arcor.de>,
	Steven Toth <stoth@kernellabs.com>
Subject: Re: [RESEND] Re: DViCO FusionHDTV DVB-T Dual Digital 4 (rev 1)   tuning  regression
Date: Fri, 19 Feb 2010 12:07:28 -0200	[thread overview]
Message-ID: <4B7E9B20.5030503@redhat.com> (raw)
In-Reply-To: <52633.115.70.135.213.1266574714.squirrel@webmail.exetel.com.au>

Robert Lowery wrote:
> Mauro,
> 
> I had to make 2 changes to get the patch to work for me

Ok. Please test this (hopefully) final revision.

-- 

commit bd8bb8798bb96136b6898186d505c9e154334b5d
Author: Mauro Carvalho Chehab <mchehab@redhat.com>
Date:   Fri Feb 19 02:45:00 2010 -0200

    V4L/DVB: tuner-xc2028: fix tuning logic
    
    There's one reported regression in Australia (DTV7) and some
    reported troubles with newer firmwares. Rework the logic to improve
    tuner on those cases.
    
    Thanks-to: Robert Lowery <rglowery@exemail.com.au>
    Thanks-to: Stefan Ringel <stefan.ringel@arcor.de>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

diff --git a/drivers/media/common/tuners/tuner-xc2028.c b/drivers/media/common/tuners/tuner-xc2028.c
index ed50168..ef61815 100644
--- a/drivers/media/common/tuners/tuner-xc2028.c
+++ b/drivers/media/common/tuners/tuner-xc2028.c
@@ -932,30 +932,52 @@ static int generic_set_freq(struct dvb_frontend *fe, u32 freq /* in HZ */,
 	 * that xc2028 will be in a safe state.
 	 * Maybe this might also be needed for DTV.
 	 */
-	if (new_mode == T_ANALOG_TV)
+	if (new_mode == T_ANALOG_TV) {
 		rc = send_seq(priv, {0x00, 0x00});
 
-	/*
-	 * Digital modes require an offset to adjust to the
-	 * proper frequency.
-	 * Analog modes require offset = 0
-	 */
-	if (new_mode == T_DIGITAL_TV) {
-		/* Sets the offset according with firmware */
+		/* Analog modes require offset = 0 */
+	} else {
+		/*
+		 * Digital modes require an offset to adjust to the
+		 * proper frequency. The offset depends on what
+		 * firmware version is used.
+		 */
+
+		/*
+		 * Adjust to the center frequency. This is calculated by the
+		 * formula: offset = 1.25MHz - BW/2
+		 * For DTV 7/8, the firmware uses BW = 8000, so it needs a
+		 * further adjustment to get the frequency center on VHF
+		 */
 		if (priv->cur_fw.type & DTV6)
 			offset = 1750000;
 		else if (priv->cur_fw.type & DTV7)
 			offset = 2250000;
 		else	/* DTV8 or DTV78 */
 			offset = 2750000;
+		if ((priv->cur_fw.type & DTV78) && freq < 470000000)
+			offset -= 500000;
 
 		/*
-		 * We must adjust the offset by 500kHz  when
-		 * tuning a 7MHz VHF channel with DTV78 firmware
-		 * (used in Australia, Italy and Germany)
+		 * xc3028 additional "magic"
+		 * Depending on the firmware version, it needs some adjustments
+		 * to properly centralize the frequency. This seems to be
+		 * needed to compensate the SCODE table adjustments made by
+		 * newer firmwares
 		 */
-		if ((priv->cur_fw.type & DTV78) && freq < 470000000)
-			offset -= 500000;
+
+		if (priv->firm_version < 0x0302) {
+			if (priv->cur_fw.type & DTV7)
+				offset += 500000;
+#if 0
+		/* Still need some tests */
+		} else {
+			if (priv->cur_fw.type & DTV7)
+				offset -= 300000;
+			else if (type != ATSC) /* DVB @6MHz, DTV 8 and DTV 7/8 */
+				offset += 200000;
+#endif
+		}
 	}
 
 	div = (freq - offset + DIV / 2) / DIV;
@@ -1114,17 +1136,22 @@ static int xc2028_set_params(struct dvb_frontend *fe,
 
 	/* All S-code tables need a 200kHz shift */
 	if (priv->ctrl.demod) {
-		demod = priv->ctrl.demod + 200;
+		/*
+		 * Newer firmwares require a 200 kHz offset only for ATSC
+		 */
+		if (type == ATSC || priv->firm_version < 0x0302)
+			demod = priv->ctrl.demod + 200;
 		/*
 		 * The DTV7 S-code table needs a 700 kHz shift.
-		 * Thanks to Terry Wu <terrywu2009@gmail.com> for reporting this
 		 *
 		 * DTV7 is only used in Australia.  Germany or Italy may also
 		 * use this firmware after initialization, but a tune to a UHF
 		 * channel should then cause DTV78 to be used.
+		 *
+		 * Unfortunately, on real-field tests, the s-code offset
+		 * didn't work as expected, as reported by
+		 * Robert Lowery <rglowery@exemail.com.au>
 		 */
-		if (type & DTV7)
-			demod += 500;
 	}
 
 	return generic_set_freq(fe, p->frequency,

  parent reply	other threads:[~2010-02-19 14:07 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-26  6:17 DViCO FusionHDTV DVB-T Dual Digital 4 (rev 1) tuning regression Robert Lowery
2009-11-26  8:27 ` Robert Lowery
2009-11-26  9:37   ` Vincent McIntyre
2009-11-26  9:57     ` Vincent McIntyre
2009-11-26 11:22     ` Robert Lowery
2009-11-26 23:35       ` Robert Lowery
2009-12-01  9:18         ` Vincent McIntyre
2009-12-01 12:40           ` Robert Lowery
2009-12-02 14:57           ` Devin Heitmueller
2009-12-08  6:02             ` [RESEND] " Robert Lowery
2009-12-08  9:03               ` Vincent McIntyre
2009-12-15 23:49               ` Robert Lowery
2010-01-04  4:27                 ` Robert Lowery
2010-01-05  2:27                   ` Andy Walls
2010-01-05  3:13                     ` Devin Heitmueller
2010-01-05  3:43                       ` Andy Walls
2010-01-05  3:18                     ` Andy Walls
2010-01-06  3:20                       ` Robert Lowery
2010-01-07  1:51                         ` Andy Walls
2010-01-07  5:03                           ` Robert Lowery
2010-01-07 13:48                             ` Terry Wu
2010-01-07 14:04                               ` Terry Wu
2010-01-07 14:18                                 ` Terry Wu
2010-01-07 14:42                                   ` Terry Wu
2010-01-08  2:21                                     ` Robert Lowery
     [not found]                                       ` <6ab2c27e1001080007h70bcf309u65251763a70200c6@mail.gmail.com>
2010-01-08  8:12                                         ` Terry Wu
2010-02-19  4:53                                       ` Mauro Carvalho Chehab
2010-02-19  6:12                                         ` Robert Lowery
2010-02-19 10:18                                         ` Robert Lowery
2010-02-19 12:23                                           ` Mauro Carvalho Chehab
2010-02-19 14:07                                           ` Mauro Carvalho Chehab [this message]
2010-02-19 14:17                                             ` Robert Lowery
2010-03-12 10:34                                             ` Vincent McIntyre
2010-03-13 23:51                                               ` Andy Walls

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4B7E9B20.5030503@redhat.com \
    --to=mchehab@redhat.com \
    --cc=awalls@radix.net \
    --cc=dheitmueller@kernellabs.com \
    --cc=linux-media@vger.kernel.org \
    --cc=rglowery@exemail.com.au \
    --cc=stefan.ringel@arcor.de \
    --cc=stoth@kernellabs.com \
    --cc=terrywu2009@gmail.com \
    --cc=vincent.mcintyre@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox