V4L/DVB (13587): DiB8000: enhance status lock
authorOlivier Grenie <olivier.grenie@dibcom.fr>
Mon, 30 Nov 2009 09:38:49 +0000 (06:38 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Wed, 16 Dec 2009 02:18:19 +0000 (00:18 -0200)
Enhance status lock behaviour.

Signed-off-by: Olivier Grenie <olivier.grenie@dibcom.fr>
Signed-off-by: Patrick Boettcher <pboettcher@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/frontends/dib8000.c

index 5218a5c19d1fc6aa571b6bfe90cd9f04c22aac6c..bb2ec1567cd6b19d8075c23a2b49285a66006b17 100644 (file)
@@ -2083,29 +2083,31 @@ static int dib8000_read_status(struct dvb_frontend *fe, fe_status_t * stat)
 
        *stat = 0;
 
-       if ((lock >> 14) & 1)   // AGC
+       if ((lock >> 13) & 1)
                *stat |= FE_HAS_SIGNAL;
 
-       if ((lock >> 8) & 1)    // Equal
+       if ((lock >> 8) & 1) /* Equal */
                *stat |= FE_HAS_CARRIER;
 
-       if ((lock >> 3) & 1)    // TMCC_SYNC
+       if (((lock >> 1) & 0xf) == 0xf) /* TMCC_SYNC */
                *stat |= FE_HAS_SYNC;
 
-       if ((lock >> 5) & 7)    // FEC MPEG
+       if (((lock >> 12) & 1) && ((lock >> 5) & 7)) /* FEC MPEG */
                *stat |= FE_HAS_LOCK;
 
-       lock = dib8000_read_word(state, 554);   // Viterbi Layer A
-       if (lock & 0x01)
-               *stat |= FE_HAS_VITERBI;
+       if ((lock >> 12) & 1) {
+               lock = dib8000_read_word(state, 554); /* Viterbi Layer A */
+               if (lock & 0x01)
+                       *stat |= FE_HAS_VITERBI;
 
-       lock = dib8000_read_word(state, 555);   // Viterbi Layer B
-       if (lock & 0x01)
-               *stat |= FE_HAS_VITERBI;
+               lock = dib8000_read_word(state, 555); /* Viterbi Layer B */
+               if (lock & 0x01)
+                       *stat |= FE_HAS_VITERBI;
 
-       lock = dib8000_read_word(state, 556);   // Viterbi Layer C
-       if (lock & 0x01)
-               *stat |= FE_HAS_VITERBI;
+               lock = dib8000_read_word(state, 556); /* Viterbi Layer C */
+               if (lock & 0x01)
+                       *stat |= FE_HAS_VITERBI;
+       }
 
        return 0;
 }