} else {
                        regmap_update_bits(es8326->regmap,  ES8326_ADC_MUTE,
                                        0x0F, 0x0F);
+                       if (es8326->version > ES8326_VERSION_B) {
+                               regmap_update_bits(es8326->regmap, ES8326_VMIDSEL, 0x40, 0x40);
+                               regmap_update_bits(es8326->regmap, ES8326_ANA_MICBIAS, 0x70, 0x00);
+                       }
                }
        } else {
                if (!es8326->calibrated) {
                                        ES8326_MUTE_MASK, ~(ES8326_MUTE));
                } else {
                        msleep(300);
+                       if (es8326->version > ES8326_VERSION_B) {
+                               regmap_update_bits(es8326->regmap, ES8326_ANA_MICBIAS, 0x70, 0x50);
+                               regmap_update_bits(es8326->regmap, ES8326_VMIDSEL, 0x40, 0x00);
+                       }
                        regmap_update_bits(es8326->regmap,  ES8326_ADC_MUTE,
                                        0x0F, 0x00);
                }
        iface = snd_soc_component_read(comp, ES8326_HPDET_STA);
        dev_dbg(comp->dev, "gpio flag %#04x", iface);
 
-       if ((es8326->jack_remove_retry == 1) && (es8326->version != ES8326_VERSION_B)) {
+       if ((es8326->jack_remove_retry == 1) && (es8326->version < ES8326_VERSION_B)) {
                if (iface & ES8326_HPINSERT_FLAG)
                        es8326->jack_remove_retry = 2;
                else
                /*
                 * Inverted HPJACK_POL bit to trigger one IRQ to double check HP Removal event
                 */
-               if ((es8326->jack_remove_retry == 0) && (es8326->version != ES8326_VERSION_B)) {
+               if ((es8326->jack_remove_retry == 0) && (es8326->version < ES8326_VERSION_B)) {
                        es8326->jack_remove_retry = 1;
                        dev_dbg(comp->dev, "remove event check, invert HPJACK_POL, cnt = %d\n",
                                        es8326->jack_remove_retry);
        regmap_read(es8326->regmap, ES8326_CHIP_VERSION, ®);
        es8326->version = reg;
 
-       if ((es8326->version == ES8326_VERSION_B) && (es8326->calibrated == false)) {
+       if ((es8326->version >= ES8326_VERSION_B) && (es8326->calibrated == false)) {
                dev_dbg(component->dev, "ES8326_VERSION_B, calibrating\n");
                regmap_write(es8326->regmap, ES8326_CLK_INV, 0xc0);
                regmap_write(es8326->regmap, ES8326_CLK_DIV1, 0x03);
        regmap_write(es8326->regmap, ES8326_DAC_VPPSCALE, 0x15);
 
        regmap_write(es8326->regmap, ES8326_HPDET_TYPE, 0x80 |
-                       ((es8326->version == ES8326_VERSION_B) ?
+                       ((es8326->version >= ES8326_VERSION_B) ?
                        (ES8326_HP_DET_SRC_PIN9 | es8326->jack_pol) :
                        (ES8326_HP_DET_SRC_PIN9 | es8326->jack_pol | 0x04)));
        usleep_range(5000, 10000);
        regmap_write(es8326->regmap, ES8326_ADC1_SRC, 0x44);
        regmap_write(es8326->regmap, ES8326_ADC2_SRC, 0x66);
        es8326_disable_micbias(es8326->component);
+       if (es8326->version > ES8326_VERSION_B) {
+               regmap_update_bits(es8326->regmap, ES8326_ANA_MICBIAS, 0x73, 0x03);
+               regmap_update_bits(es8326->regmap, ES8326_VMIDSEL, 0x40, 0x40);
+       }
 
        msleep(200);
        regmap_write(es8326->regmap, ES8326_INT_SOURCE, ES8326_INT_SRC_PIN9);