ALSA: hda - Move vmaster TLV parsing to snd_hda_gen_parse_auto_config()
authorTakashi Iwai <tiwai@suse.de>
Thu, 17 Jan 2013 09:25:15 +0000 (10:25 +0100)
committerTakashi Iwai <tiwai@suse.de>
Thu, 17 Jan 2013 09:25:15 +0000 (10:25 +0100)
Add vmaster_tlv[] to hda_gen_spec and store the suggested TLV data
in snd_hda_gen_parse_auto_config().  This allows the codec driver to
correct the TLV data (e.g. mute capability) before actually creating
vmaster instance.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/hda_generic.c
sound/pci/hda/hda_generic.h

index 878556b..9c06749 100644 (file)
@@ -1601,6 +1601,9 @@ static int parse_output_paths(struct hda_codec *codec)
                path = snd_hda_get_path_from_idx(codec, spec->out_paths[0]);
                if (path)
                        spec->vmaster_nid = look_for_out_vol_nid(codec, path);
+               if (spec->vmaster_nid)
+                       snd_hda_set_vmaster_tlv(codec, spec->vmaster_nid,
+                                               HDA_OUTPUT, spec->vmaster_tlv);
        }
 
        kfree(best_cfg);
@@ -3752,11 +3755,8 @@ int snd_hda_gen_build_controls(struct hda_codec *codec)
        /* if we have no master control, let's create it */
        if (!spec->no_analog &&
            !snd_hda_find_mixer_ctl(codec, "Master Playback Volume")) {
-               unsigned int vmaster_tlv[4];
-               snd_hda_set_vmaster_tlv(codec, spec->vmaster_nid,
-                                       HDA_OUTPUT, vmaster_tlv);
                err = snd_hda_add_vmaster(codec, "Master Playback Volume",
-                                         vmaster_tlv, slave_pfxs,
+                                         spec->vmaster_tlv, slave_pfxs,
                                          "Playback Volume");
                if (err < 0)
                        return err;
index 142a571..43a8482 100644 (file)
@@ -214,6 +214,7 @@ struct hda_gen_spec {
 
        /* for virtual master */
        hda_nid_t vmaster_nid;
+       unsigned int vmaster_tlv[4];
        struct hda_vmaster_mute_hook vmaster_mute;
 #ifdef CONFIG_PM
        struct hda_loopback_check loopback;