}
 
 
-/* parse the BIOS configuration and set up the hda_gen_spec */
-/* return 1 if successful, 0 if the proper config is not found,
+/*
+ * Parse the given BIOS configuration and set up the hda_gen_spec
+ *
+ * return 1 if successful, 0 if the proper config is not found,
  * or a negative error code
  */
 int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
-                                 const hda_nid_t *ignore_nids)
+                                 struct auto_pin_cfg *cfg)
 {
        struct hda_gen_spec *spec = codec->spec;
-       struct auto_pin_cfg *cfg = &spec->autocfg;
        int err;
 
-       err = snd_hda_parse_pin_defcfg(codec, cfg, ignore_nids,
-                                      spec->parse_flags);
-       if (err < 0)
-               return err;
+       if (cfg != &spec->autocfg) {
+               spec->autocfg = *cfg;
+               cfg = &spec->autocfg;
+       }
+
        if (!cfg->line_outs) {
                if (cfg->dig_outs || cfg->dig_in_pin) {
                        spec->multiout.max_channels = 2;
        snd_hda_gen_spec_init(spec);
        codec->spec = spec;
 
-       err = snd_hda_gen_parse_auto_config(codec, NULL);
+       err = snd_hda_parse_pin_defcfg(codec, &spec->autocfg, NULL, 0);
+       if (err < 0)
+               return err;
+
+       err = snd_hda_gen_parse_auto_config(codec, &spec->autocfg);
        if (err < 0)
                goto error;
 
 
        unsigned int inv_dmic_split:1; /* inverted dmic w/a for conexant */
        unsigned int own_eapd_ctl:1; /* set EAPD by own function */
 
-       unsigned int parse_flags; /* passed to snd_hda_parse_pin_defcfg() */
-
        /* for virtual master */
        hda_nid_t vmaster_nid;
        struct hda_vmaster_mute_hook vmaster_mute;
                     const struct snd_kcontrol_new *temp);
 
 int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
-                                 const hda_nid_t *ignore_nids);
+                                 struct auto_pin_cfg *cfg);
 int snd_hda_gen_build_controls(struct hda_codec *codec);
 int snd_hda_gen_build_pcms(struct hda_codec *codec);