diff -r -u ../orig/ivtv-0.2.0-rc3e/driver/ivtv-audio.c ./driver/ivtv-audio.c
--- ../orig/ivtv-0.2.0-rc3e/driver/ivtv-audio.c	2004-07-04 10:50:24.000000000 -0400
+++ ./driver/ivtv-audio.c	2005-01-29 08:31:59.204089610 -0500
@@ -33,6 +33,7 @@
 static int ivtv_set_audio_for_msp34xx(struct ivtv *itv, u32 input, u32 output)
 {
         struct msp_matrix mspm;
+        struct video_audio va;
 
         if (input >= 0 && input <= 2) {
                 IVTV_DEBUG(IVTV_DEBUG_INFO,
@@ -55,6 +56,11 @@
                 IVTV_DEBUG(IVTV_DEBUG_ERR, "Setting audio matrix to input %d, output %d\n",
 			       mspm.input, mspm.output);
                 ivtv_msp34xx(itv, MSP_SET_MATRIX, &mspm);
+
+                memset(&va, 0, sizeof(struct video_audio));
+                ivtv_msp34xx(itv, VIDIOCGAUDIO, &va);
+                va.flags &= ~VIDEO_AUDIO_MUTE;
+                ivtv_msp34xx(itv, VIDIOCSAUDIO, &va);
                 return 0;
         }
 
@@ -120,6 +126,7 @@
 
 	switch (itv->card->audio_selector) {
 		case USE_MSP34XX:
+			memset(&va, 0, sizeof(struct video_audio));
 			ivtv_msp34xx(itv, VIDIOCGAUDIO, &va);
 			va.volume = volume;
 			va.mode = 0;  /* keep stereo mode at automatic stereo detection */
@@ -137,6 +144,7 @@
 
 	switch (itv->card->audio_selector) {
 		case USE_MSP34XX:
+			memset(&va, 0, sizeof(struct video_audio));
 			ivtv_msp34xx(itv, VIDIOCGAUDIO, &va);
 			break;
 		case USE_GPIO:
@@ -153,6 +161,7 @@
 
 	switch (itv->card->audio_selector) {
 		case USE_MSP34XX:
+			memset(&va, 0, sizeof(struct video_audio));
 			ivtv_msp34xx(itv, VIDIOCGAUDIO, &va);
 			if (mute)
 				va.flags |= VIDEO_AUDIO_MUTE;
@@ -176,6 +185,7 @@
 
 	switch (itv->card->audio_selector) {
 		case USE_MSP34XX:
+			memset(&va, 0, sizeof(struct video_audio));
 			ivtv_msp34xx(itv, VIDIOCGAUDIO, &va);
 			break;
 		case USE_GPIO:
diff -r -u ../orig/ivtv-0.2.0-rc3e/driver/ivtv-driver.h ./driver/ivtv-driver.h
--- ../orig/ivtv-0.2.0-rc3e/driver/ivtv-driver.h	2005-01-24 14:25:16.000000000 -0500
+++ ./driver/ivtv-driver.h	2005-01-29 08:32:38.143508999 -0500
@@ -241,7 +241,7 @@
 #define IVTV_DEFAULT_DEC_VBI_BUFFERS (int)(256 * (1024))
 
 /* DMA Buffers Limits */
-#define IVTV_MAX_MPG_BUFFERS (int)(16 * ((1024 * 1024)))
+#define IVTV_MAX_MPG_BUFFERS (int)(32 * ((1024 * 1024)))
 #define IVTV_MAX_YUV_BUFFERS (int)(32 * ((1024 * 1024)))
 #define IVTV_MAX_VBI_BUFFERS (int)(2 * ((1024 * 1024)))
 #define IVTV_MAX_PCM_BUFFERS (int)(32 * ((1024 * 1024)))
diff -r -u ../orig/ivtv-0.2.0-rc3e/utils/chann.c ./utils/chann.c
--- ../orig/ivtv-0.2.0-rc3e/utils/chann.c	2004-07-04 10:50:24.000000000 -0400
+++ ./utils/chann.c	2005-01-29 08:33:38.238353187 -0500
@@ -23,6 +23,7 @@
 #include <sys/stat.h>
 #include <linux/videodev.h>
 #include <fcntl.h>
+#include <string.h>
 
 #define VIDIOC_S_FREQUENCY2 0x402c5639
 
@@ -511,23 +512,38 @@
 	int fd, retval;
 	unsigned long chann,freq, c, f, *array;
 	struct v4l2_frequency2 vf;
+	char device[100];
+
+	strcpy(device, "/dev/video0");
+	chann = 3;
 
 	/* Pick your TV standard here! */
-	array = NTSC_BCAST;
+	array = NTSC_CABLE;
 	
-	if (argc != 2) {
-		printf("Usage: %s <channel>\n", argv[0]);
+	if (argc < 2 || argc > 4) {
+		printf("Usage: %s [-d device] <channel>\n", argv[0]);
 		return -1;
 	}	
+
+	while (*argv) {
+		if (strncmp(*argv, "-d", 2) == 0) {
+			*argv++;
+			if (*argv) {
+				strncpy(device, *argv, 100);
+				device[99] = '\0';
+			}
+		} else {
+			chann = atol(*argv);
+		}
+		argv++;
+	}
 	
-	fd = open("/dev/video0", O_RDONLY);
+	fd = open(device, O_RDONLY);
 	if (fd < 0) {
 		printf("Couldn't open file\n");
 		return -1;
 	}
 
-	chann = (unsigned long)atol(argv[1]);
-	
 	freq = 0;
 	while (*array != 0) {
 		c = *(array++);
