diff options
author | Michael Krufky <mkrufky@linuxtv.org> | 2005-09-06 15:19:40 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-09-07 16:58:02 -0700 |
commit | dc9ca2af4917ce4e545fa3eb1d845c555128cabc (patch) | |
tree | ad7e5cdc1ebd0767fc7bf717c3d9340efc2af38b /drivers/media/dvb/frontends/lgdt330x.c | |
parent | 2684f5c74d5c2d3eb6ddbb599a8c89a06c5fa420 (diff) |
[PATCH] DVB: lgdt330x check callback fix
Most of the patch is whitespace cleanup, but more importantly, this patch
checks to see whether a callback is set before calling it. On cx88 boards
(currently the only boards using lgdt330x in 2.6.13) every callback is set.
However, newer drivers currently in development leave a callback undefined,
and lgdt330x must not call it if it isn't defined.
Signed-off-by: Patrick Boettcher <pb@linuxtv.org>
Signed-off-by: Michael Krufky <mkrufky@m1k.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/media/dvb/frontends/lgdt330x.c')
-rw-r--r-- | drivers/media/dvb/frontends/lgdt330x.c | 50 |
1 files changed, 25 insertions, 25 deletions
diff --git a/drivers/media/dvb/frontends/lgdt330x.c b/drivers/media/dvb/frontends/lgdt330x.c index 1f1cd7a8d500..7142b9c51dd2 100644 --- a/drivers/media/dvb/frontends/lgdt330x.c +++ b/drivers/media/dvb/frontends/lgdt330x.c @@ -69,8 +69,8 @@ struct lgdt330x_state }; static int i2c_write_demod_bytes (struct lgdt330x_state* state, - u8 *buf, /* data bytes to send */ - int len /* number of bytes to send */ ) + u8 *buf, /* data bytes to send */ + int len /* number of bytes to send */ ) { struct i2c_msg msg = { .addr = state->config->demod_address, @@ -129,13 +129,13 @@ static int lgdt3302_SwReset(struct lgdt330x_state* state) }; ret = i2c_write_demod_bytes(state, - reset, sizeof(reset)); + reset, sizeof(reset)); if (ret == 0) { /* force reset high (inactive) and unmask interrupts */ reset[1] = 0x7f; ret = i2c_write_demod_bytes(state, - reset, sizeof(reset)); + reset, sizeof(reset)); } return ret; } @@ -149,13 +149,13 @@ static int lgdt3303_SwReset(struct lgdt330x_state* state) }; ret = i2c_write_demod_bytes(state, - reset, sizeof(reset)); + reset, sizeof(reset)); if (ret == 0) { /* force reset high (inactive) */ reset[1] = 0x01; ret = i2c_write_demod_bytes(state, - reset, sizeof(reset)); + reset, sizeof(reset)); } return ret; } @@ -172,7 +172,6 @@ static int lgdt330x_SwReset(struct lgdt330x_state* state) } } - static int lgdt330x_init(struct dvb_frontend* fe) { /* Hardware reset is done using gpio[0] of cx23880x chip. @@ -229,13 +228,13 @@ static int lgdt330x_init(struct dvb_frontend* fe) case LGDT3302: chip_name = "LGDT3302"; err = i2c_write_demod_bytes(state, lgdt3302_init_data, - sizeof(lgdt3302_init_data)); - break; + sizeof(lgdt3302_init_data)); + break; case LGDT3303: chip_name = "LGDT3303"; err = i2c_write_demod_bytes(state, lgdt3303_init_data, - sizeof(lgdt3303_init_data)); - break; + sizeof(lgdt3303_init_data)); + break; default: chip_name = "undefined"; printk (KERN_WARNING "Only LGDT3302 and LGDT3303 are supported chips.\n"); @@ -262,15 +261,15 @@ static int lgdt330x_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks) switch (state->config->demod_chip) { case LGDT3302: err = i2c_read_demod_bytes(state, LGDT3302_PACKET_ERR_COUNTER1, - buf, sizeof(buf)); - break; + buf, sizeof(buf)); + break; case LGDT3303: err = i2c_read_demod_bytes(state, LGDT3303_PACKET_ERR_COUNTER1, - buf, sizeof(buf)); - break; + buf, sizeof(buf)); + break; default: printk(KERN_WARNING - "Only LGDT3302 and LGDT3303 are supported chips.\n"); + "Only LGDT3302 and LGDT3303 are supported chips.\n"); err = -ENODEV; } @@ -330,7 +329,7 @@ static int lgdt330x_set_parameters(struct dvb_frontend* fe, if (state->config->demod_chip == LGDT3303) { err = i2c_write_demod_bytes(state, lgdt3303_8vsb_44_data, - sizeof(lgdt3303_8vsb_44_data)); + sizeof(lgdt3303_8vsb_44_data)); } break; @@ -378,18 +377,19 @@ static int lgdt330x_set_parameters(struct dvb_frontend* fe, /* Select the requested mode */ i2c_write_demod_bytes(state, top_ctrl_cfg, - sizeof(top_ctrl_cfg)); - state->config->set_ts_params(fe, 0); + sizeof(top_ctrl_cfg)); + if (state->config->set_ts_params) + state->config->set_ts_params(fe, 0); state->current_modulation = param->u.vsb.modulation; } - /* Change only if we are actually changing the channel */ - if (state->current_frequency != param->frequency) { - /* Tune to the new frequency */ + /* Tune to the specified frequency */ + if (state->config->pll_set) state->config->pll_set(fe, param); - /* Keep track of the new frequency */ - state->current_frequency = param->frequency; - } + + /* Keep track of the new frequency */ + state->current_frequency = param->frequency; + lgdt330x_SwReset(state); return 0; } |