From: Myeonghun Pak <mhun512@gmail.com>
To: Mark Brown <broonie@kernel.org>, Liam Girdwood <lgirdwood@gmail.com>
Cc: Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
Matthias Brugger <matthias.bgg@gmail.com>,
AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com>,
linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-mediatek@lists.infradead.org, Ijae Kim <ae878000@gmail.com>,
Cyril Chao <Cyril.Chao@mediatek.com>
Subject: [PATCH v2 2/5] ASoC: mediatek: mt8189: Keep the AFE IRQ within its resource lifetime
Date: Thu, 12 Nov 2026 01:17:46 -0500 [thread overview]
Message-ID: <20261112011708-afe-v2-2-mhun512@gmail.com> (raw)
In-Reply-To: <20261112011708-afe-v2-0-mhun512@gmail.com>
The managed AFE IRQ is requested before the regmap is allocated. The
handler can therefore run before its regmap exists, and devres releases
the regmap before freeing the IRQ. The remove callback also suspends the
AFE and disables its clocks before devres releases the IRQ.
Request the IRQ after initializing the regmap and before enabling MCU
IRQ routing. A failed request then takes the existing runtime PM unwind
without enabling that routing. Release the IRQ at the start of removal
before the explicit clock shutdown, using the IRQ number saved at probe.
The regmap's managed lifetime also encloses the IRQ on probe errors.
Found by a static analysis tool under development.
Fixes: 7eb153585598 ("ASoC: mediatek: mt8189: add platform driver")
Co-developed-by: Ijae Kim <ae878000@gmail.com>
Signed-off-by: Ijae Kim <ae878000@gmail.com>
Signed-off-by: Myeonghun Pak <mhun512@gmail.com>
---
sound/soc/mediatek/mt8189/mt8189-afe-common.h | 1 +
sound/soc/mediatek/mt8189/mt8189-afe-pcm.c | 16 ++++++++++------
2 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/sound/soc/mediatek/mt8189/mt8189-afe-common.h b/sound/soc/mediatek/mt8189/mt8189-afe-common.h
index 910d90d3d146..de715c92add5 100644
--- a/sound/soc/mediatek/mt8189/mt8189-afe-common.h
+++ b/sound/soc/mediatek/mt8189/mt8189-afe-common.h
@@ -202,6 +202,7 @@ enum {
struct clk;
struct mt8189_afe_private {
+ int irq_id;
struct clk **clk;
struct regmap *pmic_regmap;
diff --git a/sound/soc/mediatek/mt8189/mt8189-afe-pcm.c b/sound/soc/mediatek/mt8189/mt8189-afe-pcm.c
index eefa96b701a5..e9fddf2063f5 100644
--- a/sound/soc/mediatek/mt8189/mt8189-afe-pcm.c
+++ b/sound/soc/mediatek/mt8189/mt8189-afe-pcm.c
@@ -2516,12 +2516,7 @@ static int mt8189_afe_pcm_dev_probe(struct platform_device *pdev)
irq_id = platform_get_irq(pdev, 0);
if (irq_id < 0)
return irq_id;
-
- ret = devm_request_irq(dev, irq_id, mt8189_afe_irq_handler,
- IRQF_TRIGGER_NONE,
- "Afe_ISR_Handle", afe);
- if (ret)
- return ret;
+ afe_priv->irq_id = irq_id;
/* init sub_dais */
INIT_LIST_HEAD(&afe->sub_dais);
@@ -2576,6 +2571,12 @@ static int mt8189_afe_pcm_dev_probe(struct platform_device *pdev)
goto err_pm_put;
}
+ ret = devm_request_irq(dev, irq_id, mt8189_afe_irq_handler,
+ IRQF_TRIGGER_NONE,
+ "Afe_ISR_Handle", afe);
+ if (ret)
+ goto err_pm_put;
+
regmap_read(afe->regmap, AFE_IRQ_MCU_EN, &tmp_reg);
regmap_write(afe->regmap, AFE_IRQ_MCU_EN, 0xffffffff);
regmap_read(afe->regmap, AFE_IRQ_MCU_EN, &tmp_reg);
@@ -2603,8 +2604,11 @@ static int mt8189_afe_pcm_dev_probe(struct platform_device *pdev)
static void mt8189_afe_pcm_dev_remove(struct platform_device *pdev)
{
struct mtk_base_afe *afe = platform_get_drvdata(pdev);
+ struct mt8189_afe_private *afe_priv = afe->platform_priv;
struct device *dev = &pdev->dev;
+ devm_free_irq(dev, afe_priv->irq_id, afe);
+
if (!pm_runtime_status_suspended(dev))
mt8189_afe_runtime_suspend(dev);
--
2.43.0
next prev parent reply other threads:[~2026-11-12 6:19 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-12 6:17 [PATCH v2 0/5] ASoC: mediatek: fix AFE IRQ registration and removal ordering Myeonghun Pak
2026-11-12 6:17 ` [PATCH v2 1/5] ASoC: mediatek: mt8186: Keep the AFE IRQ within its resource lifetime Myeonghun Pak
2026-11-12 6:17 ` Myeonghun Pak [this message]
2026-11-12 6:17 ` [PATCH v2 3/5] ASoC: mediatek: mt8196: " Myeonghun Pak
2026-11-12 6:17 ` [PATCH v2 4/5] ASoC: mediatek: mt8195: " Myeonghun Pak
2026-11-12 6:17 ` [PATCH v2 5/5] ASoC: mediatek: mt8188: " Myeonghun Pak
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261112011708-afe-v2-2-mhun512@gmail.com \
--to=mhun512@gmail.com \
--cc=Cyril.Chao@mediatek.com \
--cc=ae878000@gmail.com \
--cc=angelogioacchino.delregno@collabora.com \
--cc=broonie@kernel.org \
--cc=lgirdwood@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=linux-sound@vger.kernel.org \
--cc=matthias.bgg@gmail.com \
--cc=perex@perex.cz \
--cc=tiwai@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox