[PATCH 03/13] ASoC: mediatek: mt8189: Propagate MCK enable errors
From: phucduc . bui
Date: Thu Sep 10 2026 - 09:07:13 EST
From: bui duc phuc <phucduc.bui@xxxxxxxxx>
mt8189_mck_enable() currently returns without restoring the clock
state when setting the clock parent, enabling the divider, or setting
the divider rate fails.
Propagate the error and disable clocks enabled by the function.
Fixes: dc637ffeed6c ("ASoC: mediatek: mt8189: support audio clock control")
Signed-off-by: bui duc phuc <phucduc.bui@xxxxxxxxx>
---
sound/soc/mediatek/mt8189/mt8189-afe-clk.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/sound/soc/mediatek/mt8189/mt8189-afe-clk.c b/sound/soc/mediatek/mt8189/mt8189-afe-clk.c
index a901be97e75f..933179f2a5ba 100644
--- a/sound/soc/mediatek/mt8189/mt8189-afe-clk.c
+++ b/sound/soc/mediatek/mt8189/mt8189-afe-clk.c
@@ -639,7 +639,7 @@ int mt8189_mck_enable(struct mtk_base_afe *afe, int mck_id, int rate)
ret = mt8189_afe_set_clk_parent(afe, afe_priv->clk[m_sel_id],
afe_priv->clk[apll_clk_id]);
if (ret)
- return ret;
+ goto err_m_sel;
}
/* enable div, set rate */
@@ -650,13 +650,21 @@ int mt8189_mck_enable(struct mtk_base_afe *afe, int mck_id, int rate)
ret = mt8189_afe_enable_clk(afe, afe_priv->clk[div_clk_id]);
if (ret)
- return ret;
+ goto err_m_sel;
ret = mt8189_afe_set_clk_rate(afe, afe_priv->clk[div_clk_id], rate);
if (ret)
- return ret;
+ goto err_div;
return 0;
+
+err_div:
+ mt8189_afe_disable_clk(afe, afe_priv->clk[div_clk_id]);
+err_m_sel:
+ if (m_sel_id >= 0)
+ mt8189_afe_disable_clk(afe, afe_priv->clk[m_sel_id]);
+
+ return ret;
}
int mt8189_mck_disable(struct mtk_base_afe *afe, int mck_id)
--
2.43.0