Commit 5817ea0c authored by Andreas Regel's avatar Andreas Regel Committed by Mauro Carvalho Chehab

V4L/DVB: Budget/STV090x/STV6110x: Initialize the demodulator immediately after...

V4L/DVB: Budget/STV090x/STV6110x: Initialize the demodulator immediately after the tuner is attached
Signed-off-by: default avatarAndreas Regel <andreas.regel@gmx.de>
Signed-off-by: default avatarManu Abraham <manu@linuxtv.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 85532d14
...@@ -4324,6 +4324,20 @@ static int stv090x_init(struct dvb_frontend *fe) ...@@ -4324,6 +4324,20 @@ static int stv090x_init(struct dvb_frontend *fe)
u32 reg; u32 reg;
if (state->internal->mclk == 0) { if (state->internal->mclk == 0) {
/* call tuner init to configure the tuner's clock output
divider directly before setting up the master clock of
the stv090x. */
if (stv090x_i2c_gate_ctrl(state, 1) < 0)
goto err;
if (config->tuner_init) {
if (config->tuner_init(fe) < 0)
goto err_gateoff;
}
if (stv090x_i2c_gate_ctrl(state, 0) < 0)
goto err;
stv090x_set_mclk(state, 135000000, config->xtal); /* 135 Mhz */ stv090x_set_mclk(state, 135000000, config->xtal); /* 135 Mhz */
msleep(5); msleep(5);
if (stv090x_write_reg(state, STV090x_SYNTCTRL, if (stv090x_write_reg(state, STV090x_SYNTCTRL,
......
...@@ -361,7 +361,6 @@ struct stv6110x_devctl *stv6110x_attach(struct dvb_frontend *fe, ...@@ -361,7 +361,6 @@ struct stv6110x_devctl *stv6110x_attach(struct dvb_frontend *fe,
{ {
struct stv6110x_state *stv6110x; struct stv6110x_state *stv6110x;
u8 default_regs[] = {0x07, 0x11, 0xdc, 0x85, 0x17, 0x01, 0xe6, 0x1e}; u8 default_regs[] = {0x07, 0x11, 0xdc, 0x85, 0x17, 0x01, 0xe6, 0x1e};
int ret;
stv6110x = kzalloc(sizeof (struct stv6110x_state), GFP_KERNEL); stv6110x = kzalloc(sizeof (struct stv6110x_state), GFP_KERNEL);
if (stv6110x == NULL) if (stv6110x == NULL)
...@@ -390,25 +389,6 @@ struct stv6110x_devctl *stv6110x_attach(struct dvb_frontend *fe, ...@@ -390,25 +389,6 @@ struct stv6110x_devctl *stv6110x_attach(struct dvb_frontend *fe,
break; break;
} }
if (fe->ops.i2c_gate_ctrl) {
ret = fe->ops.i2c_gate_ctrl(fe, 1);
if (ret < 0)
goto error;
}
ret = stv6110x_write_regs(stv6110x, 0, stv6110x->regs,
ARRAY_SIZE(stv6110x->regs));
if (ret < 0) {
dprintk(FE_ERROR, 1, "Initialization failed");
goto error;
}
if (fe->ops.i2c_gate_ctrl) {
ret = fe->ops.i2c_gate_ctrl(fe, 0);
if (ret < 0)
goto error;
}
fe->tuner_priv = stv6110x; fe->tuner_priv = stv6110x;
fe->ops.tuner_ops = stv6110x_ops; fe->ops.tuner_ops = stv6110x_ops;
......
...@@ -640,6 +640,12 @@ static void frontend_init(struct budget *budget) ...@@ -640,6 +640,12 @@ static void frontend_init(struct budget *budget)
tt1600_stv090x_config.tuner_set_refclk = ctl->tuner_set_refclk; tt1600_stv090x_config.tuner_set_refclk = ctl->tuner_set_refclk;
tt1600_stv090x_config.tuner_get_status = ctl->tuner_get_status; tt1600_stv090x_config.tuner_get_status = ctl->tuner_get_status;
/* call the init function once to initialize
tuner's clock output divider and demod's
master clock */
if (budget->dvb_frontend->ops.init)
budget->dvb_frontend->ops.init(budget->dvb_frontend);
dvb_attach(isl6423_attach, dvb_attach(isl6423_attach,
budget->dvb_frontend, budget->dvb_frontend,
&budget->i2c_adap, &budget->i2c_adap,
......
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