From: Lydia Wang lydiawang@viatech.com.cn Subject: ALSA: VIA HDA: Modify notify_aa_path_ctls() function.
Modify notify_aa_path_ctls() function to get volume control items name dynamically instead of by giving static item name.
Signed-off-by: Lydia Wang lydiawang@viatech.com.cn --- sound/pci/hda/patch_via.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-)
--- a/sound/pci/hda/patch_via.c +++ b/sound/pci/hda/patch_via.c @@ -832,16 +832,23 @@
static void notify_aa_path_ctls(struct hda_codec *codec) { - int i; - struct snd_ctl_elem_id id; - const char *labels[] = {"Mic", "Front Mic", "Line"}; - - memset(&id, 0, sizeof(id)); - id.iface = SNDRV_CTL_ELEM_IFACE_MIXER; - for (i = 0; i < ARRAY_SIZE(labels); i++) { - sprintf(id.name, "%s Playback Volume", labels[i]); - snd_ctl_notify(codec->bus->card, SNDRV_CTL_EVENT_MASK_VALUE, - &id); + struct snd_card *card = codec->bus->card; + struct snd_kcontrol *kctl; + struct via_spec *spec = codec->spec; + const struct auto_pin_cfg *cfg = &spec->autocfg; + list_for_each_entry(kctl, &card->controls, list) { + int i; + for (i = 0; i < cfg->num_inputs; i++) { + char name[32]; + const char *label; + label = hda_get_autocfg_input_label(codec, cfg, i); + sprintf(name, "%s Playback Volume", label); + if (strcmp(kctl->id.name, name) == 0) { + snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE, + &kctl->id); + break; + } + } } }