Commit a5973103 authored by Takashi Iwai's avatar Takashi Iwai

ALSA: hda:via - Skip creations of empty PCM streams

If no analog I/O is defined, skip creating the corresponding PCM stream.
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 218264ae
...@@ -1506,39 +1506,49 @@ static int via_build_pcms(struct hda_codec *codec) ...@@ -1506,39 +1506,49 @@ static int via_build_pcms(struct hda_codec *codec)
struct via_spec *spec = codec->spec; struct via_spec *spec = codec->spec;
struct hda_pcm *info = spec->pcm_rec; struct hda_pcm *info = spec->pcm_rec;
codec->num_pcms = 1; codec->num_pcms = 0;
codec->pcm_info = info; codec->pcm_info = info;
snprintf(spec->stream_name_analog, sizeof(spec->stream_name_analog), if (spec->multiout.num_dacs || spec->num_adc_nids) {
snprintf(spec->stream_name_analog,
sizeof(spec->stream_name_analog),
"%s Analog", codec->chip_name); "%s Analog", codec->chip_name);
info->name = spec->stream_name_analog; info->name = spec->stream_name_analog;
if (spec->multiout.num_dacs) {
if (!spec->stream_analog_playback) if (!spec->stream_analog_playback)
spec->stream_analog_playback = &via_pcm_analog_playback; spec->stream_analog_playback =
&via_pcm_analog_playback;
info->stream[SNDRV_PCM_STREAM_PLAYBACK] = info->stream[SNDRV_PCM_STREAM_PLAYBACK] =
*spec->stream_analog_playback; *spec->stream_analog_playback;
info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid =
spec->multiout.dac_nids[0]; spec->multiout.dac_nids[0];
info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max = info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max =
spec->multiout.max_channels; spec->multiout.max_channels;
}
if (!spec->stream_analog_capture) { if (!spec->stream_analog_capture) {
if (spec->dyn_adc_switch) if (spec->dyn_adc_switch)
spec->stream_analog_capture = spec->stream_analog_capture =
&via_pcm_dyn_adc_analog_capture; &via_pcm_dyn_adc_analog_capture;
else else
spec->stream_analog_capture = &via_pcm_analog_capture; spec->stream_analog_capture =
&via_pcm_analog_capture;
} }
if (spec->num_adc_nids) {
info->stream[SNDRV_PCM_STREAM_CAPTURE] = info->stream[SNDRV_PCM_STREAM_CAPTURE] =
*spec->stream_analog_capture; *spec->stream_analog_capture;
info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adc_nids[0]; info->stream[SNDRV_PCM_STREAM_CAPTURE].nid =
spec->adc_nids[0];
if (!spec->dyn_adc_switch) if (!spec->dyn_adc_switch)
info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams = info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams =
spec->num_adc_nids; spec->num_adc_nids;
}
if (spec->multiout.dig_out_nid || spec->dig_in_nid) {
codec->num_pcms++; codec->num_pcms++;
info++; info++;
}
if (spec->multiout.dig_out_nid || spec->dig_in_nid) {
snprintf(spec->stream_name_digital, snprintf(spec->stream_name_digital,
sizeof(spec->stream_name_digital), sizeof(spec->stream_name_digital),
"%s Digital", codec->chip_name); "%s Digital", codec->chip_name);
...@@ -1562,17 +1572,19 @@ static int via_build_pcms(struct hda_codec *codec) ...@@ -1562,17 +1572,19 @@ static int via_build_pcms(struct hda_codec *codec)
info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = info->stream[SNDRV_PCM_STREAM_CAPTURE].nid =
spec->dig_in_nid; spec->dig_in_nid;
} }
codec->num_pcms++;
info++;
} }
if (spec->hp_dac_nid) { if (spec->hp_dac_nid) {
codec->num_pcms++;
info++;
snprintf(spec->stream_name_hp, sizeof(spec->stream_name_hp), snprintf(spec->stream_name_hp, sizeof(spec->stream_name_hp),
"%s HP", codec->chip_name); "%s HP", codec->chip_name);
info->name = spec->stream_name_hp; info->name = spec->stream_name_hp;
info->stream[SNDRV_PCM_STREAM_PLAYBACK] = via_pcm_hp_playback; info->stream[SNDRV_PCM_STREAM_PLAYBACK] = via_pcm_hp_playback;
info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid =
spec->hp_dac_nid; spec->hp_dac_nid;
codec->num_pcms++;
info++;
} }
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment