diff --git a/src/add-ons/kernel/drivers/audio/hda/hda_codec.cpp b/src/add-ons/kernel/drivers/audio/hda/hda_codec.cpp index 74de641206..2c6f85b9ee 100644 --- a/src/add-ons/kernel/drivers/audio/hda/hda_codec.cpp +++ b/src/add-ons/kernel/drivers/audio/hda/hda_codec.cpp @@ -897,7 +897,8 @@ hda_widget_find_input_path(hda_audio_group* audioGroup, hda_widget* widget, switch (widget->type) { case WT_PIN_COMPLEX: // already used - if (widget->flags & WIDGET_FLAG_INPUT_PATH) + if ((widget->flags & (WIDGET_FLAG_INPUT_PATH + | WIDGET_FLAG_OUTPUT_PATH)) != 0) return false; if (PIN_CAP_IS_INPUT(widget->d.pin.capabilities)) { @@ -917,7 +918,8 @@ TRACE(" %*sinput: added input widget %ld\n", (int)depth * 2, "", widget->no case WT_AUDIO_SELECTOR: { // already used - if (widget->flags & WIDGET_FLAG_INPUT_PATH) + if ((widget->flags & (WIDGET_FLAG_INPUT_PATH + | WIDGET_FLAG_OUTPUT_PATH)) != 0) return false; // search for pin complex in this path diff --git a/src/add-ons/kernel/drivers/audio/hda/hda_multi_audio.cpp b/src/add-ons/kernel/drivers/audio/hda/hda_multi_audio.cpp index 14fcd56871..0c50f8b1b0 100644 --- a/src/add-ons/kernel/drivers/audio/hda/hda_multi_audio.cpp +++ b/src/add-ons/kernel/drivers/audio/hda/hda_multi_audio.cpp @@ -442,7 +442,7 @@ hda_create_control_for_complex(hda_multi* multi, uint32* index, uint32 parent, return; } - if ((widget.type & WT_AUDIO_MIXER) != 0) { + if (widget.type == WT_AUDIO_MIXER) { hda_create_channel_control(multi, index, parent, 0, widget, true, widget.capabilities.input_amplifier, 0, gain, mute); if (!gain && !mute) { @@ -451,8 +451,7 @@ hda_create_control_for_complex(hda_multi* multi, uint32* index, uint32 parent, } } - if ((widget.type & WT_AUDIO_OUTPUT) == 0 - && widget.num_inputs > 0) { + if (widget.type != WT_AUDIO_OUTPUT && widget.num_inputs > 0) { hda_widget& child = *hda_audio_group_get_widget(audioGroup, widget.inputs[widget.active_input]); hda_create_control_for_complex(multi, index, parent, child, gain, mute); @@ -543,6 +542,12 @@ hda_create_controls_list(hda_multi* multi) hda_create_channel_control(multi, &index, parent2, 0, widget, true, capabilities, 0, gain, mute); + if (widget.num_inputs > 1) { + TRACE(" create mux for nid %lu\n", widget.node_id); + hda_create_mux_control(multi, &index, parent2, widget); + continue; + } + hda_widget *mixer = hda_audio_group_get_widget(audioGroup, widget.inputs[0]); if (mixer->type != WT_AUDIO_MIXER && mixer->type != WT_AUDIO_SELECTOR)