static const struct reg_sequence rt5650_init_list[] = {
        {0xf6,  0x0100},
+       {RT5645_PWR_ANLG1, 0x02},
 };
 
 static const struct reg_default rt5645_reg[] = {
                                regmap_write(rt5645->regmap, RT5645_PR_BASE +
                                        RT5645_MAMP_INT_REG2, 0xfc00);
                                snd_soc_component_write(component, RT5645_DEPOP_M2, 0x1140);
+                               snd_soc_component_update_bits(component, RT5645_PWR_ANLG1,
+                                       RT5645_PWR_HP_L | RT5645_PWR_HP_R,
+                                       RT5645_PWR_HP_L | RT5645_PWR_HP_R);
                                msleep(90);
                        } else {
                                /* depop parameters */
                                snd_soc_component_write(component, RT5645_DEPOP_M2, 0x1140);
                                msleep(100);
                                snd_soc_component_write(component, RT5645_DEPOP_M1, 0x0001);
-
+                               snd_soc_component_update_bits(component, RT5645_PWR_ANLG1,
+                                       RT5645_PWR_HP_L | RT5645_PWR_HP_R, 0);
                        } else {
                                snd_soc_component_update_bits(component, RT5645_DEPOP_M1,
                                        RT5645_HP_SG_MASK |
        unsigned int val;
 
        if (jack_insert) {
-               regmap_write(rt5645->regmap, RT5645_CHARGE_PUMP, 0x0e06);
+               regmap_write(rt5645->regmap, RT5645_CHARGE_PUMP, 0x0206);
 
                /* for jack type detect */
                snd_soc_dapm_force_enable_pin(dapm, "LDO2");
                if (rt5645->pdata.level_trigger_irq)
                        regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2,
                                RT5645_JD_1_1_MASK, RT5645_JD_1_1_NOR);
+
+               regmap_write(rt5645->regmap, RT5645_CHARGE_PUMP, 0x0e06);
        } else { /* jack out */
                rt5645->jack_type = 0;
 
 
        regmap_write(rt5645->regmap, RT5645_AD_DA_MIXER, 0x8080);
 
-       ret = regmap_register_patch(rt5645->regmap, init_list,
+       ret = regmap_multi_reg_write(rt5645->regmap, init_list,
                                    ARRAY_SIZE(init_list));
        if (ret != 0)
                dev_warn(&i2c->dev, "Failed to apply regmap patch: %d\n", ret);
 
        if (rt5645->codec_type == CODEC_TYPE_RT5650) {
-               ret = regmap_register_patch(rt5645->regmap, rt5650_init_list,
+               ret = regmap_multi_reg_write(rt5645->regmap, rt5650_init_list,
                                    ARRAY_SIZE(rt5650_init_list));
                if (ret != 0)
                        dev_warn(&i2c->dev, "Apply rt5650 patch failed: %d\n",
 
        if (rt5645->hp_jack) {
                rt5645->jack_type = 0;
-               queue_delayed_work(system_power_efficient_wq,
-                       &rt5645->jack_detect_work, msecs_to_jiffies(0));
+               rt5645_jack_detect_work(&rt5645->jack_detect_work.work);
        }
        return 0;
 }