Mailing List archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[linux-dvb] [PATCH] Alternative fix for budget stream problems
Last night I tried another approach to fixing the DMA issues. Instead of
dealing with the awkward transition between the odd and even fields in
the middle of the buffer, I just avoid the problem by using the whole
buffer for both fields. This works fine for me on both the DVB &
dvb-kernel drivers.
In case you are wondering, I also tried the simpler case of just using
just one of the fields, but that only worked 50% of the time.
Please try one of the two patches attached for the DVB & dvb-kernel
drivers. These patches are against the CVS of a few days ago and _should
not_ be applied on top of my previous patches.
Jon
diff -Nurw dvb-kernel-cvs/linux/drivers/media/dvb/ttpci/budget-core.c dvb-kernel-field/linux/drivers/media/dvb/ttpci/budget-core.c
--- dvb-kernel-cvs/linux/drivers/media/dvb/ttpci/budget-core.c 2003-06-26 18:42:36.000000000 +0100
+++ dvb-kernel-field/linux/drivers/media/dvb/ttpci/budget-core.c 2003-09-01 20:34:37.000000000 +0100
@@ -46,12 +46,12 @@
mdelay(10);
saa7146_write(dev, BASE_ODD3, 0);
- saa7146_write(dev, BASE_EVEN3, TS_WIDTH*TS_HEIGHT/2);
+ saa7146_write(dev, BASE_EVEN3, 0);
saa7146_write(dev, PROT_ADDR3, TS_WIDTH*TS_HEIGHT);
saa7146_write(dev, BASE_PAGE3, budget->pt.dma |ME1|0x90);
saa7146_write(dev, PITCH3, TS_WIDTH);
- saa7146_write(dev, NUM_LINE_BYTE3, ((TS_HEIGHT/2)<<16)|TS_WIDTH);
+ saa7146_write(dev, NUM_LINE_BYTE3, (TS_HEIGHT<<16)|TS_WIDTH);
saa7146_write(dev, MC2, (MASK_04 | MASK_20));
saa7146_write(dev, MC1, (MASK_04 | MASK_20)); // DMA3 on
diff -urw cvs/DVB/driver/av7110/av7110.c DVB/driver/av7110/av7110.c
--- cvs/DVB/driver/av7110/av7110.c 2003-08-28 14:05:53.000000000 +0100
+++ DVB/driver/av7110/av7110.c 2003-09-01 21:17:47.000000000 +0100
@@ -748,12 +748,12 @@
mdelay(10);
saa7146_write(saa->mem, BASE_ODD3, 0);
- saa7146_write(saa->mem, BASE_EVEN3, TS_BUFLEN/2);
+ saa7146_write(saa->mem, BASE_EVEN3, 0);
saa7146_write(saa->mem, PROT_ADDR3, TS_BUFLEN);
saa7146_write(saa->mem, BASE_PAGE3, virt_to_bus(saa->page_table[0])|ME1|0x90);
saa7146_write(saa->mem, PITCH3, TS_WIDTH);
- saa7146_write(saa->mem, NUM_LINE_BYTE3, ((TS_HEIGHT/2)<<16)|TS_WIDTH);
+ saa7146_write(saa->mem, NUM_LINE_BYTE3, (TS_HEIGHT<<16)|TS_WIDTH);
saa7146_write(saa->mem, MC2, (MASK_04 | MASK_20));
// VPE
@@ -924,6 +924,8 @@
if (dmapos >= TS_BUFLEN)
return;
+ if (dmapos == av7110->ttbp)
+ return;
if (dmapos > av7110->ttbp) {
mem+=av7110->ttbp;
Only in DVB/driver/av7110: av7110.c.~1.61.~
Home |
Main Index |
Thread Index