aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Toth <stoth@hauppauge.com>2006-01-09 15:25:22 -0200
committerMauro Carvalho Chehab <mchehab@brturbo.com.br>2006-01-09 15:25:22 -0200
commit0144f31466f0b7f1a8b21b470bfeb93c174a2006 (patch)
treeb46367c45eaf577ae10ef9d10c93ff85504a7f2a
parent2c3f11b20fc6c41b4d3f64f301f525e35f18b6bc (diff)
downloadlinux-0144f31466f0b7f1a8b21b470bfeb93c174a2006.tar.gz
V4L/DVB (3130): cx24123: cleanup timout handling
- Cleanup timeout handling in cx24123_pll_writereg(), and use a reasonable value for the timeout. Signed-off-by: Steven Toth <stoth@hauppauge.com> Signed-off-by: Johannes Stezenbach <js@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@brturbo.com.br>
-rw-r--r--drivers/media/dvb/frontends/cx24123.c39
1 files changed, 16 insertions, 23 deletions
diff --git a/drivers/media/dvb/frontends/cx24123.c b/drivers/media/dvb/frontends/cx24123.c
index 3e230fc59cac3d..d661c6f9cbe527 100644
--- a/drivers/media/dvb/frontends/cx24123.c
+++ b/drivers/media/dvb/frontends/cx24123.c
@@ -487,8 +487,7 @@ static int cx24123_pll_calculate(struct dvb_frontend* fe, struct dvb_frontend_pa
static int cx24123_pll_writereg(struct dvb_frontend* fe, struct dvb_frontend_parameters *p, u32 data)
{
struct cx24123_state *state = fe->demodulator_priv;
-
- u8 timeout = 0;
+ unsigned long timeout;
/* align the 21 bytes into to bit23 boundary */
data = data << 3;
@@ -496,43 +495,37 @@ static int cx24123_pll_writereg(struct dvb_frontend* fe, struct dvb_frontend_par
/* Reset the demod pll word length to 0x15 bits */
cx24123_writereg(state, 0x21, 0x15);
- timeout = 0;
/* write the msb 8 bits, wait for the send to be completed */
+ timeout = jiffies + msecs_to_jiffies(40);
cx24123_writereg(state, 0x22, (data >> 16) & 0xff);
- while ( ( cx24123_readreg(state, 0x20) & 0x40 ) == 0 )
- {
- /* Safety - No reason why the write should not complete, and we never get here, avoid hang */
- if (timeout++ >= 4) {
- printk("%s: demodulator is no longer responding, aborting.\n",__FUNCTION__);
+ while ((cx24123_readreg(state, 0x20) & 0x40) == 0) {
+ if (time_after(jiffies, timeout)) {
+ printk("%s: demodulator is not responding, possibly hung, aborting.\n", __FUNCTION__);
return -EREMOTEIO;
}
- msleep(500);
+ msleep(10);
}
- timeout = 0;
/* send another 8 bytes, wait for the send to be completed */
+ timeout = jiffies + msecs_to_jiffies(40);
cx24123_writereg(state, 0x22, (data>>8) & 0xff );
- while ( (cx24123_readreg(state, 0x20) & 0x40 ) == 0 )
- {
- /* Safety - No reason why the write should not complete, and we never get here, avoid hang */
- if (timeout++ >= 4) {
- printk("%s: demodulator is not responding, possibly hung, aborting.\n",__FUNCTION__);
+ while ((cx24123_readreg(state, 0x20) & 0x40) == 0) {
+ if (time_after(jiffies, timeout)) {
+ printk("%s: demodulator is not responding, possibly hung, aborting.\n", __FUNCTION__);
return -EREMOTEIO;
}
- msleep(500);
+ msleep(10);
}
- timeout = 0;
/* send the lower 5 bits of this byte, padded with 3 LBB, wait for the send to be completed */
+ timeout = jiffies + msecs_to_jiffies(40);
cx24123_writereg(state, 0x22, (data) & 0xff );
- while ((cx24123_readreg(state, 0x20) & 0x80))
- {
- /* Safety - No reason why the write should not complete, and we never get here, avoid hang */
- if (timeout++ >= 4) {
- printk("%s: demodulator is not responding, possibly hung, aborting.\n",__FUNCTION__);
+ while ((cx24123_readreg(state, 0x20) & 0x80)) {
+ if (time_after(jiffies, timeout)) {
+ printk("%s: demodulator is not responding, possibly hung, aborting.\n", __FUNCTION__);
return -EREMOTEIO;
}
- msleep(500);
+ msleep(10);
}
/* Trigger the demod to configure the tuner */