]> git.baikalelectronics.ru Git - kernel.git/commitdiff
ASoC: mediatek: mt8195: add reset controller
authorTrevor Wu <trevor.wu@mediatek.com>
Tue, 8 Mar 2022 07:24:31 +0000 (15:24 +0800)
committerMark Brown <broonie@kernel.org>
Fri, 11 Mar 2022 13:41:12 +0000 (13:41 +0000)
Audio hardware is possibly used in the firmware stage, so resetting audio
hardware before regcache records default register values is required.

Signed-off-by: Trevor Wu <trevor.wu@mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Link: https://lore.kernel.org/r/20220308072435.22460-2-trevor.wu@mediatek.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/mediatek/mt8195/mt8195-afe-pcm.c

index 55063650094976ca499bb0d779b17afc152eb7d2..72b2c6d629b937b27dad5f69775000787cbdd148 100644 (file)
@@ -16,6 +16,7 @@
 #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"
@@ -3056,6 +3057,7 @@ static int mt8195_afe_pcm_dev_probe(struct platform_device *pdev)
        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;
 
@@ -3092,6 +3094,20 @@ static int mt8195_afe_pcm_dev_probe(struct platform_device *pdev)
                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);