struct auto_pin_cfg autocfg;
        struct hda_input_mux private_imux;
        int imux_cfg_idx[HDA_MAX_NUM_INPUTS]; /* corresponding autocfg.input */
+       hda_nid_t imux_boost_nid[HDA_MAX_NUM_INPUTS]; /* boost widget */
        hda_nid_t imux_adcs[HDA_MAX_NUM_INPUTS];
        hda_nid_t imux_pins[HDA_MAX_NUM_INPUTS];
        hda_nid_t private_adc_nids[HDA_MAX_NUM_INPUTS];
                                const char *label;
                                label = hda_get_autocfg_input_label(codec, cfg, i);
                                spec->imux_cfg_idx[imux->num_items] = i;
+                               spec->imux_boost_nid[imux->num_items] = 0;
                                spec->imux_adcs[imux->num_items] = adc;
                                spec->imux_pins[imux->num_items] =
                                        cfg->inputs[i].pin;
 {
        struct conexant_spec *spec = codec->spec;
        hda_nid_t mux, nid;
-       int con;
+       int i, con;
 
        nid = spec->imux_pins[idx];
        if (get_wcaps(codec, nid) & AC_WCAP_IN_AMP)
                                        false, 0);
        if (con < 0)
                return 0;
-       if (get_wcaps(codec, mux) & AC_WCAP_OUT_AMP)
+       for (i = 0; i < idx; i++) {
+               if (spec->imux_boost_nid[i] == mux)
+                       return 0; /* already present */
+       }
+
+       if (get_wcaps(codec, mux) & AC_WCAP_OUT_AMP) {
+               spec->imux_boost_nid[idx] = mux;
                return cx_auto_add_volume(codec, label, " Boost", 0,
                                          mux, HDA_OUTPUT);
+       }
        return 0;
 }
 
                        return err;
 
                if (!multi_connection) {
+                       if (i > 0)
+                               continue;
                        err = cx_auto_add_capture_volume(codec, nid,
                                                         "Capture", "", cidx);
                } else {