|
@@ -320,16 +320,14 @@ static int mb86a20s_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
|
|
|
static int mb86a20s_read_status(struct dvb_frontend *fe, fe_status_t *status)
|
|
|
{
|
|
|
struct mb86a20s_state *state = fe->demodulator_priv;
|
|
|
- u8 val;
|
|
|
+ int val;
|
|
|
|
|
|
dprintk("\n");
|
|
|
*status = 0;
|
|
|
|
|
|
- if (fe->ops.i2c_gate_ctrl)
|
|
|
- fe->ops.i2c_gate_ctrl(fe, 0);
|
|
|
val = mb86a20s_readreg(state, 0x0a) & 0xf;
|
|
|
- if (fe->ops.i2c_gate_ctrl)
|
|
|
- fe->ops.i2c_gate_ctrl(fe, 1);
|
|
|
+ if (val < 0)
|
|
|
+ return val;
|
|
|
|
|
|
if (val >= 2)
|
|
|
*status |= FE_HAS_SIGNAL;
|
|
@@ -635,6 +633,25 @@ error:
|
|
|
|
|
|
}
|
|
|
|
|
|
+static int mb86a20s_read_status_gate(struct dvb_frontend *fe,
|
|
|
+ fe_status_t *status)
|
|
|
+{
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ dprintk("\n");
|
|
|
+ *status = 0;
|
|
|
+
|
|
|
+ if (fe->ops.i2c_gate_ctrl)
|
|
|
+ fe->ops.i2c_gate_ctrl(fe, 0);
|
|
|
+
|
|
|
+ ret = mb86a20s_read_status(fe, status);
|
|
|
+
|
|
|
+ if (fe->ops.i2c_gate_ctrl)
|
|
|
+ fe->ops.i2c_gate_ctrl(fe, 1);
|
|
|
+
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
static int mb86a20s_tune(struct dvb_frontend *fe,
|
|
|
bool re_tune,
|
|
|
unsigned int mode_flags,
|
|
@@ -649,7 +666,7 @@ static int mb86a20s_tune(struct dvb_frontend *fe,
|
|
|
rc = mb86a20s_set_frontend(fe);
|
|
|
|
|
|
if (!(mode_flags & FE_TUNE_MODE_ONESHOT))
|
|
|
- mb86a20s_read_status(fe, status);
|
|
|
+ mb86a20s_read_status_gate(fe, status);
|
|
|
|
|
|
return rc;
|
|
|
}
|
|
@@ -730,7 +747,7 @@ static struct dvb_frontend_ops mb86a20s_ops = {
|
|
|
.init = mb86a20s_initfe,
|
|
|
.set_frontend = mb86a20s_set_frontend,
|
|
|
.get_frontend = mb86a20s_get_frontend,
|
|
|
- .read_status = mb86a20s_read_status,
|
|
|
+ .read_status = mb86a20s_read_status_gate,
|
|
|
.read_signal_strength = mb86a20s_read_signal_strength,
|
|
|
.tune = mb86a20s_tune,
|
|
|
};
|