diff options
author | Jacob Meuser <jakemsr@cvs.openbsd.org> | 2009-04-24 15:07:58 +0000 |
---|---|---|
committer | Jacob Meuser <jakemsr@cvs.openbsd.org> | 2009-04-24 15:07:58 +0000 |
commit | 37580b6acc6c02cb138cec4f6b699e412d4ec852 (patch) | |
tree | db77e13335587b1bcea0b2625b3944a4524356b4 /sys/dev/pci/azalia.c | |
parent | f5e309798cb03dc46e8b5e0d066ffb8ffd8afbf2 (diff) |
"selected" connections don't mean much for mixer widgets. all
connections to a mixer widget are enabled and unmuted by default.
when finding a default connection through a mixer, check all
connections, not just the "selected" connection.
Diffstat (limited to 'sys/dev/pci/azalia.c')
-rw-r--r-- | sys/dev/pci/azalia.c | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/sys/dev/pci/azalia.c b/sys/dev/pci/azalia.c index 02b5fc3aa66..1569cb11161 100644 --- a/sys/dev/pci/azalia.c +++ b/sys/dev/pci/azalia.c @@ -1,4 +1,4 @@ -/* $OpenBSD: azalia.c,v 1.117 2009/04/04 02:59:39 jakemsr Exp $ */ +/* $OpenBSD: azalia.c,v 1.118 2009/04/24 15:07:57 jakemsr Exp $ */ /* $NetBSD: azalia.c,v 1.20 2006/05/07 08:31:44 kent Exp $ */ /*- @@ -1353,7 +1353,7 @@ int azalia_codec_find_defdac(codec_t *this, int index, int depth) { const widget_t *w; - int ret; + int i, ret; w = &this->w[index]; if (w->enable == 0) @@ -1370,11 +1370,25 @@ azalia_codec_find_defdac(codec_t *this, int index, int depth) return -1; if (w->nconnections > 0) { - index = w->connections[w->selected]; - if (VALID_WIDGET_NID(index, this)) { - ret = azalia_codec_find_defdac(this, index, depth); - if (ret >= 0) - return ret; + /* by default, all mixer connections are active */ + if (w->type == COP_AWTYPE_AUDIO_MIXER) { + for (i = 0; i < w->nconnections; i++) { + index = w->connections[i]; + if (!azalia_widget_enabled(this, index)) + continue; + ret = azalia_codec_find_defdac(this, index, + depth); + if (ret >= 0) + return ret; + } + } else { + index = w->connections[w->selected]; + if (VALID_WIDGET_NID(index, this)) { + ret = azalia_codec_find_defdac(this, index, + depth); + if (ret >= 0) + return ret; + } } } |