diff options
author | Andreas Regel <andreas.regel@gmx.de> | 2010-02-13 14:48:07 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-05-17 23:46:49 -0400 |
commit | 5817ea0c83665dbc117cb7ca637202da0fb1abce (patch) | |
tree | dbd3d47d177cdab1c3d8e51e36974415b3baa921 /drivers/media | |
parent | 85532d1454dd3df7327d12bf6ca7ef5a00bb1282 (diff) |
V4L/DVB: Budget/STV090x/STV6110x: Initialize the demodulator immediately after the tuner is attached
Signed-off-by: Andreas Regel <andreas.regel@gmx.de>
Signed-off-by: Manu Abraham <manu@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media')
-rw-r--r-- | drivers/media/dvb/frontends/stv090x.c | 14 | ||||
-rw-r--r-- | drivers/media/dvb/frontends/stv6110x.c | 20 | ||||
-rw-r--r-- | drivers/media/dvb/ttpci/budget.c | 6 |
3 files changed, 20 insertions, 20 deletions
diff --git a/drivers/media/dvb/frontends/stv090x.c b/drivers/media/dvb/frontends/stv090x.c index 3cc1be28534e..a461fdff2c9c 100644 --- a/drivers/media/dvb/frontends/stv090x.c +++ b/drivers/media/dvb/frontends/stv090x.c | |||
@@ -4324,6 +4324,20 @@ static int stv090x_init(struct dvb_frontend *fe) | |||
4324 | u32 reg; | 4324 | u32 reg; |
4325 | 4325 | ||
4326 | if (state->internal->mclk == 0) { | 4326 | if (state->internal->mclk == 0) { |
4327 | /* call tuner init to configure the tuner's clock output | ||
4328 | divider directly before setting up the master clock of | ||
4329 | the stv090x. */ | ||
4330 | if (stv090x_i2c_gate_ctrl(state, 1) < 0) | ||
4331 | goto err; | ||
4332 | |||
4333 | if (config->tuner_init) { | ||
4334 | if (config->tuner_init(fe) < 0) | ||
4335 | goto err_gateoff; | ||
4336 | } | ||
4337 | |||
4338 | if (stv090x_i2c_gate_ctrl(state, 0) < 0) | ||
4339 | goto err; | ||
4340 | |||
4327 | stv090x_set_mclk(state, 135000000, config->xtal); /* 135 Mhz */ | 4341 | stv090x_set_mclk(state, 135000000, config->xtal); /* 135 Mhz */ |
4328 | msleep(5); | 4342 | msleep(5); |
4329 | if (stv090x_write_reg(state, STV090x_SYNTCTRL, | 4343 | if (stv090x_write_reg(state, STV090x_SYNTCTRL, |
diff --git a/drivers/media/dvb/frontends/stv6110x.c b/drivers/media/dvb/frontends/stv6110x.c index c1ddb83e6349..2f9cd2441340 100644 --- a/drivers/media/dvb/frontends/stv6110x.c +++ b/drivers/media/dvb/frontends/stv6110x.c | |||
@@ -361,7 +361,6 @@ struct stv6110x_devctl *stv6110x_attach(struct dvb_frontend *fe, | |||
361 | { | 361 | { |
362 | struct stv6110x_state *stv6110x; | 362 | struct stv6110x_state *stv6110x; |
363 | u8 default_regs[] = {0x07, 0x11, 0xdc, 0x85, 0x17, 0x01, 0xe6, 0x1e}; | 363 | u8 default_regs[] = {0x07, 0x11, 0xdc, 0x85, 0x17, 0x01, 0xe6, 0x1e}; |
364 | int ret; | ||
365 | 364 | ||
366 | stv6110x = kzalloc(sizeof (struct stv6110x_state), GFP_KERNEL); | 365 | stv6110x = kzalloc(sizeof (struct stv6110x_state), GFP_KERNEL); |
367 | if (stv6110x == NULL) | 366 | if (stv6110x == NULL) |
@@ -390,25 +389,6 @@ struct stv6110x_devctl *stv6110x_attach(struct dvb_frontend *fe, | |||
390 | break; | 389 | break; |
391 | } | 390 | } |
392 | 391 | ||
393 | if (fe->ops.i2c_gate_ctrl) { | ||
394 | ret = fe->ops.i2c_gate_ctrl(fe, 1); | ||
395 | if (ret < 0) | ||
396 | goto error; | ||
397 | } | ||
398 | |||
399 | ret = stv6110x_write_regs(stv6110x, 0, stv6110x->regs, | ||
400 | ARRAY_SIZE(stv6110x->regs)); | ||
401 | if (ret < 0) { | ||
402 | dprintk(FE_ERROR, 1, "Initialization failed"); | ||
403 | goto error; | ||
404 | } | ||
405 | |||
406 | if (fe->ops.i2c_gate_ctrl) { | ||
407 | ret = fe->ops.i2c_gate_ctrl(fe, 0); | ||
408 | if (ret < 0) | ||
409 | goto error; | ||
410 | } | ||
411 | |||
412 | fe->tuner_priv = stv6110x; | 392 | fe->tuner_priv = stv6110x; |
413 | fe->ops.tuner_ops = stv6110x_ops; | 393 | fe->ops.tuner_ops = stv6110x_ops; |
414 | 394 | ||
diff --git a/drivers/media/dvb/ttpci/budget.c b/drivers/media/dvb/ttpci/budget.c index e5cb1022d9db..f5db13d8b990 100644 --- a/drivers/media/dvb/ttpci/budget.c +++ b/drivers/media/dvb/ttpci/budget.c | |||
@@ -640,6 +640,12 @@ static void frontend_init(struct budget *budget) | |||
640 | tt1600_stv090x_config.tuner_set_refclk = ctl->tuner_set_refclk; | 640 | tt1600_stv090x_config.tuner_set_refclk = ctl->tuner_set_refclk; |
641 | tt1600_stv090x_config.tuner_get_status = ctl->tuner_get_status; | 641 | tt1600_stv090x_config.tuner_get_status = ctl->tuner_get_status; |
642 | 642 | ||
643 | /* call the init function once to initialize | ||
644 | tuner's clock output divider and demod's | ||
645 | master clock */ | ||
646 | if (budget->dvb_frontend->ops.init) | ||
647 | budget->dvb_frontend->ops.init(budget->dvb_frontend); | ||
648 | |||
643 | dvb_attach(isl6423_attach, | 649 | dvb_attach(isl6423_attach, |
644 | budget->dvb_frontend, | 650 | budget->dvb_frontend, |
645 | &budget->i2c_adap, | 651 | &budget->i2c_adap, |