aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2009-12-23 02:31:59 -0500
committerTakashi Iwai <tiwai@suse.de>2009-12-23 02:38:28 -0500
commit21949f00a022e090a7e8bc9a01dfca88273c6146 (patch)
treeea13d6d9cef974da83a7cb5ccacbbd0ca7fbf3b4
parent524027916e5763a0c9a7da80aa8dd013a14a0440 (diff)
ALSA: hda - Fix NID association for capture mixers
Fix the wrong implementation of NID <-> kctl mapping for capture mixers introduced by the ocmmit 5b0cb1d850c26893b1468b3a519433a1b7a176be. So far, the driver returns an error at probe. Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r--sound/pci/hda/hda_codec.c26
-rw-r--r--sound/pci/hda/hda_local.h2
-rw-r--r--sound/pci/hda/patch_analog.c3
-rw-r--r--sound/pci/hda/patch_cirrus.c12
-rw-r--r--sound/pci/hda/patch_cmedia.c3
-rw-r--r--sound/pci/hda/patch_realtek.c3
-rw-r--r--sound/pci/hda/patch_via.c3
7 files changed, 12 insertions, 40 deletions
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index c848ec0f085e..29c90d748c91 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -3537,32 +3537,6 @@ int snd_hda_add_new_ctls(struct hda_codec *codec, struct snd_kcontrol_new *knew)
3537} 3537}
3538EXPORT_SYMBOL_HDA(snd_hda_add_new_ctls); 3538EXPORT_SYMBOL_HDA(snd_hda_add_new_ctls);
3539 3539
3540/**
3541 * snd_hda_add_nids - assign nids to controls from the array
3542 * @codec: the HDA codec
3543 * @kctl: struct snd_kcontrol
3544 * @index: index to kctl
3545 * @nids: the array of hda_nid_t
3546 * @size: count of hda_nid_t items
3547 *
3548 * This helper function assigns NIDs in the given array to a control element.
3549 *
3550 * Returns 0 if successful, or a negative error code.
3551 */
3552int snd_hda_add_nids(struct hda_codec *codec, struct snd_kcontrol *kctl,
3553 unsigned int index, hda_nid_t *nids, unsigned int size)
3554{
3555 int err;
3556
3557 for ( ; size > 0; size--, nids++) {
3558 err = snd_hda_add_nid(codec, kctl, index, *nids);
3559 if (err < 0)
3560 return err;
3561 }
3562 return 0;
3563}
3564EXPORT_SYMBOL_HDA(snd_hda_add_nids);
3565
3566#ifdef CONFIG_SND_HDA_POWER_SAVE 3540#ifdef CONFIG_SND_HDA_POWER_SAVE
3567static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg, 3541static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
3568 unsigned int power_state); 3542 unsigned int power_state);
diff --git a/sound/pci/hda/hda_local.h b/sound/pci/hda/hda_local.h
index d505d052972e..7cee364976ff 100644
--- a/sound/pci/hda/hda_local.h
+++ b/sound/pci/hda/hda_local.h
@@ -343,8 +343,6 @@ int snd_hda_check_board_codec_sid_config(struct hda_codec *codec,
343 const struct snd_pci_quirk *tbl); 343 const struct snd_pci_quirk *tbl);
344int snd_hda_add_new_ctls(struct hda_codec *codec, 344int snd_hda_add_new_ctls(struct hda_codec *codec,
345 struct snd_kcontrol_new *knew); 345 struct snd_kcontrol_new *knew);
346int snd_hda_add_nids(struct hda_codec *codec, struct snd_kcontrol *kctl,
347 unsigned int index, hda_nid_t *nids, unsigned int size);
348 346
349/* 347/*
350 * unsolicited event handler 348 * unsolicited event handler
diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c
index 92b72d4f3984..45ee352df329 100644
--- a/sound/pci/hda/patch_analog.c
+++ b/sound/pci/hda/patch_analog.c
@@ -244,8 +244,7 @@ static int ad198x_build_controls(struct hda_codec *codec)
244 if (!kctl) 244 if (!kctl)
245 kctl = snd_hda_find_mixer_ctl(codec, "Input Source"); 245 kctl = snd_hda_find_mixer_ctl(codec, "Input Source");
246 for (i = 0; kctl && i < kctl->count; i++) { 246 for (i = 0; kctl && i < kctl->count; i++) {
247 err = snd_hda_add_nids(codec, kctl, i, spec->capsrc_nids, 247 err = snd_hda_add_nid(codec, kctl, i, spec->capsrc_nids[i]);
248 spec->input_mux->num_items);
249 if (err < 0) 248 if (err < 0)
250 return err; 249 return err;
251 } 250 }
diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c
index 093cfbb55e9e..7de782a5b8f4 100644
--- a/sound/pci/hda/patch_cirrus.c
+++ b/sound/pci/hda/patch_cirrus.c
@@ -753,6 +753,7 @@ static int build_input(struct hda_codec *codec)
753 spec->capture_bind[1] = make_bind_capture(codec, &snd_hda_bind_vol); 753 spec->capture_bind[1] = make_bind_capture(codec, &snd_hda_bind_vol);
754 for (i = 0; i < 2; i++) { 754 for (i = 0; i < 2; i++) {
755 struct snd_kcontrol *kctl; 755 struct snd_kcontrol *kctl;
756 int n;
756 if (!spec->capture_bind[i]) 757 if (!spec->capture_bind[i])
757 return -ENOMEM; 758 return -ENOMEM;
758 kctl = snd_ctl_new1(&cs_capture_ctls[i], codec); 759 kctl = snd_ctl_new1(&cs_capture_ctls[i], codec);
@@ -762,10 +763,13 @@ static int build_input(struct hda_codec *codec)
762 err = snd_hda_ctl_add(codec, 0, kctl); 763 err = snd_hda_ctl_add(codec, 0, kctl);
763 if (err < 0) 764 if (err < 0)
764 return err; 765 return err;
765 err = snd_hda_add_nids(codec, kctl, 0, spec->adc_nid, 766 for (n = 0; n < AUTO_PIN_LAST; n++) {
766 spec->num_inputs); 767 if (!spec->adc_nid[n])
767 if (err < 0) 768 continue;
768 return err; 769 err = snd_hda_add_nid(codec, kctl, 0, spec->adc_nid[i]);
770 if (err < 0)
771 return err;
772 }
769 } 773 }
770 774
771 if (spec->num_inputs > 1 && !spec->mic_detect) { 775 if (spec->num_inputs > 1 && !spec->mic_detect) {
diff --git a/sound/pci/hda/patch_cmedia.c b/sound/pci/hda/patch_cmedia.c
index cc1c22370a60..ff60908f4554 100644
--- a/sound/pci/hda/patch_cmedia.c
+++ b/sound/pci/hda/patch_cmedia.c
@@ -345,8 +345,7 @@ static int cmi9880_build_controls(struct hda_codec *codec)
345 /* assign Capture Source enums to NID */ 345 /* assign Capture Source enums to NID */
346 kctl = snd_hda_find_mixer_ctl(codec, "Capture Source"); 346 kctl = snd_hda_find_mixer_ctl(codec, "Capture Source");
347 for (i = 0; kctl && i < kctl->count; i++) { 347 for (i = 0; kctl && i < kctl->count; i++) {
348 err = snd_hda_add_nids(codec, kctl, i, spec->adc_nids, 348 err = snd_hda_add_nid(codec, kctl, i, spec->adc_nids[i]);
349 spec->input_mux->num_items);
350 if (err < 0) 349 if (err < 0)
351 return err; 350 return err;
352 } 351 }
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index e7cdc6a7d61d..a45199014986 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -2551,8 +2551,7 @@ static int alc_build_controls(struct hda_codec *codec)
2551 hda_nid_t *nids = spec->capsrc_nids; 2551 hda_nid_t *nids = spec->capsrc_nids;
2552 if (!nids) 2552 if (!nids)
2553 nids = spec->adc_nids; 2553 nids = spec->adc_nids;
2554 err = snd_hda_add_nids(codec, kctl, i, nids, 2554 err = snd_hda_add_nid(codec, kctl, i, nids[i]);
2555 spec->input_mux->num_items);
2556 if (err < 0) 2555 if (err < 0)
2557 return err; 2556 return err;
2558 } 2557 }
diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c
index de4839e46762..9ddc37300f6b 100644
--- a/sound/pci/hda/patch_via.c
+++ b/sound/pci/hda/patch_via.c
@@ -1907,8 +1907,7 @@ static int via_build_controls(struct hda_codec *codec)
1907 /* assign Capture Source enums to NID */ 1907 /* assign Capture Source enums to NID */
1908 kctl = snd_hda_find_mixer_ctl(codec, "Input Source"); 1908 kctl = snd_hda_find_mixer_ctl(codec, "Input Source");
1909 for (i = 0; kctl && i < kctl->count; i++) { 1909 for (i = 0; kctl && i < kctl->count; i++) {
1910 err = snd_hda_add_nids(codec, kctl, i, spec->mux_nids, 1910 err = snd_hda_add_nid(codec, kctl, i, spec->mux_nids[i]);
1911 spec->input_mux->num_items);
1912 if (err < 0) 1911 if (err < 0)
1913 return err; 1912 return err;
1914 } 1913 }