summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Meuser <jakemsr@cvs.openbsd.org>2008-10-12 10:42:39 +0000
committerJacob Meuser <jakemsr@cvs.openbsd.org>2008-10-12 10:42:39 +0000
commite744a5c2024ba582aaebbcc5896872627e028c14 (patch)
tree2931df9554b757a55f11e5ffd82eb4d5b7eca3a3
parent68a447151376faad772560cc2facdcd56306feab (diff)
if converters in a group are not needed to satisfy the requirements
of a stream, direct the unneeded converters use HDA link stream #0 from NetBSD via Alexey Suslikov, thanks tested by several, thanks also
-rw-r--r--sys/dev/pci/azalia.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/sys/dev/pci/azalia.c b/sys/dev/pci/azalia.c
index 40a3d2fe7f9..8600d3a0f82 100644
--- a/sys/dev/pci/azalia.c
+++ b/sys/dev/pci/azalia.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: azalia.c,v 1.58 2008/10/12 10:34:18 jakemsr Exp $ */
+/* $OpenBSD: azalia.c,v 1.59 2008/10/12 10:42:38 jakemsr Exp $ */
/* $NetBSD: azalia.c,v 1.20 2006/05/07 08:31:44 kent Exp $ */
/*-
@@ -1530,6 +1530,7 @@ azalia_codec_connect_stream(codec_t *this, int dir, uint16_t fmt, int number)
nchan = (fmt & HDA_SD_FMT_CHAN) + 1;
startchan = 0;
for (i = 0; i < group->nconv; i++) {
+ uint32_t stream_chan;
nid = group->conv[i];
/* surround and c/lfe handling */
@@ -1542,12 +1543,14 @@ azalia_codec_connect_stream(codec_t *this, int dir, uint16_t fmt, int number)
err = this->comresp(this, nid, CORB_SET_CONVERTER_FORMAT, fmt, NULL);
if (err)
goto exit;
+ stream_chan = (number << 4) | startchan;
+ if (startchan >= nchan)
+ stream_chan = 0; /* stream#0 */
err = this->comresp(this, nid, CORB_SET_CONVERTER_STREAM_CHANNEL,
- (number << 4) | startchan, NULL);
+ stream_chan, NULL);
if (err)
goto exit;
- if (nchan > 2)
- startchan += WIDGET_CHANNELS(&this->w[nid]);
+ startchan += WIDGET_CHANNELS(&this->w[nid]);
}
exit: