diff options
-rw-r--r-- | linux/drivers/media/dvb/frontends/ves1820.c | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/linux/drivers/media/dvb/frontends/ves1820.c b/linux/drivers/media/dvb/frontends/ves1820.c index 33e709626..8bd249f28 100644 --- a/linux/drivers/media/dvb/frontends/ves1820.c +++ b/linux/drivers/media/dvb/frontends/ves1820.c @@ -380,7 +380,7 @@ static int ves1820_ioctl (struct dvb_frontend *fe, unsigned int cmd, void *arg) sync = ves1820_readreg (fe, 0x11); - if (sync & 2) + if (sync & 1) *status |= FE_HAS_SIGNAL; if (sync & 2) @@ -439,14 +439,14 @@ static int ves1820_ioctl (struct dvb_frontend *fe, unsigned int cmd, void *arg) int sync; s8 afc = 0; - sync = ves1820_readreg (fe, 0x11); - if (sync & 2) { + sync = ves1820_readreg(fe, 0x11); + afc = ves1820_readreg(fe, 0x19); + if (verbose) { /* AFC only valid when carrier has been recovered */ - afc = ves1820_readreg(fe, 0x19); - if (verbose) - printk ("DVB: VES1820(%d): AFC (%d) %dHz\n", - fe->i2c->adapter->num, afc, - -((s32)(p->u.qam.symbol_rate >> 3) * afc >> 7)); + printk(sync & 2 ? "DVB: VES1820(%d): AFC (%d) %dHz\n" : + "DVB: VES1820(%d): [AFC (%d) %dHz]\n", + fe->i2c->adapter->num, afc, + -((s32)p->u.qam.symbol_rate * afc) >> 10); } p->inversion = HAS_INVERSION(reg0) ? INVERSION_ON : INVERSION_OFF; @@ -455,9 +455,8 @@ static int ves1820_ioctl (struct dvb_frontend *fe, unsigned int cmd, void *arg) p->u.qam.fec_inner = FEC_NONE; p->frequency = ((p->frequency + 31250) / 62500) * 62500; - /* To prevent overflow, shift symbol rate first a - couple of bits. */ - p->frequency -= (s32)(p->u.qam.symbol_rate >> 3) * afc >> 7; + if (sync & 2) + p->frequency -= ((s32)p->u.qam.symbol_rate * afc) >> 10; break; } case FE_SLEEP: |