* when aa-mixer is available, we need to enable the path as well
         */
        for (n = 0; n < nums; n++) {
-               if (n != idx && (!add_aamix || conn[n] != spec->mixer_nid))
+               if (n != idx && (!add_aamix || conn[n] != spec->mixer_merge_nid))
                        continue;
                activate_amp(codec, nid, HDA_INPUT, n, idx, enable);
        }
 
        path->active = true;
        add_loopback_list(spec, mix_nid, idx);
+
+       if (spec->mixer_nid != spec->mixer_merge_nid &&
+           !spec->loopback_merge_path) {
+               path = snd_hda_add_new_path(codec, spec->mixer_nid,
+                                           spec->mixer_merge_nid, 0);
+               if (path) {
+                       print_nid_path("loopback-merge", path);
+                       path->active = true;
+                       spec->loopback_merge_path =
+                               snd_hda_get_path_idx(codec, path);
+               }
+       }
+
        return 0;
 }
 
 
        parse_user_hints(codec);
 
+       if (spec->mixer_nid && !spec->mixer_merge_nid)
+               spec->mixer_merge_nid = spec->mixer_nid;
+
        if (cfg != &spec->autocfg) {
                spec->autocfg = *cfg;
                cfg = &spec->autocfg;
                        if (path)
                                snd_hda_activate_path(codec, path,
                                                      path->active, false);
+                       path = snd_hda_get_path_from_idx(codec,
+                                                        spec->loopback_merge_path);
+                       if (path)
+                               snd_hda_activate_path(codec, path, path->active,
+                                                     false);
                }
        }
 }
 
        hda_nid_t adc_nids[AUTO_CFG_MAX_INS];
        hda_nid_t dig_in_nid;           /* digital-in NID; optional */
        hda_nid_t mixer_nid;            /* analog-mixer NID */
+       hda_nid_t mixer_merge_nid;      /* aamix merge-point NID (optional) */
        const char *input_labels[HDA_MAX_NUM_INPUTS];
        int input_label_idxs[HDA_MAX_NUM_INPUTS];
 
        int digout_paths[AUTO_CFG_MAX_OUTS];
        int input_paths[HDA_MAX_NUM_INPUTS][AUTO_CFG_MAX_INS];
        int loopback_paths[HDA_MAX_NUM_INPUTS];
+       int loopback_merge_path;
        int digin_path;
 
        /* auto-mic stuff */
 
        spec = codec->spec;
 
        spec->gen.mixer_nid = 0x20;
+       spec->gen.mixer_merge_nid = 0x21;
        spec->beep_dev_nid = 0x10;
        set_beep_amp(spec, 0x10, 0, HDA_OUTPUT);
        err = ad198x_parse_auto_config(codec);
        spec = codec->spec;
 
        spec->gen.mixer_nid = 0x20;
+       spec->gen.mixer_merge_nid = 0x21;
        spec->beep_dev_nid = 0x10;
        set_beep_amp(spec, 0x10, 0, HDA_OUTPUT);
        err = ad198x_parse_auto_config(codec);