[PATCH 2/6] DVB-Bt8xx: Fix relay handling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Media]     [Video 4 Linux]     [Asterisk]     [Samba]     [Xorg]     [Xfree86]     [Linux USB]

  Powered by Linux