The handling of the IF-out relay was broken in earlier versions of the driver. The bttv part of the fix was incorporated into 2.6.15 but the dvb part was missing thereby making the driver non-functional. This is the missing part. Now the relay is activated at the moment the frontend device is opened and de- activated by the sleep/shutdown callback. --- bt8xx/dvb-bt8xx.c | 13 +++++++++++++ frontends/cx24110.c | 10 ++++++++++ frontends/cx24110.h | 1 + 3 files changed, 24 insertions(+) --- linux-2.6.16/drivers/media/dvb/bt8xx/dvb-bt8xx.c 2006-03-22 00:50:45 +0100 +++ linux-2.6.16/drivers/media/dvb/bt8xx/dvb-bt8xx.c 2006-03-22 01:06:13 +0100 @@ -237,6 +237,18 @@ static int cx24108_pll_set(struct dvb_fr static int pinnsat_pll_init(struct dvb_frontend* fe) { + struct dvb_bt8xx_card *card = fe->dvb->priv; + + bttv_gpio_enable(card->bttv_nr, 1, 1); /* output */ + bttv_write_gpio(card->bttv_nr, 1, 1); /* relay on */ + return 0; +} + +static int pinnsat_pll_sleep(struct dvb_frontend* fe) +{ + struct dvb_bt8xx_card *card = fe->dvb->priv; + + bttv_write_gpio(card->bttv_nr, 1, 0); /* relay off */ return 0; } @@ -244,6 +256,7 @@ static struct cx24110_config pctvsat_con .demod_address = 0x55, .pll_init = pinnsat_pll_init, .pll_set = cx24108_pll_set, + .pll_sleep = pinnsat_pll_sleep, }; static int microtune_mt7202dtf_pll_set(struct dvb_frontend* fe, struct dvb_frontend_parameters* params) --- linux-2.6.16/drivers/media/dvb/frontends/cx24110.c 2006-03-22 00:50:45 +0100 +++ linux-2.6.16/drivers/media/dvb/frontends/cx24110.c 2006-03-22 01:06:13 +0100 @@ -371,6 +371,15 @@ static int cx24110_initfe(struct dvb_fro return 0; } +static int cx24110_sleep(struct dvb_frontend *fe) +{ + struct cx24110_state *state = fe->demodulator_priv; + + if (state->config->pll_sleep) + return state->config->pll_sleep(fe); + return 0; +} + static int cx24110_set_voltage (struct dvb_frontend* fe, fe_sec_voltage_t voltage) { struct cx24110_state *state = fe->demodulator_priv; @@ -639,6 +648,7 @@ static struct dvb_frontend_ops cx24110_o .release = cx24110_release, .init = cx24110_initfe, + .sleep = cx24110_sleep, .set_frontend = cx24110_set_frontend, .get_frontend = cx24110_get_frontend, .read_status = cx24110_read_status, --- linux-2.6.16/drivers/media/dvb/frontends/cx24110.h 2006-01-03 04:21:10 +0100 +++ linux-2.6.16/drivers/media/dvb/frontends/cx24110.h 2006-03-22 01:06:13 +0100 @@ -35,6 +35,7 @@ struct cx24110_config /* PLL maintenance */ int (*pll_init)(struct dvb_frontend* fe); int (*pll_set)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params); + int (*pll_sleep)(struct dvb_frontend* fe); }; extern struct dvb_frontend* cx24110_attach(const struct cx24110_config* config, _______________________________________________ linux-dvb@xxxxxxxxxxx http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb