Re: (bttv-0.7.81) patch candidate for voodoo tv 200 (us/NTSC version)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



well the 0x957fff does fix the problem. now i can tune to some of the channels but most of the channels wont tune. i'm including a patch for the spur avoidance and also i've rearranged the compute freq routine a bit. i'll debug some more tomorrow and see why it wont tune to some channels.

--On Wednesday, October 10, 2001 8:57 PM +0200 Gunther Mayer <Gunther.Mayer@xxxxxxxxxxx> wrote:

Ivan T Tarnavsky wrote:

hi,
i've got the voodootv 200 pci us version and cant make it work with
bttv. i have kernel 2.4.10 + bttv 0.7.80 + the latest  Gunter's patch
with the "proper" initialization. it's still not working. i get noise
for the audio

Try this patch (on bttv-0.7.81) and report.

--- bttv-cards.c-PAL    Tue Oct  9 21:09:50 2001
+++ bttv-cards.c        Tue Oct  9 21:10:21 2001
@@ -1049,7 +1049,7 @@
         gpiomask:       0x4f8a00,
                        // 0x100000: 1=MSP enabled (0=disable again)
                        // 0x010000: somehow influences tuner picture
quality (? )
-        audiomux:       {0x947fff, 0x987fff,0x947fff,0x947fff},
+        audiomux:       {0x957fff, 0x987fff,0x947fff,0x947fff},
                         //tvtuner, radio,   external,internal,mute,stereo
         muxsel:         { 2, 3 ,0 ,1}, /* tuner, Composit, SVid,
Composit-on-Sv id-adapter*/
         tuner_type:     TUNER_MT2032,


I already got a positive report on this:
It looks as if all the channels work. And the sound is perfect!
This is so awsome!
P.S.) KWinTV's autoscanning feature doesn't work with this card since it
takes  a second or two to tune-in the channel.

This would confirm GPIO connected to tda9880 for selecting tv standard
(thanks torgeir for the hint).



cheers,
ivan.
*** tuner.c.old	Wed Oct 10 15:16:22 2001
--- tuner.c	Wed Oct 10 15:46:16 2001
***************
*** 281,287 ****
          ret=i2c_master_send(c,buf,1);
          i2c_master_recv(c,buf,21);
  
!         printk("MT2032: Companycode=%02x%02x Part=%02x Revision=%02x\n",
                  buf[0x11],buf[0x12],buf[0x13],buf[0x14]);
  
          if(debug) {
--- 281,287 ----
          ret=i2c_master_send(c,buf,1);
          i2c_master_recv(c,buf,21);
  
!         printk("MT2032: Companycode=%c%c Part=%02x Revision=%02x\n",
                  buf[0x11],buf[0x12],buf[0x13],buf[0x14]);
  
          if(debug) {
***************
*** 290,296 ****
                  for(i=0;i<21;i++) {
                          printk(" %02x",buf[i]);
                          if(((i+1)%8)==0) printk(" ");
!                         if(((i+1)%16)==0) printk("\n ");
                  }
                  printk("\n ");
          }
--- 290,296 ----
                  for(i=0;i<21;i++) {
                          printk(" %02x",buf[i]);
                          if(((i+1)%8)==0) printk(" ");
!                         if(((i+1)%16)==0) printk("\n");
                  }
                  printk("\n ");
          }
***************
*** 364,392 ****
  		f=f-f2;
  		dprintk(" spurtest n1=%d n2=%d ftest=%d\n",n1,n2,f);
  
! 		if( (f>spectrum_from) && (f<spectrum_to))
  			printk("mt2032 spurcheck triggered: %d\n",n1);
  	    } while ( (f>(f2-spectrum_to)) || (n2>-5));
  	    n1++;
  	} while (n1<5);
  
! 	return 1;
  }
  
  int mt2032_compute_freq(int rfin, int if1, int if2, int spectrum_from,
  	int spectrum_to, unsigned char *buf, int *ret_sel, int xogc) //all in Hz
  {
          int fref,lo1,lo1n,lo1a,s,sel,lo1freq, desired_lo1,
! 		desired_lo2,lo2,lo2n,lo2a,lo2num,lo2freq;
  
          fref= 5250 *1000; //5.25MHz
- 	desired_lo1=rfin+if1;
  
! 	lo1=(2*(desired_lo1/1000)+(fref/1000)) / (2*fref/1000);
!         lo1n=lo1/8;
!         lo1a=lo1-(lo1n*8);
  
!         s=rfin/1000/1000+1090;
  
  	if(optimize_vco) {
  		if(s>1890) sel=0;
--- 364,408 ----
  		f=f-f2;
  		dprintk(" spurtest n1=%d n2=%d ftest=%d\n",n1,n2,f);
  
! 		if( (f>spectrum_from) && (f<spectrum_to)) {
  			printk("mt2032 spurcheck triggered: %d\n",n1);
+ 			return 1;
+ 		}
  	    } while ( (f>(f2-spectrum_to)) || (n2>-5));
  	    n1++;
  	} while (n1<5);
  
! 	return 0;
  }
  
  int mt2032_compute_freq(int rfin, int if1, int if2, int spectrum_from,
  	int spectrum_to, unsigned char *buf, int *ret_sel, int xogc) //all in Hz
  {
          int fref,lo1,lo1n,lo1a,s,sel,lo1freq, desired_lo1,
! 		desired_lo2,lo2,lo2n,lo2a,lo2num,lo2freq,nLO1adjust;
  
          fref= 5250 *1000; //5.25MHz
  
! 	// 2.3.1
! 	desired_lo1 = rfin + if1;
! 	lo1 = (2 * (desired_lo1 / 1000) + (fref / 1000)) / (2 * fref / 1000);
! 	lo1freq = lo1 * fref;
! 	desired_lo2 = lo1freq - rfin - if2;
! 
! 	// 2.3.2
! 	for(nLO1adjust = 1; nLO1adjust < 3; nLO1adjust++) {
! 		if (!mt2032_spurcheck(lo1freq, desired_lo2,  spectrum_from, spectrum_to))
! 			break;
! 		if (lo1freq < desired_lo1)
! 			lo1 += nLO1adjust;
! 		else
! 			lo1 -= nLO1adjust;
! 		lo1freq = lo1 * fref;
! 		desired_lo2 = lo1freq - rfin - if2;
! 	}
  
! 	// 2.3.3
!         s = lo1freq/1000/1000;
  
  	if(optimize_vco) {
  		if(s>1890) sel=0;
***************
*** 404,418 ****
  	}
  	*ret_sel=sel;
  
!         lo1freq=(lo1a+8*lo1n)*fref;
  
          dprintk("mt2032: rfin=%d lo1=%d lo1n=%d lo1a=%d sel=%d, lo1freq=%d\n",
  		rfin,lo1,lo1n,lo1a,sel,lo1freq);
  
!         desired_lo2=lo1freq-rfin-if2;
!         lo2=(desired_lo2)/fref;
!         lo2n=lo2/8;
!         lo2a=lo2-(lo2n*8);
          lo2num=((desired_lo2/1000)%(fref/1000))* 3780/(fref/1000); //scale to fit in 32bit arith
          lo2freq=(lo2a+8*lo2n)*fref + lo2num*(fref/1000)/3780*1000;
  
--- 420,435 ----
  	}
  	*ret_sel=sel;
  
! 	// 2.3.4
! 	lo1n=lo1/8;
!         lo1a=lo1-(lo1n*8);
  
          dprintk("mt2032: rfin=%d lo1=%d lo1n=%d lo1a=%d sel=%d, lo1freq=%d\n",
  		rfin,lo1,lo1n,lo1a,sel,lo1freq);
  
!         lo2 = desired_lo2 / fref;
!         lo2n = lo2 / 8;
!         lo2a = lo2 - (lo2n * 8);
          lo2num=((desired_lo2/1000)%(fref/1000))* 3780/(fref/1000); //scale to fit in 32bit arith
          lo2freq=(lo2a+8*lo2n)*fref + lo2num*(fref/1000)/3780*1000;
  
***************
*** 424,432 ****
  		       lo1a, lo1n, lo2a,lo2n);
                  return(-1);
          }
- 
- 	mt2032_spurcheck(lo1freq, desired_lo2,  spectrum_from, spectrum_to);
- 	// should recalculate lo1 (one step up/down)
  
  	// set up MT2032 register map for transfer over i2c
  	buf[0]=lo1n-1;
--- 441,446 ----

[Index of Archives]     [Linux DVB]     [Video Disk Recorder]     [Asterisk]     [Photo]     [DCCP]     [Netdev]     [Xorg]     [Util Linux NG]     [Xfree86]     [Free Photo Albums]     [Fedora Users]     [Fedora Women]     [ALSA Users]     [ALSA Devel]     [Linux USB]

Powered by Linux