Commit 9a1b04e4 authored by Hartmut Hackmann's avatar Hartmut Hackmann Committed by Mauro Carvalho Chehab

V4L/DVB (7654): tda10086: make the xtal frequency a configuration option

Some DVB-S boards, i.e. with the SD1878 tuner, use a 4 MHz reference frequency.
This reqires a different setup of the clock PLL.
This patch adds an enum to the tda10086_config struct and sets the proper
values for the boards.

This patch also fixes the DVB-S section of the MD7134_BRIDGE_2
Signed-off-by: default avatarHartmut Hackmann <hartmut.hackmann@t-online.de>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent b37f2d6a
...@@ -147,6 +147,7 @@ static struct tda10086_config tda10086_config = { ...@@ -147,6 +147,7 @@ static struct tda10086_config tda10086_config = {
.demod_address = 0x0e, .demod_address = 0x0e,
.invert = 0, .invert = 0,
.diseqc_tone = 1, .diseqc_tone = 1,
.xtal_freq = TDA10086_XTAL_16M,
}; };
static int ttusb2_frontend_attach(struct dvb_usb_adapter *adap) static int ttusb2_frontend_attach(struct dvb_usb_adapter *adap)
......
...@@ -128,10 +128,15 @@ static int tda10086_init(struct dvb_frontend* fe) ...@@ -128,10 +128,15 @@ static int tda10086_init(struct dvb_frontend* fe)
tda10086_write_byte(state, 0x32, 0x00); // irq off tda10086_write_byte(state, 0x32, 0x00); // irq off
tda10086_write_byte(state, 0x31, 0x56); // setup AFC tda10086_write_byte(state, 0x31, 0x56); // setup AFC
// setup PLL (assumes 16Mhz XIN) // setup PLL (this assumes SACLK = 96MHz)
tda10086_write_byte(state, 0x55, 0x2c); // misc PLL setup tda10086_write_byte(state, 0x55, 0x2c); // misc PLL setup
if (state->config->xtal_freq == TDA10086_XTAL_16M) {
tda10086_write_byte(state, 0x3a, 0x0b); // M=12 tda10086_write_byte(state, 0x3a, 0x0b); // M=12
tda10086_write_byte(state, 0x3b, 0x01); // P=2 tda10086_write_byte(state, 0x3b, 0x01); // P=2
} else {
tda10086_write_byte(state, 0x3a, 0x17); // M=24
tda10086_write_byte(state, 0x3b, 0x00); // P=1
}
tda10086_write_mask(state, 0x55, 0x20, 0x00); // powerup PLL tda10086_write_mask(state, 0x55, 0x20, 0x00); // powerup PLL
// setup TS interface // setup TS interface
......
...@@ -26,6 +26,11 @@ ...@@ -26,6 +26,11 @@
#include <linux/dvb/frontend.h> #include <linux/dvb/frontend.h>
#include <linux/firmware.h> #include <linux/firmware.h>
enum tda10086_xtal {
TDA10086_XTAL_16M,
TDA10086_XTAL_4M
};
struct tda10086_config struct tda10086_config
{ {
/* the demodulator's i2c address */ /* the demodulator's i2c address */
...@@ -36,6 +41,9 @@ struct tda10086_config ...@@ -36,6 +41,9 @@ struct tda10086_config
/* do we need the diseqc signal with carrier? */ /* do we need the diseqc signal with carrier? */
u8 diseqc_tone; u8 diseqc_tone;
/* frequency of the reference xtal */
enum tda10086_xtal xtal_freq;
}; };
#if defined(CONFIG_DVB_TDA10086) || (defined(CONFIG_DVB_TDA10086_MODULE) && defined(MODULE)) #if defined(CONFIG_DVB_TDA10086) || (defined(CONFIG_DVB_TDA10086_MODULE) && defined(MODULE))
......
...@@ -365,6 +365,7 @@ static struct tda10086_config tda10086_config = { ...@@ -365,6 +365,7 @@ static struct tda10086_config tda10086_config = {
.demod_address = 0x0e, .demod_address = 0x0e,
.invert = 0, .invert = 0,
.diseqc_tone = 1, .diseqc_tone = 1,
.xtal_freq = TDA10086_XTAL_16M,
}; };
static u8 read_pwm(struct budget* budget) static u8 read_pwm(struct budget* budget)
......
...@@ -851,6 +851,14 @@ static struct tda10086_config flydvbs = { ...@@ -851,6 +851,14 @@ static struct tda10086_config flydvbs = {
.demod_address = 0x0e, .demod_address = 0x0e,
.invert = 0, .invert = 0,
.diseqc_tone = 0, .diseqc_tone = 0,
.xtal_freq = TDA10086_XTAL_16M,
};
static struct tda10086_config sd1878_4m = {
.demod_address = 0x0e,
.invert = 0,
.diseqc_tone = 0,
.xtal_freq = TDA10086_XTAL_4M,
}; };
/* ------------------------------------------------------------------ /* ------------------------------------------------------------------
...@@ -1206,7 +1214,7 @@ static int dvb_init(struct saa7134_dev *dev) ...@@ -1206,7 +1214,7 @@ static int dvb_init(struct saa7134_dev *dev)
break; break;
case SAA7134_BOARD_MD7134_BRIDGE_2: case SAA7134_BOARD_MD7134_BRIDGE_2:
dev->dvb.frontend = dvb_attach(tda10086_attach, dev->dvb.frontend = dvb_attach(tda10086_attach,
&flydvbs, &dev->i2c_adap); &sd1878_4m, &dev->i2c_adap);
if (dev->dvb.frontend) { if (dev->dvb.frontend) {
struct dvb_frontend *fe; struct dvb_frontend *fe;
if (dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x60, if (dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x60,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment