From 104ac0c66116b2995294c59e5269ddbf85d8826e Mon Sep 17 00:00:00 2001 From: Andrew de Quincey Date: Tue, 18 Apr 2006 17:47:10 -0300 Subject: [PATCH] --- yaml --- r: 29887 b: refs/heads/master c: 085542dc8611d969ef698120c98288e24d5f4f9d h: refs/heads/master i: 29885: 89b16af46d7dd3fdfc0ab362a8e70de5b89232c8 29883: a4203018b3b8ceab661e965818b08f0cd140a6c8 29879: 308fe4f6ee1a0df467e690b6ad40affc3e48fa54 29871: 1d966f7f91a8e86cb8e60ed23e5b1298afab156f 29855: 824d79dae4c2d67856c7e778e60fb751f1d77d37 29823: 99aa9cc19d6f59f0c9a84b021f71cb8861da64ae v: v3 --- [refs] | 2 +- trunk/drivers/media/dvb/frontends/sp887x.c | 34 ++++++++++++++-------- trunk/drivers/media/dvb/frontends/sp887x.h | 6 ---- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/[refs] b/[refs] index c6d61ad47042..451d0e53bf5e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 53a8ee3e903659482e009481ab51d6a6572e6a57 +refs/heads/master: 085542dc8611d969ef698120c98288e24d5f4f9d diff --git a/trunk/drivers/media/dvb/frontends/sp887x.c b/trunk/drivers/media/dvb/frontends/sp887x.c index eb8a602198ca..543dfa145090 100644 --- a/trunk/drivers/media/dvb/frontends/sp887x.c +++ b/trunk/drivers/media/dvb/frontends/sp887x.c @@ -208,15 +208,6 @@ static int sp887x_initial_setup (struct dvb_frontend* fe, const struct firmware /* bit 0x010: enable data valid signal */ sp887x_writereg(state, 0xd00, 0x010); sp887x_writereg(state, 0x0d1, 0x000); - - /* setup the PLL */ - if (state->config->pll_init) { - sp887x_writereg(state, 0x206, 0x001); - state->config->pll_init(fe); - sp887x_writereg(state, 0x206, 0x000); - } - - printk ("done.\n"); return 0; }; @@ -362,9 +353,16 @@ static int sp887x_setup_frontend_parameters (struct dvb_frontend* fe, sp887x_microcontroller_stop(state); /* setup the PLL */ - sp887x_writereg(state, 0x206, 0x001); - actual_freq = state->config->pll_set(fe, p); - sp887x_writereg(state, 0x206, 0x000); + if (fe->ops->tuner_ops.set_params) { + fe->ops->tuner_ops.set_params(fe, p); + if (fe->ops->i2c_gate_ctrl) fe->ops->i2c_gate_ctrl(fe, 0); + } + if (fe->ops->tuner_ops.get_frequency) { + fe->ops->tuner_ops.get_frequency(fe, &actual_freq); + if (fe->ops->i2c_gate_ctrl) fe->ops->i2c_gate_ctrl(fe, 0); + } else { + actual_freq = p->frequency; + } /* read status reg in order to clear demodulator_priv; + + if (enable) { + return sp887x_writereg(state, 0x206, 0x001); + } else { + return sp887x_writereg(state, 0x206, 0x000); + } +} + static int sp887x_sleep(struct dvb_frontend* fe) { struct sp887x_state* state = fe->demodulator_priv; @@ -589,6 +598,7 @@ static struct dvb_frontend_ops sp887x_ops = { .init = sp887x_init, .sleep = sp887x_sleep, + .i2c_gate_ctrl = sp887x_i2c_gate_ctrl, .set_frontend = sp887x_setup_frontend_parameters, .get_tune_settings = sp887x_get_tune_settings, diff --git a/trunk/drivers/media/dvb/frontends/sp887x.h b/trunk/drivers/media/dvb/frontends/sp887x.h index 6a05d8f8e8cc..c44b0ebdf1e2 100644 --- a/trunk/drivers/media/dvb/frontends/sp887x.h +++ b/trunk/drivers/media/dvb/frontends/sp887x.h @@ -13,12 +13,6 @@ struct sp887x_config /* the demodulator's i2c address */ u8 demod_address; - /* PLL maintenance */ - int (*pll_init)(struct dvb_frontend* fe); - - /* this should return the actual frequency tuned to */ - int (*pll_set)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params); - /* request firmware for device */ int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name); };