HI I hand-modified the patch for your hardware modification to work for latest CVS from convergence. I tried it and I see that after the patch, ts data doesn't flow (because I don't have the HW modification)
Can you check does it work for you? (also apply my interrupt stability patch)
Only in DVB/apps/av7110_loadkeys: av7110_loadkeys Only in DVB/apps/av7110_loadkeys: av7110_loadkeys.o Only in DVB/apps/av7110_loadkeys: evtest Only in DVB/apps/av7110_loadkeys: evtest.o Only in DVB/apps/av7110_loadkeys: input_keynames.h Only in DVB/apps/mpegtools: .depend Only in DVB/apps/mpegtools: analyze Only in DVB/apps/mpegtools: bits.o Only in DVB/apps/mpegtools: buffer.o Only in DVB/apps/mpegtools: change_aspect_16_9 Only in DVB/apps/mpegtools: change_aspect_1_1 Only in DVB/apps/mpegtools: change_aspect_221_1 Only in DVB/apps/mpegtools: change_aspect_4_3 Only in DVB/apps/mpegtools: cpptools.o Only in DVB/apps/mpegtools: ctools.o Only in DVB/apps/mpegtools: cut_mpg Only in DVB/apps/mpegtools: domplex.o Only in DVB/apps/mpegtools: es_demux Only in DVB/apps/mpegtools: extract_pes Only in DVB/apps/mpegtools: extract_pes_payload Only in DVB/apps/mpegtools: get_http Only in DVB/apps/mpegtools: inits.o Only in DVB/apps/mpegtools: inptstrm.o Only in DVB/apps/mpegtools: insert_pat_pmt Only in DVB/apps/mpegtools: interact.o Only in DVB/apps/mpegtools: main.o Only in DVB/apps/mpegtools: mpegtools Only in DVB/apps/mpegtools: mplex Only in DVB/apps/mpegtools: mplex.o Only in DVB/apps/mpegtools: multplex.o Only in DVB/apps/mpegtools: pes2aud Only in DVB/apps/mpegtools: pes2aud_es Only in DVB/apps/mpegtools: pes2ts Only in DVB/apps/mpegtools: pes2ts2 Only in DVB/apps/mpegtools: pes2vid Only in DVB/apps/mpegtools: pes2vid_es Only in DVB/apps/mpegtools: pes_demux Only in DVB/apps/mpegtools: pes_repack Only in DVB/apps/mpegtools: pesplot Only in DVB/apps/mpegtools: ps2vid Only in DVB/apps/mpegtools: remux Only in DVB/apps/mpegtools: remux.o Only in DVB/apps/mpegtools: ringbuffy.o Only in DVB/apps/mpegtools: split_mpg Only in DVB/apps/mpegtools: streamtype Only in DVB/apps/mpegtools: systems.o Only in DVB/apps/mpegtools: timecode.o Only in DVB/apps/mpegtools: transform.o Only in DVB/apps/mpegtools: ts2es Only in DVB/apps/mpegtools: ts2pes Only in DVB/apps/mpegtools: ts2ps Only in DVB/apps/mpegtools: ts_demux Only in DVB/apps/mpegtools: ts_es_demux Only in DVB/apps/mpegtools: tspids Only in DVB/apps/scan: .depend Only in DVB/apps/scan: diseqc.o Only in DVB/apps/scan: dump.o Only in DVB/apps/scan: scan Only in DVB/apps/scan: scan.o Only in DVB/apps/szap: .depend Only in DVB/apps/szap: czap Only in DVB/apps/szap: czap.o Only in DVB/apps/szap: szap Only in DVB/apps/szap: szap.o Only in DVB/apps/szap: tzap Only in DVB/apps/szap: tzap.o Only in DVB/apps/test: diseqc Only in DVB/apps/test: hex_dump.o Only in DVB/apps/test: sendburst Only in DVB/apps/test: set22k Only in DVB/apps/test: setpid Only in DVB/apps/test: setvoltage Only in DVB/apps/test: test_av Only in DVB/apps/test: test_pes Only in DVB/apps/test: test_sec_ne Only in DVB/apps/test: test_sections Only in DVB/apps/test: test_stillimage Only in DVB/apps/test: test_tt Only in DVB/apps/test: video Only in DVB/driver: .compat.o.flags Only in DVB/driver: .dmxdev.o.flags Only in DVB/driver: .dvb_demux.o.flags Only in DVB/driver: .dvb_filter.o.flags Only in DVB/driver: .dvb_frontend.o.flags Only in DVB/driver: .dvb_i2c.o.flags Only in DVB/driver: .dvb_ksyms.o.flags Only in DVB/driver: .dvb_net.o.flags Only in DVB/driver: .dvbdev.o.flags Only in DVB/driver/av7110: .av7110.o.flags Only in DVB/driver/av7110: .av7110_ir.o.flags Only in DVB/driver/av7110: .saa7146_core.o.flags Only in DVB/driver/av7110: .saa7146_v4l.o.flags Only in DVB/driver/av7110: av7110.d Only in DVB/driver/av7110: av7110.o Only in DVB/driver/av7110: av7110_firm.h Only in DVB/driver/av7110: av7110_ir.d Only in DVB/driver/av7110: av7110_ir.o Only in DVB/driver/av7110: dvb-ttpci.o Only in DVB/driver/av7110: fdump diff -rup /home/loader/src/DVB/driver/av7110/saa7146_core.c DVB/driver/av7110/saa7146_core.c --- /home/loader/src/DVB/driver/av7110/saa7146_core.c Tue Nov 26 22:00:04 2002 +++ DVB/driver/av7110/saa7146_core.c Wed Jan 1 18:38:58 2003 @@ -418,12 +418,14 @@ static void saa7146_irq(int irq, void *d /* read out the primary status register */ isr = saa7146_read(saa->mem, ISR); - /* clear all IRQs */ - saa7146_write(saa->mem, ISR, isr); /* is anything to do? */ if ( 0 == isr ) + { + /* clear all IRQs */ + saa7146_write(saa->mem, ISR, isr); return; + } dprintk("%s: irq-call: isr:0x%08x\n",saa->name,isr); @@ -434,6 +436,8 @@ static void saa7146_irq(int irq, void *d saa7146_ext[i]->irq_handler(saa, isr, saa->data[i]); //saa7146_write(saa->mem, ISR, saa7146_ext[i]->handles_irqs); } + /* clear all IRQs */ + saa7146_write(saa->mem, ISR, isr); //printk(KERN_ERR "%s: unhandled interrupt: 0x%08x\n", saa->name, isr); Only in DVB/driver/av7110: saa7146_core.c~ Only in DVB/driver/av7110: saa7146_core.d Only in DVB/driver/av7110: saa7146_core.o Only in DVB/driver/av7110: saa7146_v4l.d Only in DVB/driver/av7110: saa7146_v4l.o Only in DVB/driver: compat.d Only in DVB/driver: compat.o Only in DVB/driver: dmxdev.d Only in DVB/driver: dmxdev.o Only in DVB/driver: dvb-core.o Only in DVB/driver: dvb_demux.d Only in DVB/driver: dvb_demux.o Only in DVB/driver: dvb_filter.d Only in DVB/driver: dvb_filter.o Only in DVB/driver: dvb_frontend.d Only in DVB/driver: dvb_frontend.o Only in DVB/driver: dvb_i2c.d Only in DVB/driver: dvb_i2c.o Only in DVB/driver: dvb_ksyms.d Only in DVB/driver: dvb_ksyms.o Only in DVB/driver: dvb_net.d Only in DVB/driver: dvb_net.o Only in DVB/driver: dvbdev.d Only in DVB/driver: dvbdev.o Only in DVB/driver/frontends: .alps_bsru6.o.flags Only in DVB/driver/frontends: .alps_bsrv2.o.flags Only in DVB/driver/frontends: .alps_tdlb7.o.flags Only in DVB/driver/frontends: .alps_tdmb7.o.flags Only in DVB/driver/frontends: .grundig_29504-401.o.flags Only in DVB/driver/frontends: .grundig_29504-491.o.flags Only in DVB/driver/frontends: .ves1820.o.flags Only in DVB/driver/frontends: alps_bsru6.d Only in DVB/driver/frontends: alps_bsru6.o Only in DVB/driver/frontends: alps_bsrv2.d Only in DVB/driver/frontends: alps_bsrv2.o Only in DVB/driver/frontends: alps_tdlb7.d Only in DVB/driver/frontends: alps_tdlb7.o Only in DVB/driver/frontends: alps_tdmb7.d Only in DVB/driver/frontends: alps_tdmb7.o Only in DVB/driver/frontends: grundig_29504-401.d Only in DVB/driver/frontends: grundig_29504-401.o Only in DVB/driver/frontends: grundig_29504-491.d Only in DVB/driver/frontends: grundig_29504-491.o Only in DVB/driver/frontends: ves1820.d Only in DVB/driver/frontends: ves1820.o Only in DVB/libdvb: DVB.o Only in DVB/libdvb: OSD.o Only in DVB/libdvb: conv Only in DVB/libdvb: devices.o Only in DVB/libdvb: libdvb.a Only in DVB/libdvb: merge_dvb Only in DVB/libdvb: newtest
Only in DVB/apps/av7110_loadkeys: av7110_loadkeys Only in DVB/apps/av7110_loadkeys: av7110_loadkeys.o Only in DVB/apps/av7110_loadkeys: evtest Only in DVB/apps/av7110_loadkeys: evtest.o Only in DVB/apps/av7110_loadkeys: input_keynames.h Only in DVB/apps/mpegtools: .depend Only in DVB/apps/mpegtools: analyze Only in DVB/apps/mpegtools: bits.o Only in DVB/apps/mpegtools: buffer.o Only in DVB/apps/mpegtools: change_aspect_16_9 Only in DVB/apps/mpegtools: change_aspect_1_1 Only in DVB/apps/mpegtools: change_aspect_221_1 Only in DVB/apps/mpegtools: change_aspect_4_3 Only in DVB/apps/mpegtools: cpptools.o Only in DVB/apps/mpegtools: ctools.o Only in DVB/apps/mpegtools: cut_mpg Only in DVB/apps/mpegtools: domplex.o Only in DVB/apps/mpegtools: es_demux Only in DVB/apps/mpegtools: extract_pes Only in DVB/apps/mpegtools: extract_pes_payload Only in DVB/apps/mpegtools: get_http Only in DVB/apps/mpegtools: inits.o Only in DVB/apps/mpegtools: inptstrm.o Only in DVB/apps/mpegtools: insert_pat_pmt Only in DVB/apps/mpegtools: interact.o Only in DVB/apps/mpegtools: main.o Only in DVB/apps/mpegtools: mpegtools Only in DVB/apps/mpegtools: mplex Only in DVB/apps/mpegtools: mplex.o Only in DVB/apps/mpegtools: multplex.o Only in DVB/apps/mpegtools: pes2aud Only in DVB/apps/mpegtools: pes2aud_es Only in DVB/apps/mpegtools: pes2ts Only in DVB/apps/mpegtools: pes2ts2 Only in DVB/apps/mpegtools: pes2vid Only in DVB/apps/mpegtools: pes2vid_es Only in DVB/apps/mpegtools: pes_demux Only in DVB/apps/mpegtools: pes_repack Only in DVB/apps/mpegtools: pesplot Only in DVB/apps/mpegtools: ps2vid Only in DVB/apps/mpegtools: remux Only in DVB/apps/mpegtools: remux.o Only in DVB/apps/mpegtools: ringbuffy.o Only in DVB/apps/mpegtools: split_mpg Only in DVB/apps/mpegtools: streamtype Only in DVB/apps/mpegtools: systems.o Only in DVB/apps/mpegtools: timecode.o Only in DVB/apps/mpegtools: transform.o Only in DVB/apps/mpegtools: ts2es Only in DVB/apps/mpegtools: ts2pes Only in DVB/apps/mpegtools: ts2ps Only in DVB/apps/mpegtools: ts_demux Only in DVB/apps/mpegtools: ts_es_demux Only in DVB/apps/mpegtools: tspids Only in DVB/apps/scan: .depend Only in DVB/apps/scan: diseqc.o Only in DVB/apps/scan: dump.o Only in DVB/apps/scan: scan Only in DVB/apps/scan: scan.o Only in DVB/apps/szap: .depend Only in DVB/apps/szap: czap Only in DVB/apps/szap: czap.o Only in DVB/apps/szap: szap Only in DVB/apps/szap: szap.o Only in DVB/apps/szap: tzap Only in DVB/apps/szap: tzap.o Only in DVB/apps/test: diseqc Only in DVB/apps/test: hex_dump.o Only in DVB/apps/test: sendburst Only in DVB/apps/test: set22k Only in DVB/apps/test: setpid Only in DVB/apps/test: setvoltage Only in DVB/apps/test: test_av Only in DVB/apps/test: test_pes Only in DVB/apps/test: test_sec_ne Only in DVB/apps/test: test_sections Only in DVB/apps/test: test_stillimage Only in DVB/apps/test: test_tt Only in DVB/apps/test: video Only in DVB/driver: .compat.o.flags Only in DVB/driver: .dmxdev.o.flags Only in DVB/driver: .dvb_demux.o.flags Only in DVB/driver: .dvb_filter.o.flags Only in DVB/driver: .dvb_frontend.o.flags Only in DVB/driver: .dvb_i2c.o.flags Only in DVB/driver: .dvb_ksyms.o.flags Only in DVB/driver: .dvb_net.o.flags Only in DVB/driver: .dvbdev.o.flags Only in DVB/driver/av7110: .av7110.o.flags Only in DVB/driver/av7110: .av7110_ir.o.flags Only in DVB/driver/av7110: .saa7146_core.o.flags Only in DVB/driver/av7110: .saa7146_v4l.o.flags diff -rpu /home/loader/src/DVB/driver/av7110/Makefile DVB/driver/av7110/Makefile --- /home/loader/src/DVB/driver/av7110/Makefile Sun Nov 17 00:36:24 2002 +++ DVB/driver/av7110/Makefile Wed Jan 1 17:08:07 2003 @@ -70,7 +70,7 @@ clean: insmod: insmod input; \ insmod evdev; \ - insmod dvb-ttpci.o; + insmod dvb-ttpci.o patch=1; rmmod: rmmod dvb-ttpci; \ diff -rpu /home/loader/src/DVB/driver/av7110/av7110.c DVB/driver/av7110/av7110.c --- /home/loader/src/DVB/driver/av7110/av7110.c Mon Dec 30 15:48:57 2002 +++ DVB/driver/av7110/av7110.c Wed Jan 1 17:35:57 2003 @@ -101,6 +101,7 @@ static int av7110_debug = 0; static int vidmode=CVBS_RGB_OUT; static int pids_off; static int adac=DVB_ADAC_TI; +static u32 patch=0; #define saacomm(x,y) av7110->saa->command(av7110->saa->i2c_bus, (x), (y)) @@ -684,10 +685,18 @@ TTBStop(av7110_t *av7110) { if (--av7110->feeding) return av7110->feeding; - saa7146_write(av7110->saa_mem, MC1, MASK_20); // DMA3 off +/* +** In the following comments, the notation "(rHH pNN)" refers the usage of the +** SAA7146 register "HH", described in the datasheet page "NN". +*/ + saa7146_write(av7110->saa_mem, MC1, MASK_20); // DMA3 off (rFC +p33) saa7146_write(av7110->saa_mem, MC1, MASK_28); // RPS0 off +/* The RPS1 can be left running (DMA_fetch: ~300 words/sec) +** saa7146_write(dvb->saa_mem, MC1, MASK_29); // RPS1 off +*/ // Disable Video_address_Protection_Error interrupt (rDC +p50) saa7146_write(av7110->saa_mem, IER, saa7146_read(av7110->saa_mem, IER) & ~MASK_10 ); + // Disable Field ID port B interrupt saa7146_write(av7110->saa_mem, IER, saa7146_read(av7110->saa_mem, IER)& ~MASK_07); return 0; @@ -699,41 +708,112 @@ static int TTBStart(av7110_t *av7110) { struct saa7146 *saa=av7110->saa; + int cnt = 0; //RDA //printk ("function : %s\n", __FUNCTION__); if (av7110->feeding) return ++av7110->feeding; - saa7146_write(saa->mem, MC1, MASK_20); // DMA3 off + saa7146_write(saa->mem, MC1, MASK_20); // DMA3 off (rFC +p33) memset(saa->grabbing, 0x00, TS_HEIGHT*TS_WIDTH); + // Burst3: 128 Dwords (r48 +p31) + // Thresh3: 4 empty Dwords saa7146_write(saa->mem, PCI_BT_V1, 0x001c0000); av7110->tsf=0; av7110->ttbp=0; + // LLC_A: Set to input (r50 +p84) + // SIO_A: HS_A and VS_A are input + // SYNC_A: Ha at rising edge of HS; Va at rising edge of VS + // Fa=HS*VS-falling, forced toggle + // FIDESA: No interrupt condition + // LLC_B: Set to input + // SIO_B: HS_B and VS_B are input + // SYNC_B: Hb at rising edge of HS; Vb at rising & falling edge of Frame +Sync at + // the VS pin; Fb=direct FS + // FIDESB: Falling edge is interrupt condition saa7146_write(saa->mem, DD1_INIT, 0x02000680); + // UPLD_D1_A: Upload 'Video DATA stream handling at port D1_A' (r100 +p34) + // UPLD_D1_B: Upload 'Video DATA stream handling at port D1_B' saa7146_write(saa->mem, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26)); + // BRSdatasel: Video stream from D1_B (r58 +p87) saa7146_write(saa->mem, BRS_CTRL, 0x60000000); + // UPLD_BRS: Upload 'BRS Control Register' (r100 +p34) saa7146_write(saa->mem, MC2, (MASK_08 | MASK_24)); mdelay(10); + // Base addr for Odd fields (r30 +p23) saa7146_write(saa->mem, BASE_ODD3, 0); + // Base addr for Even fields (r34 +p23) saa7146_write(saa->mem, BASE_EVEN3, TS_WIDTH*TS_HEIGHT/2); + // Set Protection addr (don't write after this position) (r38 +p23) saa7146_write(saa->mem, PROT_ADDR3, TS_WIDTH*TS_HEIGHT); + // Base addr of the Page table for DMA transfers (r40 +p23) + // Enable MMU (ME1) + // Continuous mode; Interrupt limit 2^16 bytes (0xB) + // At Interrupt limit, restart at base addr; FIFO write PCI; No endian swap saa7146_write(saa->mem, BASE_PAGE3, virt_to_bus(saa->page_table[0])|ME1|0xb0); - saa7146_write(saa->mem, PITCH3, TS_WIDTH); + // Store the TS packets without gaps (r3C +p23) + saa7146_write(saa->mem, PITCH3, TS_WIDTH); + // Number of lines per field*2^16 + Number of bytes per line (r44 +p23) saa7146_write(saa->mem, NUM_LINE_BYTE3, ((TS_HEIGHT/2)<<16)|TS_WIDTH); + // Upload 'Video DMA3 registers' (r100 +p34) saa7146_write(saa->mem, MC2, (MASK_04 | MASK_20)); + if (patch & DVB_TTP_TS_PATCH) { //RDA + //printk("dvb: TTP_TS_PATCH code\n"); +/* + This code will setup the SAA7146_RPS1 to generate a square wave on +GPIO3, + changing when a field (TS_HEIGHT/2 "lines" of TS_WIDTH packets) has +been + adquired on SAA7146_D1B video port; then, this GPIO3 output which is + connected to the D1B_VSYNC input, will trigger the adquisition of the + alternate field and so on. + Currently, the TT_budget / WinTV_Nova cards have two ICs (74HCT4040, +LVC74) + for the generation of this VSYNC signal, which seems that can be done + perfectly without its :-)). +*/ // Setup RPS1 "program" (p35) + // Wait Source Line Counter Threshold (p36) + saa->rps1[cnt++]=cpu_to_le32(CMD_PAUSE | EVT_HS); + // Set GPIO3=1 (p42) + saa->rps1[cnt++]=cpu_to_le32(CMD_WR_REG_MASK | (GPIO_CTRL>>2)); + saa->rps1[cnt++]=cpu_to_le32(GPIO3_MSK); + saa->rps1[cnt++]=cpu_to_le32(GPIO_OUTHI<<24); + // Wait reset Source Line Counter Threshold (p36) + saa->rps1[cnt++]=cpu_to_le32(CMD_PAUSE | RPS_INV | EVT_HS); + // Wait Source Line Counter Threshold + saa->rps1[cnt++]=cpu_to_le32(CMD_PAUSE | EVT_HS); + // Set GPIO3=0 (p42) + saa->rps1[cnt++]=cpu_to_le32(CMD_WR_REG_MASK | (GPIO_CTRL>>2)); + saa->rps1[cnt++]=cpu_to_le32(GPIO3_MSK); + saa->rps1[cnt++]=cpu_to_le32(GPIO_OUTLO<<24); + // Wait reset Source Line Counter Threshold (p36) + saa->rps1[cnt++]=cpu_to_le32(CMD_PAUSE | RPS_INV | EVT_HS); + // Jump to begin of RPS program (p37) + saa->rps1[cnt++]=cpu_to_le32(CMD_JUMP); + saa->rps1[cnt++]=cpu_to_le32(virt_to_bus(&saa->rps1[0])); + + // Fix VSYNC level + setgpio(av7110, VSYNC_LINE, GPIO_OUTLO); + // Set RPS1 Address register to point RPS code (r108 +p42) + saa7146_write(saa->mem, RPS_ADDR1, virt_to_bus(&saa->rps1[0])); + // Set Source Line Counter Threshold, using BRS (rCC +p43) + saa7146_write(saa->mem, RPS_THRESH1, ((TS_HEIGHT/2) | MASK_12)); + // Enable RPS1 (rFC +p33) + saa7146_write(saa->mem, MC1, (MASK_13 | MASK_29)); + } + // VPE + // Enable Video_address_Protection_Error interrupt (rDC +p50) saa7146_write(saa->mem, IER, saa7146_read(saa->mem, IER)|MASK_10); - saa7146_write(saa->mem, MC1, (MASK_04 | MASK_20)); // DMA3 on + saa7146_write(saa->mem, MC1, (MASK_04 | MASK_20)); // DMA3 on (rFC +p33) // FIDB + // Enable Field ID port B interrupt (rDC +p50) saa7146_write(saa->mem, IER, saa7146_read(saa->mem, IER)|MASK_07); return ++av7110->feeding; @@ -890,7 +970,8 @@ static void fidbirq(struct saa7146* saa, { av7110_t *av7110=(av7110_t *) data; u8 *mem; - + + // addr of frame buffer just adquired mem=(av7110->tsf ? TS_HEIGHT*TS_WIDTH/2 :0)+(u8 *)av7110->saa->grabbing; // FIXME: think of something better without busy waiting @@ -900,13 +981,25 @@ static void fidbirq(struct saa7146* saa, while (saa7146_read(av7110->saa_mem, PCI_VDP3)<0x17800); av7110->tsf^=1; + // LLC_A: Set to input (r50 +p84) + // SIO_A: HS_A and VS_A are input + // SYNC_A: Ha at rising edge of HS; Va at rising edge of VS + // Fa=HS*VS-falling, forced toggle + // FIDESA: No interrupt condition + // LLC_B: Set to input + // SIO_B: HS_B and VS_B are input + // SYNC_B: Hb at rising edge of HS; Vb at rising & falling edge of Frame +Sync + // at VS pin; Fb=direct FS + // FIDESB: Interrupt condition at Rising/Falling, depending on 'dvb->tsf' saa7146_write(av7110->saa_mem, DD1_INIT, 0x02000600|(av7110->tsf ? 0x40:0x80)); + // UPLD_D1_A: Upload 'Video DATA stream handling at port D1_A' (r100 +p34) + // UPLD_D1_B: Upload 'Video DATA stream handling at port D1_B' saa7146_write(av7110->saa_mem, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26)); // FIXME: use bottom half or tasklet if (av7110->feeding && mem[0]==0x47) - dvb_dmx_swfilter_packets(&av7110->demux, mem, 512); + dvb_dmx_swfilter_packets(&av7110->demux, mem, +TS_HEIGHT*TS_WIDTH/188/2); //RDA } #else static @@ -3482,6 +3575,9 @@ dvb_start_feed(struct dvb_demux_feed *dv if (av7110->saa->card_type>=DVB_CARD_TT_BUDGET) return TTBStart(av7110); + if (patch & DVB_TTP_TS_PATCH) //RDA + TTBStart(av7110); + if (dvbdmxfeed->pid>0x1fff) return -1; @@ -3539,6 +3635,9 @@ dvb_stop_feed(struct dvb_demux_feed *dvb if (av7110->saa->card_type>=DVB_CARD_TT_BUDGET) return TTBStop(av7110); + if (patch & DVB_TTP_TS_PATCH) //RDA + TTBStop(av7110); + if (dvbdmxfeed->type == DMX_TYPE_TS) { if (dvbdmxfeed->ts_type & TS_DECODER) { if (dvbdmxfeed->pes_type>=DMX_TS_PES_OTHER || @@ -4471,11 +4570,16 @@ dvb_register(av7110_t *av7110) dvbdemux->priv=(void *) av7110; if (av7110->saa->card_type==DVB_CARD_TT_SIEMENS) { - for (i=0; i<32; i++) - av7110->handle2filter[i]=NULL; + if (patch & DVB_TTP_TS_PATCH) { + dvbdemux->filternum=256; + dvbdemux->feednum=256; + } else { + for (i=0; i<32; i++) + av7110->handle2filter[i]=NULL; - dvbdemux->filternum=32; - dvbdemux->feednum=32; + dvbdemux->filternum=32; + dvbdemux->feednum=32; + } dvbdemux->start_feed=dvb_start_feed; dvbdemux->stop_feed=dvb_stop_feed; dvbdemux->write_to_decoder=dvb_write_to_decoder; @@ -4495,7 +4599,7 @@ dvb_register(av7110_t *av7110) dvbfront->model="DVB Frontend"; dvbfront->source=DMX_FRONTEND_0; - av7110->dmxdev.filternum=32; + av7110->dmxdev.filternum = ((patch & DVB_TTP_TS_PATCH) ? 256 : 32); +//RDA av7110->dmxdev.demux=&dvbdemux->dmx; av7110->dmxdev.capabilities=0; @@ -4699,6 +4803,23 @@ int av7110_attach (struct saa7146 *saa, printk("av7110: Warning, firmware version is too old. System might be unstable!!!\n"); } kernel_thread(arm_thread, (void *) av7110, 0); + if (patch & DVB_TTP_TS_PATCH) { //RDA + // LLC_A: Set to input (r50 +p84) + // SIO_A: HS_A and VS_A are input + // SYNC_A: Ha at rising edge of HS; Va at rising edge of +VS + // Fa=HS*VS-falling, forced toggle + // FIDESA: No interrupt condition + // LLC_B: Set to input + // SIO_B: HS_B and VS_B are input + // SYNC_B: Hb at rising edge of HS; Vb at rising & +falling edge + // of Frame Sync at VS pin; Fb=direct FS + // FIDESB: No interrupt condition + saa7146_write(av7110->saa_mem, DD1_INIT, 0x02000600); + // UPLD_D1_A: Upload 'Video DATA stream handling port D1_A' + (r100 p34) + // UPLD_D1_B: Upload 'Video DATA stream handling port D1_B' + saa7146_write(av7110->saa_mem, MC2, + (MASK_09 | MASK_25 | MASK_10 | MASK_26)); + } } else { saa7146_write(av7110->saa_mem, DD1_INIT, 0x02000600); saa7146_write(av7110->saa_mem, MC2, @@ -4883,6 +5004,7 @@ MODULE_PARM(vidlow,"l"); MODULE_PARM(vidmode,"i"); MODULE_PARM(pids_off,"i"); MODULE_PARM(adac,"i"); +MODULE_PARM(patch,"i"); /* * Local variables: Only in DVB/driver/av7110: av7110.d diff -rpu /home/loader/src/DVB/driver/av7110/av7110.h DVB/driver/av7110/av7110.h --- /home/loader/src/DVB/driver/av7110/av7110.h Sun Nov 17 00:37:03 2002 +++ DVB/driver/av7110/av7110.h Wed Jan 1 16:52:45 2003 @@ -704,12 +704,15 @@ typedef struct av7110_s { #define DRAM_START_CODE 0x2e000404 #define DRAM_MAX_CODE_SIZE 0x00100000 +// GPIO lines +#define VSYNC_LINE 3 // regen VSYNC for TS capture (patch #1) #define RESET_LINE 2 #define DEBI_DONE_LINE 1 #define ARM_IRQ_LINE 0 #define DAC_CS 0x8000 #define DAC_CDS 0x0000 +#define DVB_TTP_TS_PATCH 1 // Allow to get full TS on Premium cards extern unsigned char *av7110_dpram_addr, *av7110_root_addr; Only in DVB/driver/av7110: av7110.o Only in DVB/driver/av7110: av7110_firm.h Only in DVB/driver/av7110: av7110_ir.d Only in DVB/driver/av7110: av7110_ir.o Only in DVB/driver/av7110: dvb-ttpci.o Only in DVB/driver/av7110: fdump Only in DVB/driver/av7110: saa7146_core.d Only in DVB/driver/av7110: saa7146_core.o diff -rpu /home/loader/src/DVB/driver/av7110/saa7146_defs.h DVB/driver/av7110/saa7146_defs.h --- /home/loader/src/DVB/driver/av7110/saa7146_defs.h Sun Nov 17 00:37:03 2002 +++ DVB/driver/av7110/saa7146_defs.h Wed Jan 1 17:33:58 2003 @@ -121,6 +121,10 @@ struct saa7146_mmap_struct #define CMD_WR_REG 0x90000000 /* Write (load) register */ #define CMD_RD_REG 0xa0000000 /* Read (store) register */ #define CMD_WR_REG_MASK 0xc0000000 /* Write register with mask */ +// Some Events and Command modifiers +#define EVT_HS (1<<15) // Source Line Threshold rearched +#define RPS_OAN (1<<27) // 1: OR events, 0: AND events +#define RPS_INV (1<<26) // Invert (compound) event /************************************************************************/ /* OUTPUT FORMATS */ @@ -276,6 +280,10 @@ struct saa7146_mmap_struct #define IER 0xDC /* Interrupt enable register */ #define GPIO_CTRL 0xE0 /* GPIO 0-3 register */ +#define GPIO0_MSK 0x000000FF // GPIO #0 control bits +#define GPIO1_MSK 0x0000FF00 // GPIO #1 control bits +#define GPIO2_MSK 0x00FF0000 // GPIO #2 control bits +#define GPIO3_MSK 0xFF000000 // GPIO #3 control bits #define EC1SSR 0xE4 /* Event cnt set 1 source select */ #define EC2SSR 0xE8 /* Event cnt set 2 source select */ Only in DVB/driver/av7110: saa7146_v4l.d Only in DVB/driver/av7110: saa7146_v4l.o Only in DVB/driver: compat.d Only in DVB/driver: compat.o Only in DVB/driver: dmxdev.d Only in DVB/driver: dmxdev.o Only in DVB/driver: dvb-core.o Only in DVB/driver: dvb_demux.d Only in DVB/driver: dvb_demux.o Only in DVB/driver: dvb_filter.d Only in DVB/driver: dvb_filter.o Only in DVB/driver: dvb_frontend.d Only in DVB/driver: dvb_frontend.o Only in DVB/driver: dvb_i2c.d Only in DVB/driver: dvb_i2c.o Only in DVB/driver: dvb_ksyms.d Only in DVB/driver: dvb_ksyms.o Only in DVB/driver: dvb_net.d Only in DVB/driver: dvb_net.o Only in DVB/driver: dvbdev.d Only in DVB/driver: dvbdev.o Only in DVB/driver/frontends: .alps_bsru6.o.flags Only in DVB/driver/frontends: .alps_bsrv2.o.flags Only in DVB/driver/frontends: .alps_tdlb7.o.flags Only in DVB/driver/frontends: .alps_tdmb7.o.flags Only in DVB/driver/frontends: .grundig_29504-401.o.flags Only in DVB/driver/frontends: .grundig_29504-491.o.flags Only in DVB/driver/frontends: .ves1820.o.flags Only in DVB/driver/frontends: alps_bsru6.d Only in DVB/driver/frontends: alps_bsru6.o Only in DVB/driver/frontends: alps_bsrv2.d Only in DVB/driver/frontends: alps_bsrv2.o Only in DVB/driver/frontends: alps_tdlb7.d Only in DVB/driver/frontends: alps_tdlb7.o Only in DVB/driver/frontends: alps_tdmb7.d Only in DVB/driver/frontends: alps_tdmb7.o Only in DVB/driver/frontends: grundig_29504-401.d Only in DVB/driver/frontends: grundig_29504-401.o Only in DVB/driver/frontends: grundig_29504-491.d Only in DVB/driver/frontends: grundig_29504-491.o Only in DVB/driver/frontends: ves1820.d Only in DVB/driver/frontends: ves1820.o Only in DVB/libdvb: DVB.o Only in DVB/libdvb: OSD.o Only in DVB/libdvb: conv Only in DVB/libdvb: devices.o Only in DVB/libdvb: libdvb.a Only in DVB/libdvb: merge_dvb Only in DVB/libdvb: newtest