summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--linux/drivers/media/dvb/frontends/ves1820.c21
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: