Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 21949f00 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: hda - Fix NID association for capture mixers



Fix the wrong implementation of NID <-> kctl mapping for capture mixers
introduced by the ocmmit 5b0cb1d8.
So far, the driver returns an error at probe.

Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 52402791
Loading
Loading
Loading
Loading
+0 −26
Original line number Diff line number Diff line
@@ -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);
+0 −2
Original line number Diff line number Diff line
@@ -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
+1 −2
Original line number Diff line number Diff line
@@ -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;
	}
+8 −4
Original line number Diff line number Diff line
@@ -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,11 +763,14 @@ 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);
		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) {
		err = snd_hda_ctl_add(codec, 0,
+1 −2
Original line number Diff line number Diff line
@@ -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;
	}
Loading