[media] cx24120: make sure tuner is locked at get_frontend
authorJemma Denson <jdenson@gmail.com>
Sun, 28 Feb 2016 18:29:50 +0000 (15:29 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Thu, 3 Mar 2016 17:26:55 +0000 (14:26 -0300)
Change get_frontend to re-check current lock status rather than relying
on a cached value from get_status. Removes potential for tuning failure
if get_frontend is called during tuning.

Probably not too essential as other changes work around this:
https://patchwork.linuxtv.org/patch/32845/

Signed-off-by: Jemma Denson <jdenson@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/dvb-frontends/cx24120.c

index 6ccbd86c9490275a01a61c296d2fcd05f34002ba..066ee387bf250894b1067b023b2d1d760790ad02 100644 (file)
@@ -1507,11 +1507,13 @@ static int cx24120_get_frontend(struct dvb_frontend *fe,
 {
        struct cx24120_state *state = fe->demodulator_priv;
        u8 freq1, freq2, freq3;
+       int status;
 
        dev_dbg(&state->i2c->dev, "\n");
 
        /* don't return empty data if we're not tuned in */
-       if ((state->fe_status & FE_HAS_LOCK) == 0)
+       status = cx24120_readreg(state, CX24120_REG_STATUS);
+       if (!(status & CX24120_HAS_LOCK))
                return 0;
 
        /* Get frequency */