}
 
-static int pm8916_wcd_analog_enable_micbias_ext(struct snd_soc_component
-                                                *component, int event,
-                                                int reg, unsigned int cap_mode)
+static int pm8916_wcd_analog_enable_micbias(struct snd_soc_component *component,
+                                           int event, unsigned int cap_mode)
 {
        switch (event) {
        case SND_SOC_DAPM_POST_PMU:
        return 0;
 }
 
-static int pm8916_wcd_analog_enable_micbias_int(struct snd_soc_component
-                                                *component, int event,
-                                                int reg, u32 cap_mode)
+static int pm8916_wcd_analog_enable_micbias_int(struct snd_soc_dapm_widget *w,
+                                               struct snd_kcontrol *kcontrol,
+                                               int event)
 {
+       struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
 
        switch (event) {
        case SND_SOC_DAPM_PRE_PMU:
-               snd_soc_component_update_bits(component, reg, MICB_1_EN_PULL_DOWN_EN_MASK, 0);
                snd_soc_component_update_bits(component, CDC_A_MICB_1_EN,
                                    MICB_1_EN_OPA_STG2_TAIL_CURR_MASK,
                                    MICB_1_EN_OPA_STG2_TAIL_CURR_1_60UA);
-
-               break;
-       case SND_SOC_DAPM_POST_PMU:
-               pm8916_wcd_analog_micbias_enable(component);
-               snd_soc_component_update_bits(component, CDC_A_MICB_1_EN,
-                                   MICB_1_EN_BYP_CAP_MASK, cap_mode);
                break;
        }
 
        return 0;
 }
 
-static int pm8916_wcd_analog_enable_micbias_ext1(struct
-                                                 snd_soc_dapm_widget
-                                                 *w, struct snd_kcontrol
-                                                 *kcontrol, int event)
+static int pm8916_wcd_analog_enable_micbias1(struct snd_soc_dapm_widget *w,
+                                            struct snd_kcontrol *kcontrol,
+                                            int event)
 {
        struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
        struct pm8916_wcd_analog_priv *wcd = snd_soc_component_get_drvdata(component);
 
-       return pm8916_wcd_analog_enable_micbias_ext(component, event, w->reg,
-                                                    wcd->micbias1_cap_mode);
+       return pm8916_wcd_analog_enable_micbias(component, event,
+                                               wcd->micbias1_cap_mode);
 }
 
-static int pm8916_wcd_analog_enable_micbias_ext2(struct
-                                                 snd_soc_dapm_widget
-                                                 *w, struct snd_kcontrol
-                                                 *kcontrol, int event)
-{
-       struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
-       struct pm8916_wcd_analog_priv *wcd = snd_soc_component_get_drvdata(component);
-
-       return pm8916_wcd_analog_enable_micbias_ext(component, event, w->reg,
-                                                    wcd->micbias2_cap_mode);
-
-}
-
-static int pm8916_wcd_analog_enable_micbias_int1(struct
-                                                 snd_soc_dapm_widget
-                                                 *w, struct snd_kcontrol
-                                                 *kcontrol, int event)
+static int pm8916_wcd_analog_enable_micbias2(struct snd_soc_dapm_widget *w,
+                                            struct snd_kcontrol *kcontrol,
+                                            int event)
 {
        struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
        struct pm8916_wcd_analog_priv *wcd = snd_soc_component_get_drvdata(component);
 
-       switch (event) {
-       case SND_SOC_DAPM_PRE_PMU:
-               snd_soc_component_update_bits(component, CDC_A_MICB_1_INT_RBIAS,
-                                   MICB_1_INT_TX1_INT_RBIAS_EN_MASK,
-                                   MICB_1_INT_TX1_INT_RBIAS_EN_ENABLE);
-               break;
-       }
+       return pm8916_wcd_analog_enable_micbias(component, event,
+                                               wcd->micbias2_cap_mode);
 
-       return pm8916_wcd_analog_enable_micbias_int(component, event, w->reg,
-                                                    wcd->micbias1_cap_mode);
 }
 
 static int pm8916_mbhc_configure_bias(struct pm8916_wcd_analog_priv *priv,
 
        switch (event) {
        case SND_SOC_DAPM_PRE_PMU:
-               snd_soc_component_update_bits(component, CDC_A_MICB_1_INT_RBIAS,
-                                   MICB_1_INT_TX2_INT_RBIAS_EN_MASK,
-                                   MICB_1_INT_TX2_INT_RBIAS_EN_ENABLE);
+               snd_soc_component_update_bits(component, CDC_A_MICB_2_EN,
+                                             CDC_A_MICB_2_PULL_DOWN_EN_MASK, 0);
                break;
        case SND_SOC_DAPM_POST_PMU:
                pm8916_mbhc_configure_bias(wcd, true);
                break;
        }
 
-       return pm8916_wcd_analog_enable_micbias_int(component, event, w->reg,
-                                                    wcd->micbias2_cap_mode);
+       return pm8916_wcd_analog_enable_micbias_int(w, kcontrol, event);
 }
 
 static int pm8916_wcd_analog_enable_adc(struct snd_soc_dapm_widget *w,
        {"SPK PA", NULL, "SPK DAC"},
        {"SPK DAC", "Switch", "PDM_RX3"},
 
-       {"MIC BIAS Internal1", NULL, "INT_LDO_H"},
-       {"MIC BIAS Internal2", NULL, "INT_LDO_H"},
-       {"MIC BIAS External1", NULL, "INT_LDO_H"},
-       {"MIC BIAS External2", NULL, "INT_LDO_H"},
-       {"MIC BIAS Internal1", NULL, "vdd-micbias"},
-       {"MIC BIAS Internal2", NULL, "vdd-micbias"},
-       {"MIC BIAS External1", NULL, "vdd-micbias"},
-       {"MIC BIAS External2", NULL, "vdd-micbias"},
+       {"MIC_BIAS1", NULL, "INT_LDO_H"},
+       {"MIC_BIAS2", NULL, "INT_LDO_H"},
+       {"MIC_BIAS1", NULL, "vdd-micbias"},
+       {"MIC_BIAS2", NULL, "vdd-micbias"},
+
+       {"MIC BIAS External1", NULL, "MIC_BIAS1"},
+       {"MIC BIAS Internal1", NULL, "MIC_BIAS1"},
+       {"MIC BIAS External2", NULL, "MIC_BIAS2"},
+       {"MIC BIAS Internal2", NULL, "MIC_BIAS2"},
 };
 
 static const struct snd_soc_dapm_widget pm8916_wcd_analog_dapm_widgets[] = {
        SND_SOC_DAPM_SUPPLY("RX_BIAS", CDC_A_RX_COM_BIAS_DAC, 7, 0, NULL, 0),
 
        /* TX */
-       SND_SOC_DAPM_SUPPLY("MIC BIAS Internal1", CDC_A_MICB_1_EN, 7, 0,
-                           pm8916_wcd_analog_enable_micbias_int1,
-                           SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
-                           SND_SOC_DAPM_POST_PMD),
-       SND_SOC_DAPM_SUPPLY("MIC BIAS Internal2", CDC_A_MICB_2_EN, 7, 0,
+       SND_SOC_DAPM_SUPPLY("MIC_BIAS1", CDC_A_MICB_1_EN, 7, 0,
+                           pm8916_wcd_analog_enable_micbias1,
+                           SND_SOC_DAPM_POST_PMU),
+       SND_SOC_DAPM_SUPPLY("MIC_BIAS2", CDC_A_MICB_2_EN, 7, 0,
+                           pm8916_wcd_analog_enable_micbias2,
+                           SND_SOC_DAPM_POST_PMU),
+
+       SND_SOC_DAPM_SUPPLY("MIC BIAS External1", SND_SOC_NOPM, 0, 0, NULL, 0),
+       SND_SOC_DAPM_SUPPLY("MIC BIAS External2", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+       SND_SOC_DAPM_SUPPLY("MIC BIAS Internal1", CDC_A_MICB_1_INT_RBIAS, 7, 0,
+                           pm8916_wcd_analog_enable_micbias_int,
+                           SND_SOC_DAPM_PRE_PMU),
+       SND_SOC_DAPM_SUPPLY("MIC BIAS Internal2", CDC_A_MICB_1_INT_RBIAS, 4, 0,
                            pm8916_wcd_analog_enable_micbias_int2,
                            SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
                            SND_SOC_DAPM_POST_PMD),
 
-       SND_SOC_DAPM_SUPPLY("MIC BIAS External1", CDC_A_MICB_1_EN, 7, 0,
-                           pm8916_wcd_analog_enable_micbias_ext1,
-                           SND_SOC_DAPM_POST_PMU),
-       SND_SOC_DAPM_SUPPLY("MIC BIAS External2", CDC_A_MICB_2_EN, 7, 0,
-                           pm8916_wcd_analog_enable_micbias_ext2,
-                           SND_SOC_DAPM_POST_PMU),
-
        SND_SOC_DAPM_ADC_E("ADC1", NULL, CDC_A_TX_1_EN, 7, 0,
                           pm8916_wcd_analog_enable_adc,
                           SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |