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-all
mailing list