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