aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb-frontends
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/dvb-frontends')
-rw-r--r--drivers/media/dvb-frontends/mb86a20s.c31
1 files changed, 24 insertions, 7 deletions
diff --git a/drivers/media/dvb-frontends/mb86a20s.c b/drivers/media/dvb-frontends/mb86a20s.c
index 8f4fff1f0fa5..03b74d3afd8f 100644
--- a/drivers/media/dvb-frontends/mb86a20s.c
+++ b/drivers/media/dvb-frontends/mb86a20s.c
@@ -320,16 +320,14 @@ static int mb86a20s_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
320static int mb86a20s_read_status(struct dvb_frontend *fe, fe_status_t *status) 320static int mb86a20s_read_status(struct dvb_frontend *fe, fe_status_t *status)
321{ 321{
322 struct mb86a20s_state *state = fe->demodulator_priv; 322 struct mb86a20s_state *state = fe->demodulator_priv;
323 u8 val; 323 int val;
324 324
325 dprintk("\n"); 325 dprintk("\n");
326 *status = 0; 326 *status = 0;
327 327
328 if (fe->ops.i2c_gate_ctrl)
329 fe->ops.i2c_gate_ctrl(fe, 0);
330 val = mb86a20s_readreg(state, 0x0a) & 0xf; 328 val = mb86a20s_readreg(state, 0x0a) & 0xf;
331 if (fe->ops.i2c_gate_ctrl) 329 if (val < 0)
332 fe->ops.i2c_gate_ctrl(fe, 1); 330 return val;
333 331
334 if (val >= 2) 332 if (val >= 2)
335 *status |= FE_HAS_SIGNAL; 333 *status |= FE_HAS_SIGNAL;
@@ -635,6 +633,25 @@ error:
635 633
636} 634}
637 635
636static int mb86a20s_read_status_gate(struct dvb_frontend *fe,
637 fe_status_t *status)
638{
639 int ret;
640
641 dprintk("\n");
642 *status = 0;
643
644 if (fe->ops.i2c_gate_ctrl)
645 fe->ops.i2c_gate_ctrl(fe, 0);
646
647 ret = mb86a20s_read_status(fe, status);
648
649 if (fe->ops.i2c_gate_ctrl)
650 fe->ops.i2c_gate_ctrl(fe, 1);
651
652 return ret;
653}
654
638static int mb86a20s_tune(struct dvb_frontend *fe, 655static int mb86a20s_tune(struct dvb_frontend *fe,
639 bool re_tune, 656 bool re_tune,
640 unsigned int mode_flags, 657 unsigned int mode_flags,
@@ -649,7 +666,7 @@ static int mb86a20s_tune(struct dvb_frontend *fe,
649 rc = mb86a20s_set_frontend(fe); 666 rc = mb86a20s_set_frontend(fe);
650 667
651 if (!(mode_flags & FE_TUNE_MODE_ONESHOT)) 668 if (!(mode_flags & FE_TUNE_MODE_ONESHOT))
652 mb86a20s_read_status(fe, status); 669 mb86a20s_read_status_gate(fe, status);
653 670
654 return rc; 671 return rc;
655} 672}
@@ -730,7 +747,7 @@ static struct dvb_frontend_ops mb86a20s_ops = {
730 .init = mb86a20s_initfe, 747 .init = mb86a20s_initfe,
731 .set_frontend = mb86a20s_set_frontend, 748 .set_frontend = mb86a20s_set_frontend,
732 .get_frontend = mb86a20s_get_frontend, 749 .get_frontend = mb86a20s_get_frontend,
733 .read_status = mb86a20s_read_status, 750 .read_status = mb86a20s_read_status_gate,
734 .read_signal_strength = mb86a20s_read_signal_strength, 751 .read_signal_strength = mb86a20s_read_signal_strength,
735 .tune = mb86a20s_tune, 752 .tune = mb86a20s_tune,
736}; 753};