aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb-frontends
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2013-01-22 05:49:39 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2013-01-22 05:49:39 -0500
commitd36e418a7b1eaeb006ee304533054e2720537db7 (patch)
treebe1ecc4f3dc7475226a71cfca5525a9adf6b3b34 /drivers/media/dvb-frontends
parent04585921ac0fa0f4baaf510cc7e52e3399018fb4 (diff)
[media] mb86a20s: Split status read logic from DVB callback
Split the logic that reads the status from the DVB callback. That helps to properly return an error code, if status read fails. Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
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};