Index: driver/frontends/ves1820.c =================================================================== RCS file: /cvs/linuxtv/DVB/driver/frontends/ves1820.c,v retrieving revision 1.17 diff -u -r1.17 ves1820.c --- driver/frontends/ves1820.c 13 May 2003 12:55:17 -0000 1.17 +++ driver/frontends/ves1820.c 15 May 2003 22:46:45 -0000 @@ -307,6 +307,21 @@ return 0; } +// This does not work. For some reason, the registers 0x0a..0x0c +// always return 0x13 when read. +static +u32 ves1820_get_symbolrate (struct dvb_frontend *fe) +{ + u8 NDEC = ves1820_readreg (fe, 0x03) >> 6; + u64 BDR = ves1820_readreg (fe, 0x0a) + | (ves1820_readreg (fe, 0x0b) << 8) + | ((ves1820_readreg (fe, 0x0c) & 0x3f) << 16); + + dprintk ("BDR: %d, ndec: %d\n", (int)BDR, (int)NDEC); + + return BDR * XIN >> 24 >> NDEC; +} + static int ves1820_set_parameters (struct dvb_frontend *fe, @@ -408,15 +423,26 @@ return ves1820_set_parameters (fe, arg); case FE_GET_FRONTEND: - /* XXX FIXME: implement! */ -/* - struct frontend *front = (struct frontend *)arg; - - front->afc=(int)((char)(readreg(client,0x19))); - front->afc=(front->afc*(int)(front->param.u.qam.SymbolRate/8))/128; -*/ + { + struct dvb_frontend_parameters *p = (struct dvb_frontend_parameters *)arg; + u8 reg0 = GET_REG0(fe->data); + s8 afc = ves1820_readreg(fe, 0x19); + printk ("VES1820: AFC %d\n", afc); + + p->inversion = reg0 & 0x20 ? INVERSION_OFF : INVERSION_ON; + // Does not work. + // p->u.qam.symbol_rate = ves1820_get_symbolrate (fe); + p->u.qam.modulation = ((reg0 >> 2) & 7) + QAM_16; + + // ? + 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; break; - + } case FE_SLEEP: ves1820_writereg (fe, 0x1b, 0x02); /* pdown ADC */ ves1820_writereg (fe, 0x00, 0x80); /* standby */ @@ -550,3 +576,7 @@ MODULE_DESCRIPTION("VES1820 DVB-C frontend driver"); MODULE_AUTHOR("Ralph Metzler, Holger Waechtler"); MODULE_LICENSE("GPL"); + +// Local variables: +// c-basic-offset: 8 +// End: