diff options
author | Michael Hunold <devnull@localhost> | 2003-01-05 21:49:06 +0000 |
---|---|---|
committer | Michael Hunold <devnull@localhost> | 2003-01-05 21:49:06 +0000 |
commit | 23198c11bc5d221469b73ce5def50b7d4dbbff81 (patch) | |
tree | 3806b08353aec9686d90bbcfb227fb1fe4a61785 /linux/drivers/media/dvb | |
parent | a721eb6c53f0402661b3549ec99701c15714beca (diff) | |
download | mediapointer-dvb-s2-23198c11bc5d221469b73ce5def50b7d4dbbff81.tar.gz mediapointer-dvb-s2-23198c11bc5d221469b73ce5def50b7d4dbbff81.tar.bz2 |
After all, using the i2c irq wasn't a good idea. After long hours of
testing why the !#+?ยง"1 TS stream stops and "debi oops" messages appear,
I found out that this is caused by the i2c irq handler. Don't ask me
why, but returning to the old code solved this mystery. Apparently, the
additional i2c interrupts caused some timing problems or the saa7146
is simply too f*cked up.
I left the code in however, it works for the analog MXB driver, so the
extension should decide if it should be used.
Removed some additional debug messages, which were commented out anyway.
Diffstat (limited to 'linux/drivers/media/dvb')
-rw-r--r-- | linux/drivers/media/dvb/ttpci/av7110.c | 67 |
1 files changed, 27 insertions, 40 deletions
diff --git a/linux/drivers/media/dvb/ttpci/av7110.c b/linux/drivers/media/dvb/ttpci/av7110.c index 113e7d968..369542f6d 100644 --- a/linux/drivers/media/dvb/ttpci/av7110.c +++ b/linux/drivers/media/dvb/ttpci/av7110.c @@ -166,8 +166,6 @@ static int debiwrite(av7110_t *av7110, u32 config, struct saa7146_dev *dev = av7110->dev; u32 cmd; -// DEB_EE(("av7110: %p\n",av7110)); - if (count <= 0 || count > 32764) return -1; if (wait_for_debi_done(av7110) < 0) @@ -187,8 +185,6 @@ static u32 debiread(av7110_t *av7110, u32 config, int addr, int count) struct saa7146_dev *dev = av7110->dev; u32 result = 0; -// DEB_EE(("av7110: %p\n",av7110)); - if (count > 32764 || count <= 0) return 0; if (wait_for_debi_done(av7110) < 0) @@ -280,24 +276,18 @@ ARM_ResetMailBox(av7110_t *av7110) static inline void ARM_ClearMailBox(av7110_t *av7110) { - DEB_EE(("av7110: %p\n",av7110)); - iwdebi(av7110, DEBINOSWAP, IRQ_RX, 0, 2); } static inline void ARM_ClearIrq(av7110_t *av7110) { - DEB_EE(("av7110: %p\n",av7110)); - irdebi(av7110, DEBINOSWAP, IRQ_RX, 0, 2); } static void reset_arm(av7110_t *av7110) { - DEB_EE(("av7110: %p\n",av7110)); - saa7146_setgpio(av7110->dev, RESET_LINE, SAA7146_GPIO_OUTLO); /* Disable DEBI and GPIO irq */ @@ -356,7 +346,10 @@ static int arm_thread(void *data) lock_kernel(); #if 0 - daemonize(); + daemonize(); +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + reparent_to_init (); +#endif #else exit_mm(current); current->session=current->pgrp=1; @@ -880,13 +873,12 @@ void debiirq (unsigned long data) struct av7110_s *av7110 = (struct av7110_s*) data; int type=av7110->debitype; int handle=(type>>8)&0x1f; - - DEB_EE(("av7110: %p\n",av7110)); + +// DEB_EE(("av7110: %p\n",av7110)); print_time("debi"); - IER_DISABLE(av7110->dev, MASK_19); -// saa7146_write(av7110->dev, IER, -// saa7146_read(av7110->dev, IER) & ~MASK_19 ); + saa7146_write(av7110->dev, IER, + saa7146_read(av7110->dev, IER) & ~MASK_19 ); saa7146_write(av7110->dev, ISR, MASK_19 ); if (type==-1) { @@ -1063,6 +1055,7 @@ pes_play(void *dest, ring_buffer_t *buf, int dlen) return blen; } + static void gpioirq (unsigned long data) { @@ -1070,19 +1063,17 @@ void gpioirq (unsigned long data) u32 rxbuf, txbuf; int len; - DEB_EE(("av7110: %p\n",av7110)); + //printk("GPIO0 irq\n"); - if (av7110->debitype !=-1) { + if (av7110->debitype !=-1) printk("GPIO0 irq oops @ %ld, psr:0x%08x, ssr:0x%08x\n",jiffies,saa7146_read(av7110->dev,PSR),saa7146_read(av7110->dev,SSR)); - } - + spin_lock(&av7110->debilock); ARM_ClearIrq(av7110); - IER_DISABLE(av7110->dev, MASK_19); -// saa7146_write(av7110->dev, IER, -// saa7146_read(av7110->dev, IER) & ~MASK_19 ); + saa7146_write(av7110->dev, IER, + saa7146_read(av7110->dev, IER) & ~MASK_19 ); saa7146_write(av7110->dev, ISR, MASK_19 ); av7110->debitype = irdebi(av7110, DEBINOSWAP, IRQ_STATE, 0, 2); @@ -1095,7 +1086,7 @@ void gpioirq (unsigned long data) DEB_D(("GPIO0 irq %d %d\n", av7110->debitype, av7110->debilen)); print_time("gpio"); - DEB_D(("GPIO0 irq %02x\n", av7110->debitype&0xff)); + DEB_D(("GPIO0 irq %02x\n", av7110->debitype&0xff)); switch (av7110->debitype&0xff) { case DATA_TS_PLAY: @@ -1140,9 +1131,8 @@ void gpioirq (unsigned long data) iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2); iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2); wait_for_debi_done(av7110); - IER_ENABLE(av7110->dev, MASK_19); -// saa7146_write(av7110->dev, IER, -// saa7146_read(av7110->dev, IER) | MASK_19 ); + saa7146_write(av7110->dev, IER, + saa7146_read(av7110->dev, IER) | MASK_19 ); if (len<5) len=5; /* we want a real DEBI DMA */ iwdebi(av7110, DEBISWAB, DPRAM_BASE+txbuf, 0, (len+3)&~3); spin_unlock(&av7110->debilock); @@ -1174,13 +1164,12 @@ void gpioirq (unsigned long data) iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); break; } - DEB_D(("GPIO0 PES_PLAY len=%04x\n", len)); + DEB_D(("GPIO0 PES_PLAY len=%04x\n", len)); iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2); iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2); wait_for_debi_done(av7110); - IER_ENABLE(av7110->dev, MASK_19); -// saa7146_write(av7110->dev, IER, -// saa7146_read(av7110->dev, IER) | MASK_19 ); + saa7146_write(av7110->dev, IER, + saa7146_read(av7110->dev, IER) | MASK_19 ); iwdebi(av7110, DEBISWAB, DPRAM_BASE+txbuf, 0, (len+3)&~3); spin_unlock(&av7110->debilock); @@ -1206,9 +1195,8 @@ void gpioirq (unsigned long data) av7110->bmpp+=len; av7110->bmplen-=len; wait_for_debi_done(av7110); - IER_ENABLE(av7110->dev, MASK_19); -// saa7146_write(av7110->dev, IER, -// saa7146_read(av7110->dev, IER) | MASK_19 ); + saa7146_write(av7110->dev, IER, + saa7146_read(av7110->dev, IER) | MASK_19 ); if (len<5) len=5; /* we want a real DEBI DMA */ iwdebi(av7110, DEBISWAB, DPRAM_BASE+txbuf, 0, (len+3)&~3); spin_unlock(&av7110->debilock); @@ -1226,9 +1214,8 @@ void gpioirq (unsigned long data) case DATA_TS_RECORD: case DATA_PES_RECORD: wait_for_debi_done(av7110); - IER_ENABLE(av7110->dev, MASK_19); -// saa7146_write(av7110->dev, IER, -// saa7146_read(av7110->dev, IER) | MASK_19); + saa7146_write(av7110->dev, IER, + saa7146_read(av7110->dev, IER) | MASK_19); irdebi(av7110, DEBISWAB, DPRAM_BASE+rxbuf, 0, len); spin_unlock(&av7110->debilock); return; @@ -1239,9 +1226,8 @@ void gpioirq (unsigned long data) iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); break; } - IER_ENABLE(av7110->dev, MASK_19); -// saa7146_write(av7110->dev, IER, -// saa7146_read(av7110->dev, IER) | MASK_19); + saa7146_write(av7110->dev, IER, + saa7146_read(av7110->dev, IER) | MASK_19); irdebi(av7110, DEBISWAB, Reserved, 0, len); spin_unlock(&av7110->debilock); return; @@ -4500,6 +4486,7 @@ struct saa7146_ext_vv av7110_vv_data = { static struct saa7146_extension av7110_extension = { .name = "dvb\0", + .flags = 0, .devices = &sub_data[0], .module = THIS_MODULE, |