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, 0x10);
+                               regmap_update_bits(es8326->regmap, ES8326_ANA_MICBIAS, 0x70, 0x30);
                        }
                }
        } else {
                        regmap_write(es8326->regmap, ES8326_HPR_OFFSET_INI, offset_r);
                        es8326->calibrated = true;
                }
+               regmap_update_bits(es8326->regmap, ES8326_CLK_INV, 0xc0, 0x00);
+                regmap_update_bits(es8326->regmap, ES8326_CLK_MUX, 0x80, 0x00);
                if (direction == SNDRV_PCM_STREAM_PLAYBACK) {
                        regmap_update_bits(es8326->regmap, ES8326_DAC_DSM, 0x01, 0x01);
                        usleep_range(1000, 5000);
                } 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_ANA_MICBIAS, 0x70, 0x70);
                                regmap_update_bits(es8326->regmap, ES8326_VMIDSEL, 0x40, 0x00);
                        }
                        regmap_update_bits(es8326->regmap,  ES8326_ADC_MUTE,
                regmap_write(es8326->regmap, ES8326_ANA_PDN, 0x00);
                regmap_update_bits(es8326->regmap,  ES8326_CLK_CTL, 0x20, 0x20);
                regmap_update_bits(es8326->regmap, ES8326_RESET, 0x02, 0x00);
+               if (es8326->version > ES8326_VERSION_B) {
+                       regmap_update_bits(es8326->regmap, ES8326_VMIDSEL, 0x40, 0x40);
+                       regmap_update_bits(es8326->regmap, ES8326_ANA_MICBIAS, 0x70, 0x30);
+               }
                break;
        case SND_SOC_BIAS_PREPARE:
                break;
                regmap_write(es8326->regmap, ES8326_ANA_PDN, 0x3b);
                regmap_update_bits(es8326->regmap, ES8326_CLK_CTL, 0x20, 0x00);
                regmap_write(es8326->regmap, ES8326_SDINOUT1_IO, ES8326_IO_INPUT);
+               if (es8326->version > ES8326_VERSION_B) {
+                       regmap_update_bits(es8326->regmap, ES8326_VMIDSEL, 0x40, 0x40);
+                       regmap_update_bits(es8326->regmap, ES8326_ANA_MICBIAS, 0x70, 0x10);
+               }
+               regmap_update_bits(es8326->regmap, ES8326_CLK_INV, 0xc0, 0xc0);
+               regmap_update_bits(es8326->regmap, ES8326_CLK_MUX, 0x80, 0x80);
                break;
        case SND_SOC_BIAS_OFF:
                clk_disable_unprepare(es8326->mclk);
        case 0x6f:
        case 0x4b:
                /* button volume up */
-               cur_button = SND_JACK_BTN_1;
+               if ((iface == 0x6f) && (es8326->version > ES8326_VERSION_B))
+                       cur_button = SND_JACK_BTN_0;
+               else
+                       cur_button = SND_JACK_BTN_1;
                break;
        case 0x27:
                /* button volume down */
        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, 0x13);
+               regmap_update_bits(es8326->regmap, ES8326_ANA_MICBIAS, 0x73, 0x10);
                regmap_update_bits(es8326->regmap, ES8326_VMIDSEL, 0x40, 0x40);
        }