ALSA: hda/realtek - Don't create alt-stream for capture when unnecessary
When the driver finds multiple ADCs, it tries to create an alternative capture PCM stream. However, these secondary ADCs might be useless or in uncontrolled paths in some cases, e.g. when auto-mic or dynamic ADC-switching is enabled. Also, when only a single capture source is available, the multi-streams don't make sense, too. With this patch, the driver checks such condition and skips the alt stream appropriately. Cc: <stable@kernel.org> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
ad5d875511
commit
1fa1757366
@ -2270,6 +2270,7 @@ static int alc_build_pcms(struct hda_codec *codec)
|
|||||||
struct alc_spec *spec = codec->spec;
|
struct alc_spec *spec = codec->spec;
|
||||||
struct hda_pcm *info = spec->pcm_rec;
|
struct hda_pcm *info = spec->pcm_rec;
|
||||||
const struct hda_pcm_stream *p;
|
const struct hda_pcm_stream *p;
|
||||||
|
bool have_multi_adcs;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
codec->num_pcms = 1;
|
codec->num_pcms = 1;
|
||||||
@ -2348,8 +2349,11 @@ static int alc_build_pcms(struct hda_codec *codec)
|
|||||||
/* If the use of more than one ADC is requested for the current
|
/* If the use of more than one ADC is requested for the current
|
||||||
* model, configure a second analog capture-only PCM.
|
* model, configure a second analog capture-only PCM.
|
||||||
*/
|
*/
|
||||||
|
have_multi_adcs = (spec->num_adc_nids > 1) &&
|
||||||
|
!spec->dyn_adc_switch && !spec->auto_mic &&
|
||||||
|
(!spec->input_mux || spec->input_mux->num_items > 1);
|
||||||
/* Additional Analaog capture for index #2 */
|
/* Additional Analaog capture for index #2 */
|
||||||
if (spec->alt_dac_nid || spec->num_adc_nids > 1) {
|
if (spec->alt_dac_nid || have_multi_adcs) {
|
||||||
codec->num_pcms = 3;
|
codec->num_pcms = 3;
|
||||||
info = spec->pcm_rec + 2;
|
info = spec->pcm_rec + 2;
|
||||||
info->name = spec->stream_name_analog;
|
info->name = spec->stream_name_analog;
|
||||||
@ -2365,7 +2369,7 @@ static int alc_build_pcms(struct hda_codec *codec)
|
|||||||
alc_pcm_null_stream;
|
alc_pcm_null_stream;
|
||||||
info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = 0;
|
info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = 0;
|
||||||
}
|
}
|
||||||
if (spec->num_adc_nids > 1) {
|
if (have_multi_adcs) {
|
||||||
p = spec->stream_analog_alt_capture;
|
p = spec->stream_analog_alt_capture;
|
||||||
if (!p)
|
if (!p)
|
||||||
p = &alc_pcm_analog_alt_capture;
|
p = &alc_pcm_analog_alt_capture;
|
||||||
|
Loading…
Reference in New Issue
Block a user