|
@@ -327,6 +327,20 @@ static u32 cxd2841er_calc_iffreq(u32 ifhz)
|
|
|
return cxd2841er_calc_iffreq_xtal(SONY_XTAL_20500, ifhz);
|
|
|
}
|
|
|
|
|
|
+static int cxd2841er_tuner_set(struct dvb_frontend *fe)
|
|
|
+{
|
|
|
+ struct cxd2841er_priv *priv = fe->demodulator_priv;
|
|
|
+
|
|
|
+ if ((priv->flags & CXD2841ER_USE_GATECTRL) && fe->ops.i2c_gate_ctrl)
|
|
|
+ fe->ops.i2c_gate_ctrl(fe, 1);
|
|
|
+ if (fe->ops.tuner_ops.set_params)
|
|
|
+ fe->ops.tuner_ops.set_params(fe);
|
|
|
+ if ((priv->flags & CXD2841ER_USE_GATECTRL) && fe->ops.i2c_gate_ctrl)
|
|
|
+ fe->ops.i2c_gate_ctrl(fe, 0);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static int cxd2841er_dvbs2_set_symbol_rate(struct cxd2841er_priv *priv,
|
|
|
u32 symbol_rate)
|
|
|
{
|
|
@@ -3251,12 +3265,9 @@ static int cxd2841er_set_frontend_s(struct dvb_frontend *fe)
|
|
|
dev_dbg(&priv->i2c->dev, "%s(): tune failed\n", __func__);
|
|
|
goto done;
|
|
|
}
|
|
|
- if (fe->ops.i2c_gate_ctrl)
|
|
|
- fe->ops.i2c_gate_ctrl(fe, 1);
|
|
|
- if (fe->ops.tuner_ops.set_params)
|
|
|
- fe->ops.tuner_ops.set_params(fe);
|
|
|
- if (fe->ops.i2c_gate_ctrl)
|
|
|
- fe->ops.i2c_gate_ctrl(fe, 0);
|
|
|
+
|
|
|
+ cxd2841er_tuner_set(fe);
|
|
|
+
|
|
|
cxd2841er_tune_done(priv);
|
|
|
timeout = ((3000000 + (symbol_rate - 1)) / symbol_rate) + 150;
|
|
|
for (i = 0; i < timeout / CXD2841ER_DVBS_POLLING_INVL; i++) {
|
|
@@ -3376,12 +3387,9 @@ static int cxd2841er_set_frontend_tc(struct dvb_frontend *fe)
|
|
|
}
|
|
|
if (ret)
|
|
|
goto done;
|
|
|
- if (fe->ops.i2c_gate_ctrl)
|
|
|
- fe->ops.i2c_gate_ctrl(fe, 1);
|
|
|
- if (fe->ops.tuner_ops.set_params)
|
|
|
- fe->ops.tuner_ops.set_params(fe);
|
|
|
- if (fe->ops.i2c_gate_ctrl)
|
|
|
- fe->ops.i2c_gate_ctrl(fe, 0);
|
|
|
+
|
|
|
+ cxd2841er_tuner_set(fe);
|
|
|
+
|
|
|
cxd2841er_tune_done(priv);
|
|
|
timeout = 2500;
|
|
|
while (timeout > 0) {
|