[pvrusb2] Hauppauge HVR-1900 - PAL-Nc, no audio

vdb at picaros.org vdb at picaros.org
Sat Apr 13 09:46:22 CDT 2013


> Our regular TV (which is both NTSC- and PAL-capable) displays "PAL-N" and "SAP" when changing channels (not very technical I know!), and my testing (included below) would seem to point to PAL-Nc being the correct variation.

The patch below might work, but it needs a kernel or module recompilation.
Signed-off-by: Servaas Vandenberghe
--- linux-3.5.4/drivers/media/video/cx25840/cx25840-core-orig.c	2012-09-15 00:28:08.000000000 +0200
+++ linux-3.5.4/drivers/media/video/cx25840/cx25840-core.c	2013-04-13 16:22:59.000000000 +0200
@@ -945,8 +945,7 @@ static void input_change(struct i2c_clie
 	if (state->radio) {
 		cx25840_write(client, 0x808, 0xf9);
 		cx25840_write(client, 0x80b, 0x00);
-	}
-	else if (std & V4L2_STD_525_60) {
+	} else if (std & V4L2_STD_MN) {
 		/* Certain Hauppauge PVR150 models have a hardware bug
 		   that causes audio to drop out. For these models the
 		   audio standard must be set explicitly.
@@ -965,31 +964,32 @@ static void input_change(struct i2c_clie
 			cx25840_write(client, 0x808, hw_fix ? 0x1f : 0xf6);
 		}
 		cx25840_write(client, 0x80b, 0x00);
-	} else if (std & V4L2_STD_PAL) {
-		/* Autodetect audio standard and audio system */
-		cx25840_write(client, 0x808, 0xff);
-		/* Since system PAL-L is pretty much non-existent and
-		   not used by any public broadcast network, force
-		   6.5 MHz carrier to be interpreted as System DK,
-		   this avoids DK audio detection instability */
-	       cx25840_write(client, 0x80b, 0x00);
-	} else if (std & V4L2_STD_SECAM) {
+	} else {
 		/* Autodetect audio standard and audio system */
 		cx25840_write(client, 0x808, 0xff);
-		/* If only one of SECAM-DK / SECAM-L is required, then force
-		  6.5MHz carrier, else autodetect it */
-		if ((std & V4L2_STD_SECAM_DK) &&
-		    !(std & (V4L2_STD_SECAM_L | V4L2_STD_SECAM_LC))) {
-			/* 6.5 MHz carrier to be interpreted as System DK */
+		if (std & V4L2_STD_SECAM) {
+			/* If only one of SECAM-DK / SECAM-L is required, then force
+			   6.5MHz carrier, else autodetect it */
+			if ((std & V4L2_STD_SECAM_DK) &&
+			    !(std & (V4L2_STD_SECAM_L | V4L2_STD_SECAM_LC))) {
+				/* 6.5 MHz carrier to be interpreted as System DK */
+				cx25840_write(client, 0x80b, 0x00);
+			} else if (!(std & V4L2_STD_SECAM_DK) &&
+				   (std & (V4L2_STD_SECAM_L | V4L2_STD_SECAM_LC))) {
+				/* 6.5 MHz carrier to be interpreted as System L */
+				cx25840_write(client, 0x80b, 0x08);
+			} else {
+				/* 6.5 MHz carrier to be autodetected */
+				cx25840_write(client, 0x80b, 0x10);
+			}
+		} else {
+			/* std & (V4L2_STD_PAL | V4L2_STD_PAL_60 | V4L2_STD_NTSC_443)) */
+			/* Since system PAL-L is pretty much non-existent and
+			   not used by any public broadcast network, force
+			   6.5 MHz carrier to be interpreted as System DK,
+			   this avoids DK audio detection instability */
 			cx25840_write(client, 0x80b, 0x00);
-	       } else if (!(std & V4L2_STD_SECAM_DK) &&
-			  (std & (V4L2_STD_SECAM_L | V4L2_STD_SECAM_LC))) {
-			/* 6.5 MHz carrier to be interpreted as System L */
-			cx25840_write(client, 0x80b, 0x08);
-	       } else {
-			/* 6.5 MHz carrier to be autodetected */
-			cx25840_write(client, 0x80b, 0x10);
-	       }
+		}
 	}
 
 	cx25840_and_or(client, 0x810, ~0x01, 0);


More information about the pvrusb2 mailing list