Subject: [PATCH 0/5] ASoC: MediaTek MT8195/86 Cleanups

This series performs some cleanups for mainly MT8195 and switches
both MT8195 and MT8186's SOF driver to the snd_sof_ipc_process_reply()
helper.

AngeloGioacchino Del Regno (5):
ASoC: SOF: mediatek: mt8195: Use snd_sof_ipc_process_reply() helper
ASoC: SOF: mediatek: mt8186: Use snd_sof_ipc_process_reply() helper
ASoC: mediatek: mt8195-afe-pcm: Simplify runtime PM during probe
ASoC: mediatek: mt8195-afe-pcm: Simplify with dev_err_probe()
ASoC: mediatek: mt8195-afe-pcm: Clean up unnecessary functions

sound/soc/mediatek/mt8195/mt8195-afe-pcm.c | 99 ++++++++--------------
sound/soc/sof/mediatek/mt8186/mt8186.c | 36 +-------
sound/soc/sof/mediatek/mt8195/mt8195.c | 36 +-------
3 files changed, 36 insertions(+), 135 deletions(-)

--
2.40.1


Subject: [PATCH 1/5] ASoC: SOF: mediatek: mt8195: Use snd_sof_ipc_process_reply() helper

Function mt8195_get_reply() performs practically the same operation
as the common snd_sof_ipc_get_reply() helper: removing the custom
function allows us to simply perform a call to the sof-priv helper
snd_sof_ipc_process_reply(), simplifying and shortening this driver
and getting all the benefits of using a common API.

Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
---
sound/soc/sof/mediatek/mt8195/mt8195.c | 36 +-------------------------
1 file changed, 1 insertion(+), 35 deletions(-)

diff --git a/sound/soc/sof/mediatek/mt8195/mt8195.c b/sound/soc/sof/mediatek/mt8195/mt8195.c
index 42bae574c87a..7d6a568556ea 100644
--- a/sound/soc/sof/mediatek/mt8195/mt8195.c
+++ b/sound/soc/sof/mediatek/mt8195/mt8195.c
@@ -49,47 +49,13 @@ static int mt8195_send_msg(struct snd_sof_dev *sdev,
return mtk_adsp_ipc_send(priv->dsp_ipc, MTK_ADSP_IPC_REQ, MTK_ADSP_IPC_OP_REQ);
}

-static void mt8195_get_reply(struct snd_sof_dev *sdev)
-{
- struct snd_sof_ipc_msg *msg = sdev->msg;
- struct sof_ipc_reply reply;
- int ret = 0;
-
- if (!msg) {
- dev_warn(sdev->dev, "unexpected ipc interrupt\n");
- return;
- }
-
- /* get reply */
- sof_mailbox_read(sdev, sdev->host_box.offset, &reply, sizeof(reply));
- if (reply.error < 0) {
- memcpy(msg->reply_data, &reply, sizeof(reply));
- ret = reply.error;
- } else {
- /* reply has correct size? */
- if (reply.hdr.size != msg->reply_size) {
- dev_err(sdev->dev, "error: reply expected %zu got %u bytes\n",
- msg->reply_size, reply.hdr.size);
- ret = -EINVAL;
- }
-
- /* read the message */
- if (msg->reply_size > 0)
- sof_mailbox_read(sdev, sdev->host_box.offset,
- msg->reply_data, msg->reply_size);
- }
-
- msg->reply_error = ret;
-}
-
static void mt8195_dsp_handle_reply(struct mtk_adsp_ipc *ipc)
{
struct adsp_priv *priv = mtk_adsp_ipc_get_data(ipc);
unsigned long flags;

spin_lock_irqsave(&priv->sdev->ipc_lock, flags);
- mt8195_get_reply(priv->sdev);
- snd_sof_ipc_reply(priv->sdev, 0);
+ snd_sof_ipc_process_reply(priv->sdev, 0);
spin_unlock_irqrestore(&priv->sdev->ipc_lock, flags);
}

--
2.40.1

Subject: [PATCH 4/5] ASoC: mediatek: mt8195-afe-pcm: Simplify with dev_err_probe()

Shorten the probe function by switching to dev_err_probe() where
possible.

Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
---
sound/soc/mediatek/mt8195/mt8195-afe-pcm.c | 45 +++++++---------------
1 file changed, 14 insertions(+), 31 deletions(-)

diff --git a/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c b/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
index a54c16e0aa05..105db11eecec 100644
--- a/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
+++ b/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
@@ -3062,10 +3062,8 @@ static int mt8195_afe_pcm_dev_probe(struct platform_device *pdev)
struct snd_soc_component *component;

ret = of_reserved_mem_device_init(dev);
- if (ret) {
- dev_err(dev, "failed to assign memory region: %d\n", ret);
- return ret;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "failed to assign memory region\n");

ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(33));
if (ret)
@@ -3089,24 +3087,17 @@ static int mt8195_afe_pcm_dev_probe(struct platform_device *pdev)

/* initial audio related clock */
ret = mt8195_afe_init_clock(afe);
- if (ret) {
- dev_err(dev, "init clock error\n");
- return ret;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "init clock error\n");

/* 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;
- }
+ if (IS_ERR(rstc))
+ return dev_err_probe(dev, PTR_ERR(rstc), "could not get audiosys reset\n");

ret = reset_control_reset(rstc);
- if (ret) {
- dev_err(dev, "failed to trigger audio reset:%d\n", ret);
- return ret;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "failed to trigger audio reset\n");

spin_lock_init(&afe_priv->afe_ctrl_lock);

@@ -3143,30 +3134,22 @@ static int mt8195_afe_pcm_dev_probe(struct platform_device *pdev)

ret = devm_request_irq(dev, irq_id, mt8195_afe_irq_handler,
IRQF_TRIGGER_NONE, "asys-isr", (void *)afe);
- if (ret) {
- dev_err(dev, "could not request_irq for asys-isr\n");
- return ret;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "could not request_irq for asys-isr\n");

/* init sub_dais */
INIT_LIST_HEAD(&afe->sub_dais);

for (i = 0; i < ARRAY_SIZE(dai_register_cbs); i++) {
ret = dai_register_cbs[i](afe);
- if (ret) {
- dev_warn(dev, "dai register i %d fail, ret %d\n",
- i, ret);
- return ret;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "dai cb%i register fail\n", i);
}

/* init dai_driver and component_driver */
ret = mtk_afe_combine_sub_dai(afe);
- if (ret) {
- dev_warn(dev, "mtk_afe_combine_sub_dai fail, ret %d\n",
- ret);
- return ret;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "mtk_afe_combine_sub_dai fail\n");

afe->mtk_afe_hardware = &mt8195_afe_hardware;
afe->memif_fs = mt8195_memif_fs;
--
2.40.1

Subject: [PATCH 2/5] ASoC: SOF: mediatek: mt8186: Use snd_sof_ipc_process_reply() helper

Function mt8186_get_reply() performs practically the same operation
as the common snd_sof_ipc_get_reply() helper: removing the custom
function allows us to simply perform a call to the sof-priv helper
snd_sof_ipc_process_reply(), simplifying and shortening this driver
and getting all the benefits of using a common API.

Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
---
sound/soc/sof/mediatek/mt8186/mt8186.c | 36 +-------------------------
1 file changed, 1 insertion(+), 35 deletions(-)

diff --git a/sound/soc/sof/mediatek/mt8186/mt8186.c b/sound/soc/sof/mediatek/mt8186/mt8186.c
index 597cb4476acb..419913c8474d 100644
--- a/sound/soc/sof/mediatek/mt8186/mt8186.c
+++ b/sound/soc/sof/mediatek/mt8186/mt8186.c
@@ -48,47 +48,13 @@ static int mt8186_send_msg(struct snd_sof_dev *sdev,
return mtk_adsp_ipc_send(priv->dsp_ipc, MTK_ADSP_IPC_REQ, MTK_ADSP_IPC_OP_REQ);
}

-static void mt8186_get_reply(struct snd_sof_dev *sdev)
-{
- struct snd_sof_ipc_msg *msg = sdev->msg;
- struct sof_ipc_reply reply;
- int ret = 0;
-
- if (!msg) {
- dev_warn(sdev->dev, "unexpected ipc interrupt\n");
- return;
- }
-
- /* get reply */
- sof_mailbox_read(sdev, sdev->host_box.offset, &reply, sizeof(reply));
- if (reply.error < 0) {
- memcpy(msg->reply_data, &reply, sizeof(reply));
- ret = reply.error;
- } else {
- /* reply has correct size? */
- if (reply.hdr.size != msg->reply_size) {
- dev_err(sdev->dev, "error: reply expected %zu got %u bytes\n",
- msg->reply_size, reply.hdr.size);
- ret = -EINVAL;
- }
-
- /* read the message */
- if (msg->reply_size > 0)
- sof_mailbox_read(sdev, sdev->host_box.offset,
- msg->reply_data, msg->reply_size);
- }
-
- msg->reply_error = ret;
-}
-
static void mt8186_dsp_handle_reply(struct mtk_adsp_ipc *ipc)
{
struct adsp_priv *priv = mtk_adsp_ipc_get_data(ipc);
unsigned long flags;

spin_lock_irqsave(&priv->sdev->ipc_lock, flags);
- mt8186_get_reply(priv->sdev);
- snd_sof_ipc_reply(priv->sdev, 0);
+ snd_sof_ipc_process_reply(priv->sdev, 0);
spin_unlock_irqrestore(&priv->sdev->ipc_lock, flags);
}

--
2.40.1

Subject: [PATCH 3/5] ASoC: mediatek: mt8195-afe-pcm: Simplify runtime PM during probe

Use devm_pm_runtime_enable() and pm_runtime_resume_and_get() to
to simplify the probe function.

Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
---
sound/soc/mediatek/mt8195/mt8195-afe-pcm.c | 22 ++++++++++++----------
1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c b/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
index 9e45efeada55..a54c16e0aa05 100644
--- a/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
+++ b/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
@@ -3179,16 +3179,16 @@ static int mt8195_afe_pcm_dev_probe(struct platform_device *pdev)

mt8195_afe_parse_of(afe, pdev->dev.of_node);

- pm_runtime_enable(dev);
- if (!pm_runtime_enabled(dev)) {
- ret = mt8195_afe_runtime_resume(dev);
- if (ret)
- return ret;
- }
-
/* enable clock for regcache get default value from hw */
afe_priv->pm_runtime_bypass_reg_ctl = true;
- pm_runtime_get_sync(dev);
+
+ ret = devm_pm_runtime_enable(dev);
+ if (ret)
+ return ret;
+
+ ret = pm_runtime_resume_and_get(dev);
+ if (ret)
+ return dev_err_probe(dev, ret, "Failed to resume device\n");

afe->regmap = devm_regmap_init_mmio(&pdev->dev, afe->base_addr,
&mt8195_afe_regmap_config);
@@ -3238,7 +3238,10 @@ static int mt8195_afe_pcm_dev_probe(struct platform_device *pdev)

mt8195_afe_init_registers(afe);

- pm_runtime_put_sync(dev);
+ ret = pm_runtime_put_sync(dev);
+ if (ret)
+ return dev_err_probe(dev, ret, "Failed to suspend device\n");
+
afe_priv->pm_runtime_bypass_reg_ctl = false;

regcache_cache_only(afe->regmap, true);
@@ -3248,7 +3251,6 @@ static int mt8195_afe_pcm_dev_probe(struct platform_device *pdev)

err_pm_put:
pm_runtime_put_sync(dev);
- pm_runtime_disable(dev);

return ret;
}
--
2.40.1

Subject: [PATCH 5/5] ASoC: mediatek: mt8195-afe-pcm: Clean up unnecessary functions

Function mt8195_afe_init_registers() performs just a single call to
regmap_multi_reg_write(), it returns int and it's not error checked;
move that call to the probe function and also add some error check.

While at it, also move the contents of mt8195_afe_parse_of() to the
probe function as well: since this is getting a handle to topckgen
and since that's optional, the ifdef for CONFIG_SND_SOC_MT6359 can
also be removed.

Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
---
sound/soc/mediatek/mt8195/mt8195-afe-pcm.c | 32 ++++++----------------
1 file changed, 8 insertions(+), 24 deletions(-)

diff --git a/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c b/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
index 105db11eecec..d22cf1664d8a 100644
--- a/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
+++ b/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
@@ -3030,28 +3030,6 @@ static const struct reg_sequence mt8195_cg_patch[] = {
{ AUDIO_TOP_CON1, 0xfffffff8 },
};

-static int mt8195_afe_init_registers(struct mtk_base_afe *afe)
-{
- return regmap_multi_reg_write(afe->regmap,
- mt8195_afe_reg_defaults,
- ARRAY_SIZE(mt8195_afe_reg_defaults));
-}
-
-static void mt8195_afe_parse_of(struct mtk_base_afe *afe,
- struct device_node *np)
-{
-#if IS_ENABLED(CONFIG_SND_SOC_MT6359)
- struct mt8195_afe_private *afe_priv = afe->platform_priv;
-
- afe_priv->topckgen = syscon_regmap_lookup_by_phandle(afe->dev->of_node,
- "mediatek,topckgen");
- if (IS_ERR(afe_priv->topckgen)) {
- dev_info(afe->dev, "%s() Cannot find topckgen controller: %ld\n",
- __func__, PTR_ERR(afe_priv->topckgen));
- }
-#endif
-}
-
static int mt8195_afe_pcm_dev_probe(struct platform_device *pdev)
{
struct mtk_base_afe *afe;
@@ -3160,7 +3138,10 @@ static int mt8195_afe_pcm_dev_probe(struct platform_device *pdev)

platform_set_drvdata(pdev, afe);

- mt8195_afe_parse_of(afe, pdev->dev.of_node);
+ afe_priv->topckgen = syscon_regmap_lookup_by_phandle(dev->of_node, "mediatek,topckgen");
+ if (IS_ERR(afe_priv->topckgen))
+ dev_dbg(afe->dev, "Cannot find topckgen controller: %ld\n",
+ PTR_ERR(afe_priv->topckgen));

/* enable clock for regcache get default value from hw */
afe_priv->pm_runtime_bypass_reg_ctl = true;
@@ -3219,7 +3200,10 @@ static int mt8195_afe_pcm_dev_probe(struct platform_device *pdev)
goto err_pm_put;
}

- mt8195_afe_init_registers(afe);
+ ret = regmap_multi_reg_write(afe->regmap, mt8195_afe_reg_defaults,
+ ARRAY_SIZE(mt8195_afe_reg_defaults));
+ if (ret)
+ goto err_pm_put;

ret = pm_runtime_put_sync(dev);
if (ret)
--
2.40.1

2023-05-03 13:31:55

by Trevor Wu (吳文良)

[permalink] [raw]
Subject: Re: [PATCH 5/5] ASoC: mediatek: mt8195-afe-pcm: Clean up unnecessary functions

On Wed, 2023-05-03 at 13:34 +0200, AngeloGioacchino Del Regno wrote:
> Function mt8195_afe_init_registers() performs just a single call to
> regmap_multi_reg_write(), it returns int and it's not error checked;
> move that call to the probe function and also add some error check.
>
> While at it, also move the contents of mt8195_afe_parse_of() to the
> probe function as well: since this is getting a handle to topckgen
> and since that's optional, the ifdef for CONFIG_SND_SOC_MT6359 can
> also be removed.
>
> Signed-off-by: AngeloGioacchino Del Regno <
> [email protected]>

Acked-by: Trevor Wu <[email protected]>

> ---
> sound/soc/mediatek/mt8195/mt8195-afe-pcm.c | 32 ++++++------------
> ----
> 1 file changed, 8 insertions(+), 24 deletions(-)
>
> diff --git a/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
> b/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
> index 105db11eecec..d22cf1664d8a 100644
> --- a/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
> +++ b/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
> @@ -3030,28 +3030,6 @@ static const struct reg_sequence
> mt8195_cg_patch[] = {
> { AUDIO_TOP_CON1, 0xfffffff8 },
> };
>
> -static int mt8195_afe_init_registers(struct mtk_base_afe *afe)
> -{
> - return regmap_multi_reg_write(afe->regmap,
> - mt8195_afe_reg_defaults,
> - ARRAY_SIZE(mt8195_afe_reg_defaults));
> -}
> -
> -static void mt8195_afe_parse_of(struct mtk_base_afe *afe,
> - struct device_node *np)
> -{
> -#if IS_ENABLED(CONFIG_SND_SOC_MT6359)
> - struct mt8195_afe_private *afe_priv = afe->platform_priv;
> -
> - afe_priv->topckgen = syscon_regmap_lookup_by_phandle(afe-
> >dev->of_node,
> - "mediate
> k,topckgen");
> - if (IS_ERR(afe_priv->topckgen)) {
> - dev_info(afe->dev, "%s() Cannot find topckgen
> controller: %ld\n",
> - __func__, PTR_ERR(afe_priv->topckgen));
> - }
> -#endif
> -}
> -
> static int mt8195_afe_pcm_dev_probe(struct platform_device *pdev)
> {
> struct mtk_base_afe *afe;
> @@ -3160,7 +3138,10 @@ static int mt8195_afe_pcm_dev_probe(struct
> platform_device *pdev)
>
> platform_set_drvdata(pdev, afe);
>
> - mt8195_afe_parse_of(afe, pdev->dev.of_node);
> + afe_priv->topckgen = syscon_regmap_lookup_by_phandle(dev-
> >of_node, "mediatek,topckgen");
> + if (IS_ERR(afe_priv->topckgen))
> + dev_dbg(afe->dev, "Cannot find topckgen controller:
> %ld\n",
> + PTR_ERR(afe_priv->topckgen));
>
> /* enable clock for regcache get default value from hw */
> afe_priv->pm_runtime_bypass_reg_ctl = true;
> @@ -3219,7 +3200,10 @@ static int mt8195_afe_pcm_dev_probe(struct
> platform_device *pdev)
> goto err_pm_put;
> }
>
> - mt8195_afe_init_registers(afe);
> + ret = regmap_multi_reg_write(afe->regmap,
> mt8195_afe_reg_defaults,
> + ARRAY_SIZE(mt8195_afe_reg_defaul
> ts));
> + if (ret)
> + goto err_pm_put;
>
> ret = pm_runtime_put_sync(dev);
> if (ret)
> --
> 2.40.1
>
>

2023-05-03 13:45:29

by Trevor Wu (吳文良)

[permalink] [raw]
Subject: Re: [PATCH 4/5] ASoC: mediatek: mt8195-afe-pcm: Simplify with dev_err_probe()

On Wed, 2023-05-03 at 13:34 +0200, AngeloGioacchino Del Regno wrote:
>
> Shorten the probe function by switching to dev_err_probe() where
> possible.
>
> Signed-off-by: AngeloGioacchino Del Regno <
> [email protected]>

Acked-by: Trevor Wu <[email protected]>
> ---
> sound/soc/mediatek/mt8195/mt8195-afe-pcm.c | 45 +++++++-------------
> --
> 1 file changed, 14 insertions(+), 31 deletions(-)
>
> diff --git a/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
> b/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
> index a54c16e0aa05..105db11eecec 100644
> --- a/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
> +++ b/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
> @@ -3062,10 +3062,8 @@ static int mt8195_afe_pcm_dev_probe(struct
> platform_device *pdev)
> struct snd_soc_component *component;
>
> ret = of_reserved_mem_device_init(dev);
> - if (ret) {
> - dev_err(dev, "failed to assign memory region: %d\n",
> ret);
> - return ret;
> - }
> + if (ret)
> + return dev_err_probe(dev, ret, "failed to assign
> memory region\n");
>
> ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(33));
> if (ret)
> @@ -3089,24 +3087,17 @@ static int mt8195_afe_pcm_dev_probe(struct
> platform_device *pdev)
>
> /* initial audio related clock */
> ret = mt8195_afe_init_clock(afe);
> - if (ret) {
> - dev_err(dev, "init clock error\n");
> - return ret;
> - }
> + if (ret)
> + return dev_err_probe(dev, ret, "init clock error\n");
>
> /* 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;
> - }
> + if (IS_ERR(rstc))
> + return dev_err_probe(dev, PTR_ERR(rstc), "could not
> get audiosys reset\n");
>
> ret = reset_control_reset(rstc);
> - if (ret) {
> - dev_err(dev, "failed to trigger audio reset:%d\n",
> ret);
> - return ret;
> - }
> + if (ret)
> + return dev_err_probe(dev, ret, "failed to trigger
> audio reset\n");
>
> spin_lock_init(&afe_priv->afe_ctrl_lock);
>
> @@ -3143,30 +3134,22 @@ static int mt8195_afe_pcm_dev_probe(struct
> platform_device *pdev)
>
> ret = devm_request_irq(dev, irq_id, mt8195_afe_irq_handler,
> IRQF_TRIGGER_NONE, "asys-isr", (void
> *)afe);
> - if (ret) {
> - dev_err(dev, "could not request_irq for asys-isr\n");
> - return ret;
> - }
> + if (ret)
> + return dev_err_probe(dev, ret, "could not request_irq
> for asys-isr\n");
>
> /* init sub_dais */
> INIT_LIST_HEAD(&afe->sub_dais);
>
> for (i = 0; i < ARRAY_SIZE(dai_register_cbs); i++) {
> ret = dai_register_cbs[i](afe);
> - if (ret) {
> - dev_warn(dev, "dai register i %d fail, ret
> %d\n",
> - i, ret);
> - return ret;
> - }
> + if (ret)
> + return dev_err_probe(dev, ret, "dai cb%i
> register fail\n", i);
> }
>
> /* init dai_driver and component_driver */
> ret = mtk_afe_combine_sub_dai(afe);
> - if (ret) {
> - dev_warn(dev, "mtk_afe_combine_sub_dai fail, ret
> %d\n",
> - ret);
> - return ret;
> - }
> + if (ret)
> + return dev_err_probe(dev, ret,
> "mtk_afe_combine_sub_dai fail\n");
>
> afe->mtk_afe_hardware = &mt8195_afe_hardware;
> afe->memif_fs = mt8195_memif_fs;
> --
> 2.40.1
>
>

2023-05-03 13:49:15

by Trevor Wu (吳文良)

[permalink] [raw]
Subject: Re: [PATCH 3/5] ASoC: mediatek: mt8195-afe-pcm: Simplify runtime PM during probe

On Wed, 2023-05-03 at 13:34 +0200, AngeloGioacchino Del Regno wrote:
> External email : Please do not click links or open attachments until
> you have verified the sender or the content.
>
>
> Use devm_pm_runtime_enable() and pm_runtime_resume_and_get() to
> to simplify the probe function.
>
> Signed-off-by: AngeloGioacchino Del Regno <
> [email protected]>

Acked-by: Trevor Wu <[email protected]>
> ---
> sound/soc/mediatek/mt8195/mt8195-afe-pcm.c | 22 ++++++++++++------
> ----
> 1 file changed, 12 insertions(+), 10 deletions(-)
>
> diff --git a/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
> b/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
> index 9e45efeada55..a54c16e0aa05 100644
> --- a/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
> +++ b/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
> @@ -3179,16 +3179,16 @@ static int mt8195_afe_pcm_dev_probe(struct
> platform_device *pdev)
>
> mt8195_afe_parse_of(afe, pdev->dev.of_node);
>
> - pm_runtime_enable(dev);
> - if (!pm_runtime_enabled(dev)) {
> - ret = mt8195_afe_runtime_resume(dev);
> - if (ret)
> - return ret;
> - }
> -
> /* enable clock for regcache get default value from hw */
> afe_priv->pm_runtime_bypass_reg_ctl = true;
> - pm_runtime_get_sync(dev);
> +
> + ret = devm_pm_runtime_enable(dev);
> + if (ret)
> + return ret;
> +
> + ret = pm_runtime_resume_and_get(dev);
> + if (ret)
> + return dev_err_probe(dev, ret, "Failed to resume
> device\n");
>
> afe->regmap = devm_regmap_init_mmio(&pdev->dev, afe-
> >base_addr,
> &mt8195_afe_regmap_config
> );
> @@ -3238,7 +3238,10 @@ static int mt8195_afe_pcm_dev_probe(struct
> platform_device *pdev)
>
> mt8195_afe_init_registers(afe);
>
> - pm_runtime_put_sync(dev);
> + ret = pm_runtime_put_sync(dev);
> + if (ret)
> + return dev_err_probe(dev, ret, "Failed to suspend
> device\n");
> +
> afe_priv->pm_runtime_bypass_reg_ctl = false;
>
> regcache_cache_only(afe->regmap, true);
> @@ -3248,7 +3251,6 @@ static int mt8195_afe_pcm_dev_probe(struct
> platform_device *pdev)
>
> err_pm_put:
> pm_runtime_put_sync(dev);
> - pm_runtime_disable(dev);
>
> return ret;
> }
> --
> 2.40.1
>
>

2023-05-09 06:55:23

by Mark Brown

[permalink] [raw]
Subject: Re: [PATCH 0/5] ASoC: MediaTek MT8195/86 Cleanups

On Wed, 03 May 2023 13:34:08 +0200, AngeloGioacchino Del Regno wrote:
> This series performs some cleanups for mainly MT8195 and switches
> both MT8195 and MT8186's SOF driver to the snd_sof_ipc_process_reply()
> helper.
>
> AngeloGioacchino Del Regno (5):
> ASoC: SOF: mediatek: mt8195: Use snd_sof_ipc_process_reply() helper
> ASoC: SOF: mediatek: mt8186: Use snd_sof_ipc_process_reply() helper
> ASoC: mediatek: mt8195-afe-pcm: Simplify runtime PM during probe
> ASoC: mediatek: mt8195-afe-pcm: Simplify with dev_err_probe()
> ASoC: mediatek: mt8195-afe-pcm: Clean up unnecessary functions
>
> [...]

Applied to

https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next

Thanks!

[1/5] ASoC: SOF: mediatek: mt8195: Use snd_sof_ipc_process_reply() helper
commit: 06ba8020287f43fc13962b158d8dec2689448a5a
[2/5] ASoC: SOF: mediatek: mt8186: Use snd_sof_ipc_process_reply() helper
commit: 709f34b41ceffedec17d1150018cf62f8ea95842
[3/5] ASoC: mediatek: mt8195-afe-pcm: Simplify runtime PM during probe
commit: 2ca0ec01d49c9c2742c2151ae94c94bdf36bb1b8
[4/5] ASoC: mediatek: mt8195-afe-pcm: Simplify with dev_err_probe()
commit: 863da1c17616e45f1472370892b6c925cee27e24
[5/5] ASoC: mediatek: mt8195-afe-pcm: Clean up unnecessary functions
commit: 686d041685639493a608bdcdb0d00551796721c9

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark