diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-02-21 11:10:30 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-02-21 11:10:30 -0800 |
commit | e695e10bc996d6f83df7d85f1011c8d00573f68b (patch) | |
tree | 3d0ba107ea8fe7d0090e3cfd5e36cdb4abcaab99 /drivers/media/dvb/frontends/stv0297.c | |
parent | 3a5f10e3708e00c406f154bae412652ec3eb2b48 (diff) | |
parent | f6982d59480953a8f5a84c237a9dabff39f788ce (diff) | |
download | kernel_samsung_aries-e695e10bc996d6f83df7d85f1011c8d00573f68b.zip kernel_samsung_aries-e695e10bc996d6f83df7d85f1011c8d00573f68b.tar.gz kernel_samsung_aries-e695e10bc996d6f83df7d85f1011c8d00573f68b.tar.bz2 |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb
* 'master' of master.kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb: (196 commits)
V4L/DVB (5253): Qt1010: whitespace / 80 column cleanups
V4L/DVB (5252): Qt1010: use ARRAY_SIZE macro when appropriate
V4L/DVB (5251): Qt1010: fix compiler warning
V4L/DVB (5249): Fix compiler warning in vivi.c
V4L/DVB (5247): Stv0297: Enable BER/UNC counting
V4L/DVB (5246): Budget-ci: IR handling fixups
V4L/DVB (5245): Dvb-ttpci: use i2c gate ctrl from stv0297 frontend driver
V4L/DVB (5244): Dvbdev: fix illegal re-usage of fileoperations struct
V4L/DVB (5178): Avoid race when deregistering the IR control for dvb-usb
V4L/DVB (5240): Qt1010: use i2c_gate_ctrl where appropriate
V4L/DVB (5239): Whitespace / 80-column cleanups
V4L/DVB (5238): Kconfig: qt1010 should be selected by gl861 and au6610
V4L/DVB (5237): Dvb: add new qt1010 tuner module
V4L/DVB (5236): Initial support for Sigmatek DVB-110 DVB-T
V4L/DVB (5235): Gl861: use parallel_ts
V4L/DVB (5234): Gl861: remove unneeded declaration
V4L/DVB (5233): Gl861: correct address of the bulk endpoint
V4L/DVB (5232): Gl861: correct oops when loading module
V4L/DVB (5231): Gl861: whitespace cleanups
V4L/DVB (5230): Gl861: remove NULL entry from gl861_properties
...
Diffstat (limited to 'drivers/media/dvb/frontends/stv0297.c')
-rw-r--r-- | drivers/media/dvb/frontends/stv0297.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/drivers/media/dvb/frontends/stv0297.c b/drivers/media/dvb/frontends/stv0297.c index 1ca6424..9a34397 100644 --- a/drivers/media/dvb/frontends/stv0297.c +++ b/drivers/media/dvb/frontends/stv0297.c @@ -35,6 +35,7 @@ struct stv0297_state { const struct stv0297_config *config; struct dvb_frontend frontend; + unsigned long last_ber; unsigned long base_freq; }; @@ -310,6 +311,8 @@ static int stv0297_init(struct dvb_frontend *fe) stv0297_writereg(state, state->config->inittab[i], state->config->inittab[i+1]); msleep(200); + state->last_ber = 0; + return 0; } @@ -340,11 +343,13 @@ static int stv0297_read_ber(struct dvb_frontend *fe, u32 * ber) struct stv0297_state *state = fe->demodulator_priv; u8 BER[3]; - stv0297_writereg(state, 0xA0, 0x80); // Start Counting bit errors for 4096 Bytes - mdelay(25); // Hopefully got 4096 Bytes stv0297_readregs(state, 0xA0, BER, 3); - mdelay(25); - *ber = (BER[2] << 8 | BER[1]) / (8 * 4096); + if (!(BER[0] & 0x80)) { + state->last_ber = BER[2] << 8 | BER[1]; + stv0297_writereg_mask(state, 0xA0, 0x80, 0x80); + } + + *ber = state->last_ber; return 0; } @@ -376,9 +381,14 @@ static int stv0297_read_ucblocks(struct dvb_frontend *fe, u32 * ucblocks) { struct stv0297_state *state = fe->demodulator_priv; + stv0297_writereg_mask(state, 0xDF, 0x03, 0x03); /* freeze the counters */ + *ucblocks = (stv0297_readreg(state, 0xD5) << 8) | stv0297_readreg(state, 0xD4); + stv0297_writereg_mask(state, 0xDF, 0x03, 0x02); /* clear the counters */ + stv0297_writereg_mask(state, 0xDF, 0x03, 0x01); /* re-enable the counters */ + return 0; } @@ -648,6 +658,7 @@ struct dvb_frontend *stv0297_attach(const struct stv0297_config *config, /* setup the state */ state->config = config; state->i2c = i2c; + state->last_ber = 0; state->base_freq = 0; /* check if the demod is there */ |