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;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to