V4L/DVB (11581): stv090x and stv6110x: fix repeater level setup and ref clock

* Reference clock was unused
* Fix missing repeater level setup

Signed-off-by: Manu Abraham <manu@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
diff --git a/drivers/media/dvb/frontends/stv090x.c b/drivers/media/dvb/frontends/stv090x.c
index a65f1b7..e80d163 100644
--- a/drivers/media/dvb/frontends/stv090x.c
+++ b/drivers/media/dvb/frontends/stv090x.c
@@ -640,16 +640,19 @@
 static int stv090x_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
 {
 	struct stv090x_state *state = fe->demodulator_priv;
+	const struct stv090x_config *config = state->config;
 	u32 reg;
 
 	reg = STV090x_READ_DEMOD(state, I2CRPT);
-
+//	STV090x_SETFIELD_Px(reg, ENARPT_LEVEL_FIELD, config->repeater_level);
 	if (enable) {
+		dprintk(FE_DEBUG, 1, "Enable Gate");
 		STV090x_SETFIELD_Px(reg, I2CT_ON_FIELD, 1);
 		if (STV090x_WRITE_DEMOD(state, I2CRPT, reg) < 0)
 			goto err;
 
 	} else {
+		dprintk(FE_DEBUG, 1, "Disable Gate");
 		STV090x_SETFIELD_Px(reg, I2CT_ON_FIELD, 0);
 		if ((STV090x_WRITE_DEMOD(state, I2CRPT, reg)) < 0)
 			goto err;
@@ -3773,6 +3776,7 @@
 	const struct stv090x_reg *stv090x_initval = NULL;
 	const struct stv090x_reg *stv090x_cut20_val = NULL;
 	unsigned long t1_size = 0, t2_size = 0;
+	u32 reg = 0;
 
 	int i;
 
@@ -3799,7 +3803,8 @@
 	if (STV090x_WRITE_DEMOD(state, TNRCFG, 0x6c) < 0) /* check register ! (No Tuner Mode) */
 		goto err;
 
-	if (STV090x_WRITE_DEMOD(state, I2CRPT, 0x00) < 0) /* repeater OFF */
+	STV090x_SETFIELD_Px(reg, ENARPT_LEVEL_FIELD, config->repeater_level);
+	if (STV090x_WRITE_DEMOD(state, I2CRPT, reg) < 0) /* repeater OFF */
 		goto err;
 
 	if (stv090x_write_reg(state, STV090x_NCOARSE, 0x13) < 0) /* set PLL divider */
diff --git a/drivers/media/dvb/frontends/stv090x.h b/drivers/media/dvb/frontends/stv090x.h
index e56489c..e968c98 100644
--- a/drivers/media/dvb/frontends/stv090x.h
+++ b/drivers/media/dvb/frontends/stv090x.h
@@ -49,6 +49,17 @@
 	STV090x_CLK_EXT = 2 /* Clk i/p = XTALI */
 };
 
+enum stv090x_i2crpt {
+	STV090x_RPTLEVEL_256	= 0,
+	STV090x_RPTLEVEL_128	= 1,
+	STV090x_RPTLEVEL_64	= 2,
+	STV090x_RPTLEVEL_32	= 3,
+	STV090x_RPTLEVEL_16	= 4,
+	STV090x_RPTLEVEL_8	= 5,
+	STV090x_RPTLEVEL_4	= 6,
+	STV090x_RPTLEVEL_2	= 7,
+};
+
 struct stv090x_config {
 	enum stv090x_device	device;
 	enum stv090x_mode	demod_mode;
@@ -62,6 +73,8 @@
 	u8 ts1_mode;
 	u8 ts2_mode;
 
+	enum stv090x_i2crpt	repeater_level;
+
 	int (*tuner_init) (struct dvb_frontend *fe);
 	int (*tuner_set_mode) (struct dvb_frontend *fe, enum tuner_mode mode);
 	int (*tuner_set_frequency) (struct dvb_frontend *fe, u32 frequency);
diff --git a/drivers/media/dvb/frontends/stv6110x_priv.h b/drivers/media/dvb/frontends/stv6110x_priv.h
index 1295272..7260da6 100644
--- a/drivers/media/dvb/frontends/stv6110x_priv.h
+++ b/drivers/media/dvb/frontends/stv6110x_priv.h
@@ -62,16 +62,14 @@
 
 #define TRIALS					10
 #define R_DIV(__div)				(1 << (__div + 1))
-#define REFCLOCK_kHz				(stv6110x->reference /    1000)
-#define REFCLOCK_MHz				(stv6110x->reference / 1000000)
+#define REFCLOCK_kHz				(stv6110x->config->refclk /    1000)
+#define REFCLOCK_MHz				(stv6110x->config->refclk / 1000000)
 
 struct stv6110x_state {
 	struct i2c_adapter		*i2c;
 	const struct stv6110x_config	*config;
 
 	struct stv6110x_devctl		*devctl;
-
-	u32 reference;
 };
 
 #endif /* __STV6110x_PRIV_H */
diff --git a/drivers/media/dvb/ttpci/budget-ci.c b/drivers/media/dvb/ttpci/budget-ci.c
index 7222030..dbdc795 100644
--- a/drivers/media/dvb/ttpci/budget-ci.c
+++ b/drivers/media/dvb/ttpci/budget-ci.c
@@ -1361,6 +1361,8 @@
 	.ts1_mode		= STV090x_TSMODE_DVBCI,
 	.ts2_mode		= STV090x_TSMODE_DVBCI,
 
+	.repeater_level		= STV090x_RPTLEVEL_16,
+
 	.tuner_init		= NULL,
 	.tuner_set_mode		= NULL,
 	.tuner_set_frequency	= NULL,