summaryrefslogtreecommitdiff
path: root/sys/dev/pci
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/pci')
-rw-r--r--sys/dev/pci/azalia.c50
-rw-r--r--sys/dev/pci/azalia.h1
2 files changed, 22 insertions, 29 deletions
diff --git a/sys/dev/pci/azalia.c b/sys/dev/pci/azalia.c
index 8ed0519f958..4a5bd01c4c2 100644
--- a/sys/dev/pci/azalia.c
+++ b/sys/dev/pci/azalia.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: azalia.c,v 1.2 2006/05/08 03:28:46 brad Exp $ */
+/* $OpenBSD: azalia.c,v 1.3 2006/05/08 03:52:37 brad Exp $ */
/* $NetBSD: azalia.c,v 1.15 2005/09/29 04:14:03 kent Exp $ */
/*-
@@ -37,7 +37,6 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#define AZALIA_DEBUG
/*
* High Definition Audio Specification
* ftp://download.intel.com/standards/hdaudio/pdf/HDAudio_03.pdf
@@ -1082,11 +1081,11 @@ azalia_codec_init(codec_t *this)
err = this->init_dacgroup(this);
if (err)
return err;
-#ifdef AZALIA_DEBUGGGG
+#ifdef AZALIA_DEBUG
for (i = 0; i < this->ndacgroups; i++) {
DPRINTF(("%s: dacgroup[%d]:", __func__, i));
- for (n = 0; n < this->dacgroups[group].nconv; n++) {
- DPRINTF((" %2.2x", this->dacgroups[group].conv[n]));
+ for (n = 0; n < this->dacgroups[i].nconv; n++) {
+ DPRINTF((" %2.2x", this->dacgroups[i].conv[n]));
}
DPRINTF(("\n"));
}
@@ -1185,8 +1184,7 @@ azalia_codec_construct_format(codec_t *this)
bits_rates = this->w[nid].d.audio.bits_rates;
for (dac = 0; dac < group->nconv; dac++) {
for (chan = 0, i = 0; i <= dac; i++)
- chan += this->w[group->conv[dac]].widgetcap
- & COP_AWCAP_STEREO ? 2 : 1;
+ chan += WIDGET_CHANNELS(&this->w[group->conv[dac]]);
azalia_codec_add_bits(this, chan, bits_rates, AUMODE_PLAY);
}
/* print playback capability */
@@ -1202,7 +1200,7 @@ azalia_codec_construct_format(codec_t *this)
/* register formats for recording */
nid = this->adcs[this->cur_adc];
- chan = this->w[nid].widgetcap & COP_AWCAP_STEREO ? 2 : 1;
+ chan = WIDGET_CHANNELS(&this->w[nid]);
bits_rates = this->w[nid].d.audio.bits_rates;
azalia_codec_add_bits(this, chan, bits_rates, AUMODE_RECORD);
/* print recording capability */
@@ -1333,9 +1331,9 @@ azalia_codec_connect_stream(codec_t *this, int dir, uint16_t fmt, int number)
}
group = &this->dacgroups[this->cur_dac];
flag222 = group->nconv >= 3 &&
- (this->w[group->conv[0]].widgetcap & COP_AWCAP_STEREO) &&
- (this->w[group->conv[1]].widgetcap & COP_AWCAP_STEREO) &&
- (this->w[group->conv[2]].widgetcap & COP_AWCAP_STEREO);
+ (WIDGET_CHANNELS(&this->w[group->conv[0]]) == 2) &&
+ (WIDGET_CHANNELS(&this->w[group->conv[1]]) == 2) &&
+ (WIDGET_CHANNELS(&this->w[group->conv[2]]) == 2);
nchan = (fmt & HDA_SD_FMT_CHAN) + 1;
startchan = 0;
for (i = 0; i < group->nconv; i++) {
@@ -1355,7 +1353,7 @@ azalia_codec_connect_stream(codec_t *this, int dir, uint16_t fmt, int number)
(number << 4) | startchan, NULL);
if (err)
goto exit;
- startchan += this->w[nid].widgetcap & COP_AWCAP_STEREO ? 2 : 1;
+ startchan += WIDGET_CHANNELS(&this->w[nid]);
}
exit:
@@ -1518,8 +1516,7 @@ azalia_mixer_init(codec_t *this)
d->next = AUDIO_MIXER_LAST;
d->prev = AUDIO_MIXER_LAST;
m->target = MI_TARGET_OUTAMP;
- d->un.v.num_channels = w->widgetcap & COP_AWCAP_STEREO
- ? 2 : 1;
+ d->un.v.num_channels = WIDGET_CHANNELS(w);
#ifdef MAX_VOLUME_255
d->un.v.units.name[0] = 0;
d->un.v.delta = AUDIO_MAX_GAIN /
@@ -1579,8 +1576,7 @@ azalia_mixer_init(codec_t *this)
d->next = AUDIO_MIXER_LAST;
d->prev = AUDIO_MIXER_LAST;
m->target = j;
- d->un.v.num_channels =
- w->widgetcap & COP_AWCAP_STEREO ? 2 : 1;
+ d->un.v.num_channels = WIDGET_CHANNELS(w);
#ifdef MAX_VOLUME_255
d->un.v.units.name[0] = 0;
d->un.v.delta = AUDIO_MAX_GAIN /
@@ -1756,7 +1752,7 @@ azalia_mixer_init(codec_t *this)
mc.un.value.num_channels = 1;
mc.un.value.level[0] = AUDIO_MAX_GAIN / 2;
if (this->mixers[i].target != MI_TARGET_VOLUME &&
- this->w[this->mixers[i].nid].widgetcap & COP_AWCAP_STEREO) {
+ WIDGET_CHANNELS(&this->w[this->mixers[i].nid]) == 2) {
mc.un.value.num_channels = 2;
mc.un.value.level[1] = AUDIO_MAX_GAIN / 2;
}
@@ -1809,7 +1805,8 @@ azalia_mixer_get(const codec_t *this, mixer_ctrl_t *mc)
return err;
mc->un.value.level[0] = azalia_mixer_from_device_value(this, m,
CORB_GAGM_GAIN(result));
- if (this->w[m->nid].widgetcap & COP_AWCAP_STEREO) {
+ mc->un.value.num_channels = WIDGET_CHANNELS(&this->w[m->nid]);
+ if (mc->un.value.num_channels == 2) {
err = this->comresp(this, m->nid,
CORB_GET_AMPLIFIER_GAIN_MUTE, CORB_GAGM_INPUT |
CORB_GAGM_RIGHT | MI_TARGET_INAMP(m->target),
@@ -1818,9 +1815,6 @@ azalia_mixer_get(const codec_t *this, mixer_ctrl_t *mc)
return err;
mc->un.value.level[1] = azalia_mixer_from_device_value
(this, m, CORB_GAGM_GAIN(result));
- mc->un.value.num_channels = 2;
- } else {
- mc->un.value.num_channels = 1;
}
}
@@ -1841,7 +1835,8 @@ azalia_mixer_get(const codec_t *this, mixer_ctrl_t *mc)
return err;
mc->un.value.level[0] = azalia_mixer_from_device_value(this, m,
CORB_GAGM_GAIN(result));
- if (this->w[m->nid].widgetcap & COP_AWCAP_STEREO) {
+ mc->un.value.num_channels = WIDGET_CHANNELS(&this->w[m->nid]);
+ if (mc->un.value.num_channels == 2) {
err = this->comresp(this, m->nid,
CORB_GET_AMPLIFIER_GAIN_MUTE,
CORB_GAGM_OUTPUT | CORB_GAGM_RIGHT | 0, &result);
@@ -1849,9 +1844,6 @@ azalia_mixer_get(const codec_t *this, mixer_ctrl_t *mc)
return err;
mc->un.value.level[1] = azalia_mixer_from_device_value
(this, m, CORB_GAGM_GAIN(result));
- mc->un.value.num_channels = 2;
- } else {
- mc->un.value.num_channels = 1;
}
}
@@ -1943,7 +1935,7 @@ azalia_mixer_set(codec_t *this, const mixer_ctrl_t *mc)
value, &result);
if (err)
return err;
- if (this->w[m->nid].widgetcap & COP_AWCAP_STEREO) {
+ if (WIDGET_CHANNELS(&this->w[m->nid]) == 2) {
err = this->comresp(this, m->nid,
CORB_GET_AMPLIFIER_GAIN_MUTE, CORB_GAGM_INPUT |
CORB_GAGM_RIGHT | MI_TARGET_INAMP(m->target),
@@ -1984,7 +1976,7 @@ azalia_mixer_set(codec_t *this, const mixer_ctrl_t *mc)
if (err)
return err;
if (mc->un.value.num_channels >= 2 &&
- this->w[m->nid].widgetcap & COP_AWCAP_STEREO) {
+ WIDGET_CHANNELS(&this->w[m->nid]) == 2) {
if (!azalia_mixer_validate_value(this, m,
mc->un.value.level[1]))
return EINVAL;
@@ -2020,7 +2012,7 @@ azalia_mixer_set(codec_t *this, const mixer_ctrl_t *mc)
value, &result);
if (err)
return err;
- if (this->w[m->nid].widgetcap & COP_AWCAP_STEREO) {
+ if (WIDGET_CHANNELS(&this->w[m->nid]) == 2) {
err = this->comresp(this, m->nid,
CORB_GET_AMPLIFIER_GAIN_MUTE,
CORB_GAGM_OUTPUT | CORB_GAGM_RIGHT, &result);
@@ -2057,7 +2049,7 @@ azalia_mixer_set(codec_t *this, const mixer_ctrl_t *mc)
if (err)
return err;
if (mc->un.value.num_channels >= 2 &&
- this->w[m->nid].widgetcap & COP_AWCAP_STEREO) {
+ WIDGET_CHANNELS(&this->w[m->nid]) == 2) {
if (!azalia_mixer_validate_value(this, m,
mc->un.value.level[1]))
return EINVAL;
diff --git a/sys/dev/pci/azalia.h b/sys/dev/pci/azalia.h
index 945383dc9a7..c22d478f663 100644
--- a/sys/dev/pci/azalia.h
+++ b/sys/dev/pci/azalia.h
@@ -490,6 +490,7 @@ typedef struct {
} volume;
} d;
} widget_t;
+#define WIDGET_CHANNELS(w) ((w)->widgetcap & COP_AWCAP_STEREO ? 2 : 1)
typedef struct {
mixer_devinfo_t devinfo;