#include <linux/of_platform.h>
 #include <linux/of_reserved_mem.h>
 #include <linux/pm_runtime.h>
+#include <linux/reset.h>
 #include "mt8195-afe-common.h"
 #include "mt8195-afe-clk.h"
 #include "mt8195-reg.h"
        struct mtk_base_afe *afe;
        struct mt8195_afe_private *afe_priv;
        struct device *dev = &pdev->dev;
+       struct reset_control *rstc;
        int i, irq_id, ret;
        struct snd_soc_component *component;
 
                return ret;
        }
 
+       /* reset controller to reset audio regs before regmap cache */
+       rstc = devm_reset_control_get_exclusive(dev, "audiosys");
+       if (IS_ERR(rstc)) {
+               ret = PTR_ERR(rstc);
+               dev_err(dev, "could not get audiosys reset:%d\n", ret);
+               return ret;
+       }
+
+       ret = reset_control_reset(rstc);
+       if (ret) {
+               dev_err(dev, "failed to trigger audio reset:%d\n", ret);
+               return ret;
+       }
+
        spin_lock_init(&afe_priv->afe_ctrl_lock);
 
        mutex_init(&afe->irq_alloc_lock);