svn commit: r187052 - head/sys/dev/sound/pci/hda

Alexander Motin mav at FreeBSD.org
Sun Jan 11 04:04:38 PST 2009


Author: mav
Date: Sun Jan 11 12:04:18 2009
New Revision: 187052
URL: http://svn.freebsd.org/changeset/base/187052

Log:
  Fix unwanted crosschannel mixing, possible on some codecs like
  VIA VT1708B and Realtek ALC268.

Modified:
  head/sys/dev/sound/pci/hda/hdac.c

Modified: head/sys/dev/sound/pci/hda/hdac.c
==============================================================================
--- head/sys/dev/sound/pci/hda/hdac.c	Sun Jan 11 11:51:18 2009	(r187051)
+++ head/sys/dev/sound/pci/hda/hdac.c	Sun Jan 11 12:04:18 2009	(r187052)
@@ -83,7 +83,7 @@
 
 #include "mixer_if.h"
 
-#define HDA_DRV_TEST_REV	"20081226_0122"
+#define HDA_DRV_TEST_REV	"20090110_0123"
 
 SND_DECLARE_FILE("$FreeBSD$");
 
@@ -5554,7 +5554,7 @@ hdac_audio_disable_crossas(struct hdac_d
 	struct hdac_audio_ctl *ctl;
 	int i, j;
 
-	/* Disable crossassociatement connections. */
+	/* Disable crossassociatement and unwanted crosschannel connections. */
 	/* ... using selectors */
 	for (i = devinfo->startnode; i < devinfo->endnode; i++) {
 		w = hdac_widget_get(devinfo, i);
@@ -5572,7 +5572,10 @@ hdac_audio_disable_crossas(struct hdac_d
 			cw = hdac_widget_get(devinfo, w->conns[j]);
 			if (cw == NULL || w->enable == 0)
 				continue;
-			if (w->bindas == cw->bindas || cw->bindas == -2)
+			if (cw->bindas == -2)
+				continue;
+			if (w->bindas == cw->bindas &&
+			    (w->bindseqmask & cw->bindseqmask) != 0)
 				continue;
 			w->connsenable[j] = 0;
 			HDA_BOOTHVERBOSE(
@@ -5591,7 +5594,8 @@ hdac_audio_disable_crossas(struct hdac_d
 		if (ctl->widget->bindas == -2 ||
 		    ctl->childwidget->bindas == -2)
 			continue;
-		if (ctl->widget->bindas != ctl->childwidget->bindas) {
+		if (ctl->widget->bindas != ctl->childwidget->bindas ||
+		    (ctl->widget->bindseqmask & ctl->childwidget->bindseqmask) == 0) {
 			ctl->forcemute = 1;
 			ctl->muted = HDA_AMP_MUTE_ALL;
 			ctl->left = 0;


More information about the svn-src-head mailing list