Re: patch(bttv-0.7.102): Radio fixes #2 for msp34xxD

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



Gerd Knorr wrote:
On Mon, Jan 20, 2003 at 12:33:02AM +0100, Gunther Mayer wrote:

Hi,
this patch includes the latest "make CARDLIST" and Cards patch, plus
- new card: Pace TV & Radio Card
- fix radio for some MSP34xx cards, e.g. Voodoo200, Pace Tv & Radio
 It didn't work here for both "simple" settings:
- simple=0: Volume was disabled in msp_wake_thread, but 3400c_thread failed to enable


But the fix is wrong:  It is the job of the thread to enable the volume
when it is done with the tv audio carrier scan (because we want to do
the carrier scan muted, otherwise channel switches will cause crazy
sounds).  Patch below.

OK, works fine for simple=0.



- simple=1: Besides correcting routing via scart towards decoding ourselves, this needed "omit reset" and "set mode et al." for 3410_thread, too.


Same issue.  If the thread doesn't manage to setup the radio it should
be fixed there and not workarounded somewhere else.

New patch below fixes radio for 34xxD chips in the simple=1 case.
We falsely used Demodulator Short Programming for FM radio,
which does only exist in 34xxG.

-
Gunther




--- bttv-0.7.102/driver/msp3400.c	Fri Jan  3 18:23:12 2003
+++ bttv07102/driver/msp3400.c	Sun Jan 26 23:42:08 2003
@@ -154,6 +154,7 @@
 		{ client->addr, 0,        3, write },
 		{ client->addr, I2C_M_RD, 2, read  },
 	};
+	dprintk("msp3400c_reset\n");
 	
 	if ( (1 != i2c_transfer(client->adapter,&reset[0],1)) ||
 	     (1 != i2c_transfer(client->adapter,&reset[1],1)) ||
@@ -781,8 +782,12 @@
 			goto done;
 
 		if (VIDEO_MODE_RADIO == msp->norm ||
-		    MSP_MODE_EXTERN  == msp->mode)
-			continue;  /* nothing to do */
+		    MSP_MODE_EXTERN  == msp->mode) {
+			/* no carrier scan, just unmute */
+			msp3400c_setvolume(client, msp->muted,
+					   msp->left, msp->right);
+			continue;
+		}
 	
 		msp->active = 1;
 
@@ -1071,7 +1076,7 @@
 			break;
 		case VIDEO_MODE_NTSC:  /* BTSC */
 			mode = 0x2003;
-			std  = 0x0020;
+			std  = 0x0020;  // only for msp34xxG
 			break;
 		case VIDEO_MODE_SECAM: 
 			mode = 0x0003;
@@ -1079,14 +1084,14 @@
 			break;
 		case VIDEO_MODE_RADIO: 
 			mode = 0x0003;
-			std  = 0x0040;
+			std  = 0x0040; // only for msp34xxG
 			break;
 		default:
 			mode = 0x0003;
 			std  = 1;
 			break;
 		}
-		msp3400c_write(client, I2C_MSP3400C_DEM, 0x30, mode);
+		msp3400c_write(client, I2C_MSP3400C_DEM, 0x30, mode); // msp34xxG only
 		msp3400c_write(client, I2C_MSP3400C_DEM, 0x20, std);
 
 		if (debug) {
@@ -1175,10 +1180,33 @@
 			msp->nicam_on = 0;
 			msp->watch_stereo = 0;
 			/* scart routing */
-			msp3400c_set_scart(client,SCART_IN2,0);
-			msp3400c_write(client,I2C_MSP3400C_DFP, 0x08, 0x0220);
-			msp3400c_write(client,I2C_MSP3400C_DFP, 0x09, 0x0220);
-			msp3400c_write(client,I2C_MSP3400C_DFP, 0x0b, 0x0220);
+			msp3400c_set_scart(client,SCART_IN2,0); // e.g. Hauppauge 37284 
+
+			/* Radio Sound Route has different wiring options:
+			   (a) 0x0020: Radio decoded by MSP chip  (Radio IF from Tuner connected to ANA_IN1)
+                           (b) 0x0220: Radio routed through MSP   (Radio AF from Tuner connected to SCART_IN2)
+                           (c) other : Radio routed through other (Radio AF from Tuner connected to hef4052 mux)
+			   
+                           Note: There is another code path for "simple=0" which needs the same consideration !
+                           Note: For WinTV option (c) is default (gpio=1 for radio), you need gpio=0 for msp route.
+                           Cards:
+                                Pace TV & Radio card: (a) // has no hef4052
+                                Voodoo 200 / Voodoo TV/FM: (a)  // mt2032 has no Radio AF decoder, no 4052
+                                WinTV 37284 Theater: (a,b,c)
+                                WinTV 61334 Rev.B: (a,b,c)
+                                Pinnacle PCTV Pro MT2032: ??
+                                Pinnacle PCTV Pro Temic tuner: ??
+                                miro PCTV pro (with msp+radio daughterboard): ??  
+			   Conclusion: Option (a)/(c) works best for all boards*/
+			msp3400c_write(client,I2C_MSP3400C_DFP, 0x08, 0x0020);
+			msp3400c_write(client,I2C_MSP3400C_DFP, 0x09, 0x0020);
+			msp3400c_write(client,I2C_MSP3400C_DFP, 0x0b, 0x0020);
+
+			// for 34xxD chips we must set radio manually (34xxG short programming see above)
+			// (hopefully this doesn't harm msp34xxG)
+			msp3400c_setmode(client,MSP_MODE_FM_RADIO);
+                        msp3400c_setcarrier(client, MSP_CARRIER(10.7),MSP_CARRIER(10.7));
+
 			break;
 		case 0x0003:
 			msp->mode   = MSP_MODE_FM_TERRA;

[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