提交 b25c9da1 编写于 作者: W Wu Fengguang 提交者: Takashi Iwai

ALSA: enable concurrent digital outputs for ALC1200

Add the SPDIF pin as slave digital out to enable concurrent
HDMI/SPDIF outputs for ASUS M3A-H/HDMI with ALC1200 codec.
Tested-by: NThomas Schneider <nailstudio@gmx.net>
Signed-off-by: NWu Fengguang <fengguang.wu@intel.com>
Signed-off-by: NTakashi Iwai <tiwai@suse.de>
上级 939778ae
...@@ -229,6 +229,7 @@ struct hda_multi_out { ...@@ -229,6 +229,7 @@ struct hda_multi_out {
hda_nid_t hp_nid; /* optional DAC for HP, 0 when not exists */ hda_nid_t hp_nid; /* optional DAC for HP, 0 when not exists */
hda_nid_t extra_out_nid[3]; /* optional DACs, 0 when not exists */ hda_nid_t extra_out_nid[3]; /* optional DACs, 0 when not exists */
hda_nid_t dig_out_nid; /* digital out audio widget */ hda_nid_t dig_out_nid; /* digital out audio widget */
hda_nid_t *slave_dig_outs;
int max_channels; /* currently supported analog channels */ int max_channels; /* currently supported analog channels */
int dig_out_used; /* current usage of digital out (HDA_DIG_XXX) */ int dig_out_used; /* current usage of digital out (HDA_DIG_XXX) */
int no_share_stream; /* don't share a stream with multiple pins */ int no_share_stream; /* don't share a stream with multiple pins */
......
...@@ -349,6 +349,7 @@ struct alc_config_preset { ...@@ -349,6 +349,7 @@ struct alc_config_preset {
hda_nid_t *dac_nids; hda_nid_t *dac_nids;
hda_nid_t dig_out_nid; /* optional */ hda_nid_t dig_out_nid; /* optional */
hda_nid_t hp_nid; /* optional */ hda_nid_t hp_nid; /* optional */
hda_nid_t *slave_dig_outs;
unsigned int num_adc_nids; unsigned int num_adc_nids;
hda_nid_t *adc_nids; hda_nid_t *adc_nids;
hda_nid_t *capsrc_nids; hda_nid_t *capsrc_nids;
...@@ -824,6 +825,7 @@ static void setup_preset(struct alc_spec *spec, ...@@ -824,6 +825,7 @@ static void setup_preset(struct alc_spec *spec,
spec->multiout.num_dacs = preset->num_dacs; spec->multiout.num_dacs = preset->num_dacs;
spec->multiout.dac_nids = preset->dac_nids; spec->multiout.dac_nids = preset->dac_nids;
spec->multiout.dig_out_nid = preset->dig_out_nid; spec->multiout.dig_out_nid = preset->dig_out_nid;
spec->multiout.slave_dig_outs = preset->slave_dig_outs;
spec->multiout.hp_nid = preset->hp_nid; spec->multiout.hp_nid = preset->hp_nid;
spec->num_mux_defs = preset->num_mux_defs; spec->num_mux_defs = preset->num_mux_defs;
...@@ -3107,6 +3109,7 @@ static int alc_build_pcms(struct hda_codec *codec) ...@@ -3107,6 +3109,7 @@ static int alc_build_pcms(struct hda_codec *codec)
/* SPDIF for stream index #1 */ /* SPDIF for stream index #1 */
if (spec->multiout.dig_out_nid || spec->dig_in_nid) { if (spec->multiout.dig_out_nid || spec->dig_in_nid) {
codec->num_pcms = 2; codec->num_pcms = 2;
codec->slave_dig_outs = spec->multiout.slave_dig_outs;
info = spec->pcm_rec + 1; info = spec->pcm_rec + 1;
info->name = spec->stream_name_digital; info->name = spec->stream_name_digital;
if (spec->dig_out_type) if (spec->dig_out_type)
...@@ -8603,6 +8606,10 @@ static struct snd_pci_quirk alc883_cfg_tbl[] = { ...@@ -8603,6 +8606,10 @@ static struct snd_pci_quirk alc883_cfg_tbl[] = {
{} {}
}; };
static hda_nid_t alc1200_slave_dig_outs[] = {
ALC883_DIGOUT_NID, 0,
};
static struct alc_config_preset alc883_presets[] = { static struct alc_config_preset alc883_presets[] = {
[ALC883_3ST_2ch_DIG] = { [ALC883_3ST_2ch_DIG] = {
.mixers = { alc883_3ST_2ch_mixer }, .mixers = { alc883_3ST_2ch_mixer },
...@@ -8943,6 +8950,7 @@ static struct alc_config_preset alc883_presets[] = { ...@@ -8943,6 +8950,7 @@ static struct alc_config_preset alc883_presets[] = {
.dac_nids = alc883_dac_nids, .dac_nids = alc883_dac_nids,
.dig_out_nid = ALC1200_DIGOUT_NID, .dig_out_nid = ALC1200_DIGOUT_NID,
.dig_in_nid = ALC883_DIGIN_NID, .dig_in_nid = ALC883_DIGIN_NID,
.slave_dig_outs = alc1200_slave_dig_outs,
.num_channel_mode = ARRAY_SIZE(alc883_sixstack_modes), .num_channel_mode = ARRAY_SIZE(alc883_sixstack_modes),
.channel_mode = alc883_sixstack_modes, .channel_mode = alc883_sixstack_modes,
.input_mux = &alc883_capture_source, .input_mux = &alc883_capture_source,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册