[media] au8522: fix lock detection to be more reliable
authorDevin Heitmueller <dheitmueller@kernellabs.com>
Wed, 19 Apr 2017 23:13:50 +0000 (20:13 -0300)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Tue, 6 Jun 2017 10:50:19 +0000 (07:50 -0300)
Only looking at the lock register causes the status to float
between locked and not locked when there is no signal.  So improve
the logic to also examine the state of the FSC PLL, which results
in the lock status being consistently reported.

Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/dvb-frontends/au8522_decoder.c

index 5e2164044fc6b876d78f8ea0a036f41e5bb1e7d9..343dc92ef54e95034e037b1720a183645fd6d04b 100644 (file)
@@ -623,10 +623,12 @@ static int au8522_g_tuner(struct v4l2_subdev *sd, struct v4l2_tuner *vt)
        int val = 0;
        struct au8522_state *state = to_state(sd);
        u8 lock_status;
+       u8 pll_status;
 
        /* Interrogate the decoder to see if we are getting a real signal */
        lock_status = au8522_readreg(state, 0x00);
-       if (lock_status == 0xa2)
+       pll_status = au8522_readreg(state, 0x7e);
+       if ((lock_status == 0xa2) && (pll_status & 0x10))
                vt->signal = 0xffff;
        else
                vt->signal = 0x00;