* [PATCH v2 1/5] ASoC: mediatek: mt8186: Keep the AFE IRQ within its resource lifetime
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 ` Myeonghun Pak
2026-11-12 6:17 ` [PATCH v2 2/5] ASoC: mediatek: mt8189: " Myeonghun Pak
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Myeonghun Pak @ 2026-11-12 6:17 UTC (permalink / raw)
To: Mark Brown, Liam Girdwood
Cc: Jaroslav Kysela, Takashi Iwai, Matthias Brugger,
AngeloGioacchino Del Regno, linux-sound, linux-kernel,
linux-arm-kernel, linux-mediatek, Ijae Kim, Jiaxin Yu
The AFE IRQ handler uses afe->regmap, but its managed IRQ is requested
before the audiosys reset and before the regmap is initialized. Apart
from allowing an interrupt left pending by the firmware or a previous
kernel to dereference a NULL regmap, the reverse devres order releases
the regmap before the IRQ on probe failure and removal. The IRQ wake
setting enabled at probe is also never undone.
Request the IRQ after the reset, the regmap and the handler's other
inputs have been initialized, and keep the existing runtime PM error
cleanup for a failed request. Balance the IRQ wake setting on the
remaining probe error paths and in a new remove callback, which also
releases the IRQ before devres tears down the component and the regmap.
Save the IRQ number in the private state for that.
Found by a static analysis tool under development.
Fixes: 097e874ad3fc ("ASoC: mediatek: mt8186: 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/mt8186/mt8186-afe-common.h | 1 +
sound/soc/mediatek/mt8186/mt8186-afe-pcm.c | 42 +++++++++++++------
2 files changed, 31 insertions(+), 12 deletions(-)
diff --git a/sound/soc/mediatek/mt8186/mt8186-afe-common.h b/sound/soc/mediatek/mt8186/mt8186-afe-common.h
index d59258520995..d03e59ca7d65 100644
--- a/sound/soc/mediatek/mt8186/mt8186-afe-common.h
+++ b/sound/soc/mediatek/mt8186/mt8186-afe-common.h
@@ -139,6 +139,7 @@ struct mtk_base_irq_data;
struct clk;
struct mt8186_afe_private {
+ int irq_id;
struct clk **clk;
struct clk_lookup **lookup;
struct regmap *topckgen;
diff --git a/sound/soc/mediatek/mt8186/mt8186-afe-pcm.c b/sound/soc/mediatek/mt8186/mt8186-afe-pcm.c
index 2f50f78a6f8c..134ff3947bff 100644
--- a/sound/soc/mediatek/mt8186/mt8186-afe-pcm.c
+++ b/sound/soc/mediatek/mt8186/mt8186-afe-pcm.c
@@ -2885,16 +2885,7 @@ static int mt8186_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, mt8186_afe_irq_handler,
- IRQF_TRIGGER_NONE,
- "Afe_ISR_Handle", (void *)afe);
- if (ret)
- return ret;
-
- ret = enable_irq_wake(irq_id);
- if (ret < 0)
- return dev_err_probe(dev, ret, "enable_irq_wake %d\n", irq_id);
+ afe_priv->irq_id = irq_id;
/* init sub_dais */
INIT_LIST_HEAD(&afe->sub_dais);
@@ -2947,6 +2938,18 @@ static int mt8186_afe_pcm_dev_probe(struct platform_device *pdev)
afe->runtime_resume = mt8186_afe_runtime_resume;
afe->runtime_suspend = mt8186_afe_runtime_suspend;
+ ret = devm_request_irq(dev, irq_id, mt8186_afe_irq_handler,
+ IRQF_TRIGGER_NONE,
+ "Afe_ISR_Handle", afe);
+ if (ret)
+ goto err_pm_disable;
+
+ ret = enable_irq_wake(irq_id);
+ if (ret < 0) {
+ dev_err_probe(dev, ret, "enable_irq_wake %d\n", irq_id);
+ goto err_free_irq;
+ }
+
/* register platform */
dev_dbg(dev, "%s(), devm_snd_soc_register_component\n", __func__);
@@ -2955,13 +2958,13 @@ static int mt8186_afe_pcm_dev_probe(struct platform_device *pdev)
afe->dai_drivers,
afe->num_dai_drivers);
if (ret)
- goto err_pm_disable;
+ goto err_disable_irq_wake;
ret = pm_runtime_put_sync(dev);
if (ret) {
pm_runtime_get_noresume(dev);
dev_err(dev, "failed to suspend device: %d\n", ret);
- goto err_pm_disable;
+ goto err_disable_irq_wake;
}
afe_priv->pm_runtime_bypass_reg_ctl = false;
@@ -2970,6 +2973,10 @@ static int mt8186_afe_pcm_dev_probe(struct platform_device *pdev)
return 0;
+err_disable_irq_wake:
+ disable_irq_wake(irq_id);
+err_free_irq:
+ devm_free_irq(dev, irq_id, afe);
err_pm_disable:
pm_runtime_put_noidle(dev);
pm_runtime_set_suspended(dev);
@@ -2977,6 +2984,16 @@ static int mt8186_afe_pcm_dev_probe(struct platform_device *pdev)
return ret;
}
+static void mt8186_afe_pcm_dev_remove(struct platform_device *pdev)
+{
+ struct mtk_base_afe *afe = platform_get_drvdata(pdev);
+ struct mt8186_afe_private *afe_priv = afe->platform_priv;
+ int irq_id = afe_priv->irq_id;
+
+ disable_irq_wake(irq_id);
+ devm_free_irq(&pdev->dev, irq_id, afe);
+}
+
static const struct of_device_id mt8186_afe_pcm_dt_match[] = {
{ .compatible = "mediatek,mt8186-sound", },
{},
@@ -2995,6 +3012,7 @@ static struct platform_driver mt8186_afe_pcm_driver = {
.pm = pm_ptr(&mt8186_afe_pm_ops),
},
.probe = mt8186_afe_pcm_dev_probe,
+ .remove = mt8186_afe_pcm_dev_remove,
};
module_platform_driver(mt8186_afe_pcm_driver);
--
2.43.0
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH v2 2/5] ASoC: mediatek: mt8189: Keep the AFE IRQ within its resource lifetime
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
2026-11-12 6:17 ` [PATCH v2 3/5] ASoC: mediatek: mt8196: " Myeonghun Pak
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Myeonghun Pak @ 2026-11-12 6:17 UTC (permalink / raw)
To: Mark Brown, Liam Girdwood
Cc: Jaroslav Kysela, Takashi Iwai, Matthias Brugger,
AngeloGioacchino Del Regno, linux-sound, linux-kernel,
linux-arm-kernel, linux-mediatek, Ijae Kim, Cyril Chao
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
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH v2 3/5] ASoC: mediatek: mt8196: Keep the AFE IRQ within its resource lifetime
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 ` [PATCH v2 2/5] ASoC: mediatek: mt8189: " Myeonghun Pak
@ 2026-11-12 6:17 ` 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
4 siblings, 0 replies; 6+ messages in thread
From: Myeonghun Pak @ 2026-11-12 6:17 UTC (permalink / raw)
To: Mark Brown, Liam Girdwood
Cc: Jaroslav Kysela, Takashi Iwai, Matthias Brugger,
AngeloGioacchino Del Regno, linux-sound, linux-kernel,
linux-arm-kernel, linux-mediatek, Ijae Kim, Cyril Chao,
Darren Ye
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: 57513aabfe5b ("ASoC: mediatek: mt8196: 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/mt8196/mt8196-afe-common.h | 1 +
sound/soc/mediatek/mt8196/mt8196-afe-pcm.c | 16 ++++++++++------
2 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/sound/soc/mediatek/mt8196/mt8196-afe-common.h b/sound/soc/mediatek/mt8196/mt8196-afe-common.h
index 4951a6f32abb..ce5d586721db 100644
--- a/sound/soc/mediatek/mt8196/mt8196-afe-common.h
+++ b/sound/soc/mediatek/mt8196/mt8196-afe-common.h
@@ -186,6 +186,7 @@ struct clk;
struct mtk_base_afe;
struct mt8196_afe_private {
+ int irq_id;
struct clk **clk;
/* dai */
void *dai_priv[MT8196_DAI_NUM];
diff --git a/sound/soc/mediatek/mt8196/mt8196-afe-pcm.c b/sound/soc/mediatek/mt8196/mt8196-afe-pcm.c
index f69ea22cfabb..dc462dd4235c 100644
--- a/sound/soc/mediatek/mt8196/mt8196-afe-pcm.c
+++ b/sound/soc/mediatek/mt8196/mt8196-afe-pcm.c
@@ -2403,12 +2403,7 @@ static int mt8196_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, mt8196_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);
@@ -2463,6 +2458,12 @@ static int mt8196_afe_pcm_dev_probe(struct platform_device *pdev)
goto err_pm_put;
}
+ ret = devm_request_irq(dev, irq_id, mt8196_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);
@@ -2490,8 +2491,11 @@ static int mt8196_afe_pcm_dev_probe(struct platform_device *pdev)
static void mt8196_afe_pcm_dev_remove(struct platform_device *pdev)
{
struct mtk_base_afe *afe = platform_get_drvdata(pdev);
+ struct mt8196_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))
mt8196_afe_runtime_suspend(dev);
--
2.43.0
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH v2 4/5] ASoC: mediatek: mt8195: Keep the AFE IRQ within its resource lifetime
2026-11-12 6:17 [PATCH v2 0/5] ASoC: mediatek: fix AFE IRQ registration and removal ordering Myeonghun Pak
` (2 preceding siblings ...)
2026-11-12 6:17 ` [PATCH v2 3/5] ASoC: mediatek: mt8196: " Myeonghun Pak
@ 2026-11-12 6:17 ` Myeonghun Pak
2026-11-12 6:17 ` [PATCH v2 5/5] ASoC: mediatek: mt8188: " Myeonghun Pak
4 siblings, 0 replies; 6+ messages in thread
From: Myeonghun Pak @ 2026-11-12 6:17 UTC (permalink / raw)
To: Mark Brown, Liam Girdwood
Cc: Jaroslav Kysela, Takashi Iwai, Matthias Brugger,
AngeloGioacchino Del Regno, linux-sound, linux-kernel,
linux-arm-kernel, linux-mediatek, Ijae Kim, Trevor Wu
The AFE IRQ handler uses afe->regmap, but its managed IRQ is requested
before the regmap is allocated. The audiosys reset earlier in probe
makes an interrupt before that point unlikely, but devres still
releases the regmap before the IRQ on probe failure and removal. The
remove callback also suspends the AFE, which disables its clocks, while
the IRQ is still requested.
Request the IRQ after initializing the regmap and before registering
the component, so that a failed request takes the existing runtime PM
unwind and the regmap's managed lifetime encloses the IRQ. Release the
IRQ at the start of removal, before the AFE is suspended, using the IRQ
number saved at probe.
Found by a static analysis tool under development.
Fixes: 6746cc858259 ("ASoC: mediatek: mt8195: 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/mt8195/mt8195-afe-common.h | 1 +
sound/soc/mediatek/mt8195/mt8195-afe-pcm.c | 16 +++++++++++-----
2 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/sound/soc/mediatek/mt8195/mt8195-afe-common.h b/sound/soc/mediatek/mt8195/mt8195-afe-common.h
index f93f439e2bd9..905f29673d3e 100644
--- a/sound/soc/mediatek/mt8195/mt8195-afe-common.h
+++ b/sound/soc/mediatek/mt8195/mt8195-afe-common.h
@@ -123,6 +123,7 @@ struct mtkaif_param {
struct clk;
struct mt8195_afe_private {
+ int irq_id;
struct clk **clk;
struct clk_lookup **lookup;
struct regmap *topckgen;
diff --git a/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c b/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
index 13e5bc02fac5..0cf39f66992e 100644
--- a/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
+++ b/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
@@ -3133,11 +3133,7 @@ static int mt8195_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, mt8195_afe_irq_handler,
- IRQF_TRIGGER_NONE, "asys-isr", (void *)afe);
- if (ret)
- return ret;
+ afe_priv->irq_id = irq_id;
/* init sub_dais */
INIT_LIST_HEAD(&afe->sub_dais);
@@ -3192,6 +3188,11 @@ static int mt8195_afe_pcm_dev_probe(struct platform_device *pdev)
goto err_pm_put;
}
+ ret = devm_request_irq(dev, irq_id, mt8195_afe_irq_handler,
+ IRQF_TRIGGER_NONE, "asys-isr", afe);
+ if (ret)
+ goto err_pm_put;
+
/* register component */
ret = devm_snd_soc_register_component(dev, &mtk_afe_pcm_platform,
afe->dai_drivers, afe->num_dai_drivers);
@@ -3223,6 +3224,11 @@ static int mt8195_afe_pcm_dev_probe(struct platform_device *pdev)
static void mt8195_afe_pcm_dev_remove(struct platform_device *pdev)
{
+ struct mtk_base_afe *afe = platform_get_drvdata(pdev);
+ struct mt8195_afe_private *afe_priv = afe->platform_priv;
+
+ devm_free_irq(&pdev->dev, afe_priv->irq_id, afe);
+
if (!pm_runtime_status_suspended(&pdev->dev))
mt8195_afe_runtime_suspend(&pdev->dev);
}
--
2.43.0
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH v2 5/5] ASoC: mediatek: mt8188: Keep the AFE IRQ within its resource lifetime
2026-11-12 6:17 [PATCH v2 0/5] ASoC: mediatek: fix AFE IRQ registration and removal ordering Myeonghun Pak
` (3 preceding siblings ...)
2026-11-12 6:17 ` [PATCH v2 4/5] ASoC: mediatek: mt8195: " Myeonghun Pak
@ 2026-11-12 6:17 ` Myeonghun Pak
4 siblings, 0 replies; 6+ messages in thread
From: Myeonghun Pak @ 2026-11-12 6:17 UTC (permalink / raw)
To: Mark Brown, Liam Girdwood
Cc: Jaroslav Kysela, Takashi Iwai, Matthias Brugger,
AngeloGioacchino Del Regno, linux-sound, linux-kernel,
linux-arm-kernel, linux-mediatek, Ijae Kim, Trevor Wu
The AFE IRQ handler uses afe->regmap, but its managed IRQ is requested
before the regmap is allocated. The audiosys reset earlier in probe
makes an interrupt before that point unlikely, but devres still
releases the regmap before the IRQ on probe failure and removal.
Request the IRQ after initializing the regmap and before registering
the component, so that a failed request takes the existing runtime PM
unwind and devres releases the component, the IRQ and the regmap in
that order. The driver has no remove callback, so the IRQ needs no
explicit release.
Found by a static analysis tool under development.
Fixes: bf106bf09376 ("ASoC: mediatek: mt8188: 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/mt8188/mt8188-afe-pcm.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/sound/soc/mediatek/mt8188/mt8188-afe-pcm.c b/sound/soc/mediatek/mt8188/mt8188-afe-pcm.c
index d9c82cd8869e..2a27e5de9184 100644
--- a/sound/soc/mediatek/mt8188/mt8188-afe-pcm.c
+++ b/sound/soc/mediatek/mt8188/mt8188-afe-pcm.c
@@ -3306,11 +3306,6 @@ static int mt8188_afe_pcm_dev_probe(struct platform_device *pdev)
if (irq_id < 0)
return irq_id;
- ret = devm_request_irq(dev, irq_id, mt8188_afe_irq_handler,
- IRQF_TRIGGER_NONE, "asys-isr", (void *)afe);
- if (ret)
- return ret;
-
/* init sub_dais */
INIT_LIST_HEAD(&afe->sub_dais);
@@ -3362,6 +3357,11 @@ static int mt8188_afe_pcm_dev_probe(struct platform_device *pdev)
goto err_pm_put;
}
+ ret = devm_request_irq(dev, irq_id, mt8188_afe_irq_handler,
+ IRQF_TRIGGER_NONE, "asys-isr", afe);
+ if (ret)
+ goto err_pm_put;
+
/* register component */
ret = devm_snd_soc_register_component(dev, &mtk_afe_pcm_platform,
afe->dai_drivers, afe->num_dai_drivers);
--
2.43.0
^ permalink raw reply [flat|nested] 6+ messages in thread