mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-17 01:04:19 +08:00
ALSA: hda - Fix NID association for capture mixers
Fix the wrong implementation of NID <-> kctl mapping for capture mixers
introduced by the ocmmit 5b0cb1d850
.
So far, the driver returns an error at probe.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
524027916e
commit
21949f00a0
@ -3537,32 +3537,6 @@ int snd_hda_add_new_ctls(struct hda_codec *codec, struct snd_kcontrol_new *knew)
|
||||
}
|
||||
EXPORT_SYMBOL_HDA(snd_hda_add_new_ctls);
|
||||
|
||||
/**
|
||||
* snd_hda_add_nids - assign nids to controls from the array
|
||||
* @codec: the HDA codec
|
||||
* @kctl: struct snd_kcontrol
|
||||
* @index: index to kctl
|
||||
* @nids: the array of hda_nid_t
|
||||
* @size: count of hda_nid_t items
|
||||
*
|
||||
* This helper function assigns NIDs in the given array to a control element.
|
||||
*
|
||||
* Returns 0 if successful, or a negative error code.
|
||||
*/
|
||||
int snd_hda_add_nids(struct hda_codec *codec, struct snd_kcontrol *kctl,
|
||||
unsigned int index, hda_nid_t *nids, unsigned int size)
|
||||
{
|
||||
int err;
|
||||
|
||||
for ( ; size > 0; size--, nids++) {
|
||||
err = snd_hda_add_nid(codec, kctl, index, *nids);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_HDA(snd_hda_add_nids);
|
||||
|
||||
#ifdef CONFIG_SND_HDA_POWER_SAVE
|
||||
static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
|
||||
unsigned int power_state);
|
||||
|
@ -343,8 +343,6 @@ int snd_hda_check_board_codec_sid_config(struct hda_codec *codec,
|
||||
const struct snd_pci_quirk *tbl);
|
||||
int snd_hda_add_new_ctls(struct hda_codec *codec,
|
||||
struct snd_kcontrol_new *knew);
|
||||
int snd_hda_add_nids(struct hda_codec *codec, struct snd_kcontrol *kctl,
|
||||
unsigned int index, hda_nid_t *nids, unsigned int size);
|
||||
|
||||
/*
|
||||
* unsolicited event handler
|
||||
|
@ -244,8 +244,7 @@ static int ad198x_build_controls(struct hda_codec *codec)
|
||||
if (!kctl)
|
||||
kctl = snd_hda_find_mixer_ctl(codec, "Input Source");
|
||||
for (i = 0; kctl && i < kctl->count; i++) {
|
||||
err = snd_hda_add_nids(codec, kctl, i, spec->capsrc_nids,
|
||||
spec->input_mux->num_items);
|
||||
err = snd_hda_add_nid(codec, kctl, i, spec->capsrc_nids[i]);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
|
@ -753,6 +753,7 @@ static int build_input(struct hda_codec *codec)
|
||||
spec->capture_bind[1] = make_bind_capture(codec, &snd_hda_bind_vol);
|
||||
for (i = 0; i < 2; i++) {
|
||||
struct snd_kcontrol *kctl;
|
||||
int n;
|
||||
if (!spec->capture_bind[i])
|
||||
return -ENOMEM;
|
||||
kctl = snd_ctl_new1(&cs_capture_ctls[i], codec);
|
||||
@ -762,10 +763,13 @@ static int build_input(struct hda_codec *codec)
|
||||
err = snd_hda_ctl_add(codec, 0, kctl);
|
||||
if (err < 0)
|
||||
return err;
|
||||
err = snd_hda_add_nids(codec, kctl, 0, spec->adc_nid,
|
||||
spec->num_inputs);
|
||||
if (err < 0)
|
||||
return err;
|
||||
for (n = 0; n < AUTO_PIN_LAST; n++) {
|
||||
if (!spec->adc_nid[n])
|
||||
continue;
|
||||
err = snd_hda_add_nid(codec, kctl, 0, spec->adc_nid[i]);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
if (spec->num_inputs > 1 && !spec->mic_detect) {
|
||||
|
@ -345,8 +345,7 @@ static int cmi9880_build_controls(struct hda_codec *codec)
|
||||
/* assign Capture Source enums to NID */
|
||||
kctl = snd_hda_find_mixer_ctl(codec, "Capture Source");
|
||||
for (i = 0; kctl && i < kctl->count; i++) {
|
||||
err = snd_hda_add_nids(codec, kctl, i, spec->adc_nids,
|
||||
spec->input_mux->num_items);
|
||||
err = snd_hda_add_nid(codec, kctl, i, spec->adc_nids[i]);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
|
@ -2551,8 +2551,7 @@ static int alc_build_controls(struct hda_codec *codec)
|
||||
hda_nid_t *nids = spec->capsrc_nids;
|
||||
if (!nids)
|
||||
nids = spec->adc_nids;
|
||||
err = snd_hda_add_nids(codec, kctl, i, nids,
|
||||
spec->input_mux->num_items);
|
||||
err = snd_hda_add_nid(codec, kctl, i, nids[i]);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
|
@ -1907,8 +1907,7 @@ static int via_build_controls(struct hda_codec *codec)
|
||||
/* assign Capture Source enums to NID */
|
||||
kctl = snd_hda_find_mixer_ctl(codec, "Input Source");
|
||||
for (i = 0; kctl && i < kctl->count; i++) {
|
||||
err = snd_hda_add_nids(codec, kctl, i, spec->mux_nids,
|
||||
spec->input_mux->num_items);
|
||||
err = snd_hda_add_nid(codec, kctl, i, spec->mux_nids[i]);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user