[PATCH 07/10] ASoC: mediatek: mt8196: fix runtime resume error handling
phucduc.bui at gmail.com
phucduc.bui at gmail.com
Mon Sep 28 23:11:18 PDT 2026
From: bui duc phuc <phucduc.bui at gmail.com>
Propagate errors from regcache_sync() and main clock enable operations
instead of ignoring them.
On failure, restore cache-only mode, disable register access clocks, and
clear the 26M clock request as needed to clean up the runtime resume
state.
Fixes: 7384ecab34eb ("ASoC: mediatek: mt8196: support audio clock control")
Signed-off-by: bui duc phuc <phucduc.bui at gmail.com>
---
sound/soc/mediatek/mt8196/mt8196-afe-pcm.c | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/sound/soc/mediatek/mt8196/mt8196-afe-pcm.c b/sound/soc/mediatek/mt8196/mt8196-afe-pcm.c
index dcee037991aa..9888812cd993 100644
--- a/sound/soc/mediatek/mt8196/mt8196-afe-pcm.c
+++ b/sound/soc/mediatek/mt8196/mt8196-afe-pcm.c
@@ -2211,7 +2211,7 @@ static int mt8196_afe_runtime_suspend(struct device *dev)
static int mt8196_afe_runtime_resume(struct device *dev)
{
struct mtk_base_afe *afe = dev_get_drvdata(dev);
- int ret = 0;
+ int ret;
ret = mt8196_afe_enable_reg_rw_clk(afe);
if (ret)
@@ -2222,7 +2222,9 @@ static int mt8196_afe_runtime_resume(struct device *dev)
goto skip_regmap;
}
regcache_cache_only(afe->regmap, false);
- regcache_sync(afe->regmap);
+ ret = regcache_sync(afe->regmap);
+ if (ret)
+ goto err_set_cache_only;
/* set audio 26M request */
regmap_update_bits(afe->regmap, AFE_SPM_CONTROL_REQ, 0x1, 0x1);
@@ -2233,10 +2235,20 @@ static int mt8196_afe_runtime_resume(struct device *dev)
CPU_HD_ALIGN_MASK_SFT, 0 << CPU_HD_ALIGN_SFT);
/* enable AFE */
- mt8196_afe_enable_main_clock(afe);
+ ret = mt8196_afe_enable_main_clock(afe);
+ if (ret)
+ goto err_reset_26m_req;
skip_regmap:
return 0;
+
+err_reset_26m_req:
+ regmap_update_bits(afe->regmap, AFE_SPM_CONTROL_REQ, 0x1, 0x0);
+err_set_cache_only:
+ regcache_cache_only(afe->regmap, true);
+ mt8196_afe_disable_reg_rw_clk(afe);
+
+ return ret;
}
static int mt8196_afe_component_probe(struct snd_soc_component *component)
--
2.43.0
More information about the Linux-mediatek
mailing list