Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0a863975 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

V4L/DVB (11918): tuner-xc2028: Fix offset frequencies for DVB @ 6MHz



Both ATSC and DVB @ 6MHz bandwidth require the same offset.

While we're fixing it, let's cleanup the bandwidth setup to better
reflect the fact that it is a function of the bandwidth.

Thanks to Terry Wu <terrywu2009@gmail.com> for pointing this issue and
to Andy Walls <awalls@radix.net> for an initial patch for this fix.

Cc: Terry Wu <terrywu2009@gmail.com>
Acked-by: default avatarAndy Walls <awalls@radix.net>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent a1014d70
Loading
Loading
Loading
Loading
+20 −13
Original line number Diff line number Diff line
@@ -917,22 +917,29 @@ 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});
	} else if (priv->cur_fw.type & ATSC) {

	/*
	 * Digital modes require an offset to adjust to the
	 * proper frequency.
	 * Analog modes require offset = 0
	 */
	if (new_mode != T_ANALOG_TV) {
		/* Sets the offset according with firmware */
		if (priv->cur_fw.type & DTV6)
			offset = 1750000;
	} else {
		else if (priv->cur_fw.type & DTV7)
			offset = 2250000;
		else	/* DTV8 or DTV78 */
			offset = 2750000;

		/*
		 * We must adjust the offset by 500kHz in two cases in order
		 * to correctly center the IF output:
		 * 1) When the ZARLINK456 or DIBCOM52 tables were explicitly
		 *    selected and a 7MHz channel is tuned;
		 * 2) When tuning a VHF channel with DTV78 firmware.
		 * We must adjust the offset by 500kHz  when
		 * tuning a 7MHz VHF channel with DTV78 firmware
		 * (used in Australia, Italy and Germany)
		 */
		if (((priv->cur_fw.type & DTV7) &&
		     (priv->cur_fw.scode_table & (ZARLINK456 | DIBCOM52))) ||
		    ((priv->cur_fw.type & DTV78) && freq < 470000000))
		if ((priv->cur_fw.type & DTV78) && freq < 470000000)
			offset -= 500000;
	}