diff options
Diffstat (limited to 'v4l')
-rw-r--r-- | v4l/ChangeLog | 12 | ||||
-rw-r--r-- | v4l/lgdt3302.c | 35 |
2 files changed, 30 insertions, 17 deletions
diff --git a/v4l/ChangeLog b/v4l/ChangeLog index 526434fa1..202254079 100644 --- a/v4l/ChangeLog +++ b/v4l/ChangeLog @@ -1,3 +1,15 @@ +2005-07-06 21:44 mkrufky + * lgdt3302.c: + - Fix bug in lgdt3302_read_status to return correct + FE_HAS_SIGNAL and FS_HAS_CARRIER status. + + * msp3400.c, saa7134-cards.c, saa7134-i2c.c: + * tuner-simple.c, video-buf-dvb.c: + - Remove trailing whitespace. + + Signed-off-by: Mac Michaels <wmichaels1@earthlink.net> + Signed-off-by: Michael Krufky <mkrufky@m1k.net> + 2005-07-07 01:44 nshmyrev * tuner-simple.c: - Use 50 kHz step when tunning radio for most tuners. diff --git a/v4l/lgdt3302.c b/v4l/lgdt3302.c index 5b591e349..27c95be25 100644 --- a/v4l/lgdt3302.c +++ b/v4l/lgdt3302.c @@ -1,5 +1,5 @@ /* - * $Id: lgdt3302.c,v 1.13 2005/07/06 06:03:18 mkrufky Exp $ + * $Id: lgdt3302.c,v 1.14 2005/07/07 01:49:30 mkrufky Exp $ * * Support for LGDT3302 (DViCO FustionHDTV 3 Gold) - VSB/QAM * @@ -347,11 +347,28 @@ static int lgdt3302_read_status(struct dvb_frontend* fe, fe_status_t* status) * This is done in SwReset(); */ + /* AGC status register */ + i2c_selectreadbytes(state, AGC_STATUS, buf, 1); + dprintk("%s: AGC_STATUS = 0x%02x\n", __FUNCTION__, buf[0]); + if ((buf[0] & 0x0c) == 0x8){ + /* Test signal does not exist flag */ + /* as well as the AGC lock flag. */ + *status |= FE_HAS_SIGNAL; + } else { + /* Without a signal all other status bits are meaningless */ + return 0; + } + /* signal status */ i2c_selectreadbytes(state, TOP_CONTROL, buf, sizeof(buf)); dprintk("%s: TOP_CONTROL = 0x%02x, IRO_MASK = 0x%02x, IRQ_STATUS = 0x%02x\n", __FUNCTION__, buf[0], buf[1], buf[2]); + +#if 0 + /* Alternative method to check for a signal */ + /* using the SNR good/bad interrupts. */ if ((buf[2] & 0x30) == 0x10) *status |= FE_HAS_SIGNAL; +#endif /* sync status */ if ((buf[2] & 0x03) == 0x01) { @@ -364,17 +381,6 @@ static int lgdt3302_read_status(struct dvb_frontend* fe, fe_status_t* status) *status |= FE_HAS_VITERBI; } -#if 0 - /* Alternative method to check for a signal */ - /* AGC status register */ - i2c_selectreadbytes(state, AGC_STATUS, buf, 1); - dprintk("%s: AGC_STATUS = 0x%02x\n", __FUNCTION__, buf[0]); - if ((buf[0] & 0x0c) == 0x80) /* Test signal does not exist flag */ - /* Test AGC lock flag */ - *status |= FE_HAS_SIGNAL; - else - return 0; - /* Carrier Recovery Lock Status Register */ i2c_selectreadbytes(state, CARRIER_LOCK, buf, 1); dprintk("%s: CARRIER_LOCK = 0x%02x\n", __FUNCTION__, buf[0]); @@ -384,19 +390,14 @@ static int lgdt3302_read_status(struct dvb_frontend* fe, fe_status_t* status) /* Need to undestand why there are 3 lock levels here */ if ((buf[0] & 0x07) == 0x07) *status |= FE_HAS_CARRIER; - else - return 0; break; case VSB_8: if ((buf[0] & 0x80) == 0x80) *status |= FE_HAS_CARRIER; - else - return 0; break; default: printk("KERN_WARNING lgdt3302: %s: Modulation set to unsupported value\n", __FUNCTION__); } -#endif return 0; } |