ASoC: mt8183: fix audio playback slowly after playback during bootup
authorJiaxin Yu <jiaxin.yu@mediatek.com>
Fri, 27 Sep 2019 10:31:57 +0000 (18:31 +0800)
committerMark Brown <broonie@kernel.org>
Tue, 8 Oct 2019 12:39:45 +0000 (13:39 +0100)
Before regmap_reinit_cache we must reset audio regs as default values.
So we use reset controller unit(toprgu) to reset audio hw.

Signed-off-by: Jiaxin Yu <jiaxin.yu@mediatek.com>
Reviewed-by: Yingjoe Chen <yingjoe.chen@mediatek.com>
Link: https://lore.kernel.org/r/1569580317-21181-5-git-send-email-jiaxin.yu@mediatek.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/mediatek/mt8183/mt8183-afe-pcm.c

index 4a31106d3471318e22259f9277d63613de4cab81..721632386a501432822c9056f4be89d7187a8562 100644 (file)
@@ -11,6 +11,7 @@
 #include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/pm_runtime.h>
+#include <linux/reset.h>
 
 #include "mt8183-afe-common.h"
 #include "mt8183-afe-clk.h"
@@ -1089,6 +1090,7 @@ static int mt8183_afe_pcm_dev_probe(struct platform_device *pdev)
        struct mtk_base_afe *afe;
        struct mt8183_afe_private *afe_priv;
        struct device *dev;
+       struct reset_control *rstc;
        int i, irq_id, ret;
 
        afe = devm_kzalloc(&pdev->dev, sizeof(*afe), GFP_KERNEL);
@@ -1126,6 +1128,19 @@ static int mt8183_afe_pcm_dev_probe(struct platform_device *pdev)
                return ret;
        }
 
+       rstc = devm_reset_control_get(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;
+       }
+
        /* enable clock for regcache get default value from hw */
        afe_priv->pm_runtime_bypass_reg_ctl = true;
        pm_runtime_get_sync(&pdev->dev);