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:
Takashi Iwai 2009-12-23 08:31:59 +01:00
parent 524027916e
commit 21949f00a0
7 changed files with 12 additions and 40 deletions

View File

@ -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); 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 #ifdef CONFIG_SND_HDA_POWER_SAVE
static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg, static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
unsigned int power_state); unsigned int power_state);

View File

@ -343,8 +343,6 @@ int snd_hda_check_board_codec_sid_config(struct hda_codec *codec,
const struct snd_pci_quirk *tbl); const struct snd_pci_quirk *tbl);
int snd_hda_add_new_ctls(struct hda_codec *codec, int snd_hda_add_new_ctls(struct hda_codec *codec,
struct snd_kcontrol_new *knew); 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 * unsolicited event handler

View File

@ -244,8 +244,7 @@ static int ad198x_build_controls(struct hda_codec *codec)
if (!kctl) if (!kctl)
kctl = snd_hda_find_mixer_ctl(codec, "Input Source"); kctl = snd_hda_find_mixer_ctl(codec, "Input Source");
for (i = 0; kctl && i < kctl->count; i++) { for (i = 0; kctl && i < kctl->count; i++) {
err = snd_hda_add_nids(codec, kctl, i, spec->capsrc_nids, err = snd_hda_add_nid(codec, kctl, i, spec->capsrc_nids[i]);
spec->input_mux->num_items);
if (err < 0) if (err < 0)
return err; return err;
} }

View File

@ -753,6 +753,7 @@ static int build_input(struct hda_codec *codec)
spec->capture_bind[1] = make_bind_capture(codec, &snd_hda_bind_vol); spec->capture_bind[1] = make_bind_capture(codec, &snd_hda_bind_vol);
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
struct snd_kcontrol *kctl; struct snd_kcontrol *kctl;
int n;
if (!spec->capture_bind[i]) if (!spec->capture_bind[i])
return -ENOMEM; return -ENOMEM;
kctl = snd_ctl_new1(&cs_capture_ctls[i], codec); 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); err = snd_hda_ctl_add(codec, 0, kctl);
if (err < 0) if (err < 0)
return err; return err;
err = snd_hda_add_nids(codec, kctl, 0, spec->adc_nid, for (n = 0; n < AUTO_PIN_LAST; n++) {
spec->num_inputs); if (!spec->adc_nid[n])
if (err < 0) continue;
return err; 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) { if (spec->num_inputs > 1 && !spec->mic_detect) {

View File

@ -345,8 +345,7 @@ static int cmi9880_build_controls(struct hda_codec *codec)
/* assign Capture Source enums to NID */ /* assign Capture Source enums to NID */
kctl = snd_hda_find_mixer_ctl(codec, "Capture Source"); kctl = snd_hda_find_mixer_ctl(codec, "Capture Source");
for (i = 0; kctl && i < kctl->count; i++) { for (i = 0; kctl && i < kctl->count; i++) {
err = snd_hda_add_nids(codec, kctl, i, spec->adc_nids, err = snd_hda_add_nid(codec, kctl, i, spec->adc_nids[i]);
spec->input_mux->num_items);
if (err < 0) if (err < 0)
return err; return err;
} }

View File

@ -2551,8 +2551,7 @@ static int alc_build_controls(struct hda_codec *codec)
hda_nid_t *nids = spec->capsrc_nids; hda_nid_t *nids = spec->capsrc_nids;
if (!nids) if (!nids)
nids = spec->adc_nids; nids = spec->adc_nids;
err = snd_hda_add_nids(codec, kctl, i, nids, err = snd_hda_add_nid(codec, kctl, i, nids[i]);
spec->input_mux->num_items);
if (err < 0) if (err < 0)
return err; return err;
} }

View File

@ -1907,8 +1907,7 @@ static int via_build_controls(struct hda_codec *codec)
/* assign Capture Source enums to NID */ /* assign Capture Source enums to NID */
kctl = snd_hda_find_mixer_ctl(codec, "Input Source"); kctl = snd_hda_find_mixer_ctl(codec, "Input Source");
for (i = 0; kctl && i < kctl->count; i++) { for (i = 0; kctl && i < kctl->count; i++) {
err = snd_hda_add_nids(codec, kctl, i, spec->mux_nids, err = snd_hda_add_nid(codec, kctl, i, spec->mux_nids[i]);
spec->input_mux->num_items);
if (err < 0) if (err < 0)
return err; return err;
} }