diff options
author | Andrew de Quincey <adq_dvb@lidskialf.net> | 2006-03-30 13:53:35 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2006-04-02 03:56:02 -0400 |
commit | 86f40cc3c994822ffeb226753526d87be21bd79a (patch) | |
tree | aeb2c3cc3989363a234298e1e2b80973f53657b5 /drivers/media/dvb/frontends/tda1004x.c | |
parent | 5e85bd057f0cb29881e3d55d29f48bb55bd2f450 (diff) |
V4L/DVB (3673): Fix budget-av CAM reset
Unfortunately on the budget-av board, the CAM reset line is tied to the
frontend reset line, so resetting the CAM also zaps the frontend. This
breaks the tda1004x at least, and causes it to fail to tune until the
budget-av module is reloaded. This patch adds an exported function to dvb_frontend
that allows a card to forcibly reinitialise a frontend. The budget-av now
does this on CAM reset, which corrects this problem.
since they do not tie the CAM reset line to the frontend reset line.
Signed-off-by: Andrew de Quincey <adq_dvb@lidskialf.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/dvb/frontends/tda1004x.c')
-rw-r--r-- | drivers/media/dvb/frontends/tda1004x.c | 12 |
1 files changed, 0 insertions, 12 deletions
diff --git a/drivers/media/dvb/frontends/tda1004x.c b/drivers/media/dvb/frontends/tda1004x.c index 8e8df7b4ca0e..b83dafa4e12c 100644 --- a/drivers/media/dvb/frontends/tda1004x.c +++ b/drivers/media/dvb/frontends/tda1004x.c | |||
@@ -52,7 +52,6 @@ struct tda1004x_state { | |||
52 | struct dvb_frontend frontend; | 52 | struct dvb_frontend frontend; |
53 | 53 | ||
54 | /* private demod data */ | 54 | /* private demod data */ |
55 | u8 initialised; | ||
56 | enum tda1004x_demod demod_type; | 55 | enum tda1004x_demod demod_type; |
57 | }; | 56 | }; |
58 | 57 | ||
@@ -594,9 +593,6 @@ static int tda10045_init(struct dvb_frontend* fe) | |||
594 | 593 | ||
595 | dprintk("%s\n", __FUNCTION__); | 594 | dprintk("%s\n", __FUNCTION__); |
596 | 595 | ||
597 | if (state->initialised) | ||
598 | return 0; | ||
599 | |||
600 | if (tda10045_fwupload(fe)) { | 596 | if (tda10045_fwupload(fe)) { |
601 | printk("tda1004x: firmware upload failed\n"); | 597 | printk("tda1004x: firmware upload failed\n"); |
602 | return -EIO; | 598 | return -EIO; |
@@ -626,7 +622,6 @@ static int tda10045_init(struct dvb_frontend* fe) | |||
626 | 622 | ||
627 | tda1004x_write_mask(state, 0x1f, 0x01, state->config->invert_oclk); | 623 | tda1004x_write_mask(state, 0x1f, 0x01, state->config->invert_oclk); |
628 | 624 | ||
629 | state->initialised = 1; | ||
630 | return 0; | 625 | return 0; |
631 | } | 626 | } |
632 | 627 | ||
@@ -635,9 +630,6 @@ static int tda10046_init(struct dvb_frontend* fe) | |||
635 | struct tda1004x_state* state = fe->demodulator_priv; | 630 | struct tda1004x_state* state = fe->demodulator_priv; |
636 | dprintk("%s\n", __FUNCTION__); | 631 | dprintk("%s\n", __FUNCTION__); |
637 | 632 | ||
638 | if (state->initialised) | ||
639 | return 0; | ||
640 | |||
641 | if (tda10046_fwupload(fe)) { | 633 | if (tda10046_fwupload(fe)) { |
642 | printk("tda1004x: firmware upload failed\n"); | 634 | printk("tda1004x: firmware upload failed\n"); |
643 | return -EIO; | 635 | return -EIO; |
@@ -697,7 +689,6 @@ static int tda10046_init(struct dvb_frontend* fe) | |||
697 | // tda1004x_write_mask(state, 0x50, 0x80, 0x80); // handle out of guard echoes | 689 | // tda1004x_write_mask(state, 0x50, 0x80, 0x80); // handle out of guard echoes |
698 | tda1004x_write_mask(state, 0x3a, 0x80, state->config->invert_oclk << 7); | 690 | tda1004x_write_mask(state, 0x3a, 0x80, state->config->invert_oclk << 7); |
699 | 691 | ||
700 | state->initialised = 1; | ||
701 | return 0; | 692 | return 0; |
702 | } | 693 | } |
703 | 694 | ||
@@ -1207,7 +1198,6 @@ static int tda1004x_sleep(struct dvb_frontend* fe) | |||
1207 | tda1004x_write_mask(state, TDA1004X_CONFC4, 1, 1); | 1198 | tda1004x_write_mask(state, TDA1004X_CONFC4, 1, 1); |
1208 | break; | 1199 | break; |
1209 | } | 1200 | } |
1210 | state->initialised = 0; | ||
1211 | 1201 | ||
1212 | return 0; | 1202 | return 0; |
1213 | } | 1203 | } |
@@ -1271,7 +1261,6 @@ struct dvb_frontend* tda10045_attach(const struct tda1004x_config* config, | |||
1271 | state->config = config; | 1261 | state->config = config; |
1272 | state->i2c = i2c; | 1262 | state->i2c = i2c; |
1273 | memcpy(&state->ops, &tda10045_ops, sizeof(struct dvb_frontend_ops)); | 1263 | memcpy(&state->ops, &tda10045_ops, sizeof(struct dvb_frontend_ops)); |
1274 | state->initialised = 0; | ||
1275 | state->demod_type = TDA1004X_DEMOD_TDA10045; | 1264 | state->demod_type = TDA1004X_DEMOD_TDA10045; |
1276 | 1265 | ||
1277 | /* check if the demod is there */ | 1266 | /* check if the demod is there */ |
@@ -1330,7 +1319,6 @@ struct dvb_frontend* tda10046_attach(const struct tda1004x_config* config, | |||
1330 | state->config = config; | 1319 | state->config = config; |
1331 | state->i2c = i2c; | 1320 | state->i2c = i2c; |
1332 | memcpy(&state->ops, &tda10046_ops, sizeof(struct dvb_frontend_ops)); | 1321 | memcpy(&state->ops, &tda10046_ops, sizeof(struct dvb_frontend_ops)); |
1333 | state->initialised = 0; | ||
1334 | state->demod_type = TDA1004X_DEMOD_TDA10046; | 1322 | state->demod_type = TDA1004X_DEMOD_TDA10046; |
1335 | 1323 | ||
1336 | /* check if the demod is there */ | 1324 | /* check if the demod is there */ |