From 1ba2cb30eeab2b9b9d576f87a80a750f04b4bfa7 Mon Sep 17 00:00:00 2001 From: bui duc phuc Date: Fri, 16 Oct 2026 11:09:36 +0700 Subject: [PATCH 01/11] ASoC: amd: Explain component open return value handling Add comments explaining why the .open() callbacks must return 0 on success to ensure proper rollback handling and prevent future changes from reintroducing the issue. Reviewed-by: Vijendar Mukunda Signed-off-by: bui duc phuc Link: https://patch.msgid.link/20261016040946.521195-2-phucduc.bui@gmail.com Signed-off-by: Mark Brown --- sound/soc/amd/acp/acp-platform.c | 5 +++++ sound/soc/amd/ps/ps-pdm-dma.c | 6 ++++++ sound/soc/amd/ps/ps-sdw-dma.c | 6 ++++++ sound/soc/amd/raven/acp3x-pcm-dma.c | 6 ++++++ sound/soc/amd/renoir/acp3x-pdm-dma.c | 6 ++++++ sound/soc/amd/vangogh/acp5x-pcm-dma.c | 6 ++++++ sound/soc/amd/yc/acp6x-pdm-dma.c | 6 ++++++ 7 files changed, 41 insertions(+) diff --git a/sound/soc/amd/acp/acp-platform.c b/sound/soc/amd/acp/acp-platform.c index ba6dfe8fb6b7..f2c8853775ad 100644 --- a/sound/soc/amd/acp/acp-platform.c +++ b/sound/soc/amd/acp/acp-platform.c @@ -248,6 +248,11 @@ static int acp_dma_open(struct snd_soc_component *component, struct snd_pcm_subs list_add_tail(&stream->list, &chip->stream_list); spin_unlock_irq(&chip->acp_lock); + /* + * ASoC only marks the component as opened when .open() returns 0. + * Since snd_pcm_hw_constraint_integer() may return 1, explicitly + * return 0 to ensure .close() is not skipped on rollback. + */ return 0; } diff --git a/sound/soc/amd/ps/ps-pdm-dma.c b/sound/soc/amd/ps/ps-pdm-dma.c index 28e0686e9373..12c341e89bce 100644 --- a/sound/soc/amd/ps/ps-pdm-dma.c +++ b/sound/soc/amd/ps/ps-pdm-dma.c @@ -211,6 +211,12 @@ static int acp63_pdm_dma_open(struct snd_soc_component *component, pdm_data->acp63_base = adata->acp63_base; runtime->private_data = pdm_data; + + /* + * ASoC only marks the component as opened when .open() returns 0. + * Since snd_pcm_hw_constraint_integer() may return 1, explicitly + * return 0 to ensure .close() is not skipped on rollback. + */ return 0; } diff --git a/sound/soc/amd/ps/ps-sdw-dma.c b/sound/soc/amd/ps/ps-sdw-dma.c index 553fe11a2e50..c2640985f54c 100644 --- a/sound/soc/amd/ps/ps-sdw-dma.c +++ b/sound/soc/amd/ps/ps-sdw-dma.c @@ -337,6 +337,12 @@ static int acp63_sdw_dma_open(struct snd_soc_component *component, stream->stream_id = cpu_dai->id; stream->instance = amd_manager->instance; runtime->private_data = stream; + + /* + * ASoC only marks the component as opened when .open() returns 0. + * Since snd_pcm_hw_constraint_integer() may return 1, explicitly + * return 0 to ensure .close() is not skipped on rollback. + */ return 0; } diff --git a/sound/soc/amd/raven/acp3x-pcm-dma.c b/sound/soc/amd/raven/acp3x-pcm-dma.c index 072f3dc35d40..765057499021 100644 --- a/sound/soc/amd/raven/acp3x-pcm-dma.c +++ b/sound/soc/amd/raven/acp3x-pcm-dma.c @@ -237,6 +237,12 @@ static int acp3x_dma_open(struct snd_soc_component *component, i2s_data->acp3x_base = adata->acp3x_base; runtime->private_data = i2s_data; + + /* + * ASoC only marks the component as opened when .open() returns 0. + * Since snd_pcm_hw_constraint_integer() may return 1, explicitly + * return 0 to ensure .close() is not skipped on rollback. + */ return 0; } diff --git a/sound/soc/amd/renoir/acp3x-pdm-dma.c b/sound/soc/amd/renoir/acp3x-pdm-dma.c index c0481a9ba858..89dc60849c06 100644 --- a/sound/soc/amd/renoir/acp3x-pdm-dma.c +++ b/sound/soc/amd/renoir/acp3x-pdm-dma.c @@ -233,6 +233,12 @@ static int acp_pdm_dma_open(struct snd_soc_component *component, pdm_data->acp_base = adata->acp_base; runtime->private_data = pdm_data; + + /* + * ASoC only marks the component as opened when .open() returns 0. + * Since snd_pcm_hw_constraint_integer() may return 1, explicitly + * return 0 to ensure .close() is not skipped on rollback. + */ return 0; } diff --git a/sound/soc/amd/vangogh/acp5x-pcm-dma.c b/sound/soc/amd/vangogh/acp5x-pcm-dma.c index 33d59d992ee0..72050fa2de80 100644 --- a/sound/soc/amd/vangogh/acp5x-pcm-dma.c +++ b/sound/soc/amd/vangogh/acp5x-pcm-dma.c @@ -231,6 +231,12 @@ static int acp5x_dma_open(struct snd_soc_component *component, } i2s_data->acp5x_base = adata->acp5x_base; runtime->private_data = i2s_data; + + /* + * ASoC only marks the component as opened when .open() returns 0. + * Since snd_pcm_hw_constraint_integer() may return 1, explicitly + * return 0 to ensure .close() is not skipped on rollback. + */ return 0; } diff --git a/sound/soc/amd/yc/acp6x-pdm-dma.c b/sound/soc/amd/yc/acp6x-pdm-dma.c index afa9f66533e3..cba2509faaa1 100644 --- a/sound/soc/amd/yc/acp6x-pdm-dma.c +++ b/sound/soc/amd/yc/acp6x-pdm-dma.c @@ -209,6 +209,12 @@ static int acp6x_pdm_dma_open(struct snd_soc_component *component, pdm_data->acp6x_base = adata->acp6x_base; runtime->private_data = pdm_data; + + /* + * ASoC only marks the component as opened when .open() returns 0. + * Since snd_pcm_hw_constraint_integer() may return 1, explicitly + * return 0 to ensure .close() is not skipped on rollback. + */ return 0; } From ec2e1434c7f78f59ef26d12d3ed6560de9202e6c Mon Sep 17 00:00:00 2001 From: bui duc phuc Date: Fri, 16 Oct 2026 11:09:37 +0700 Subject: [PATCH 02/11] ASoC: apple: Explain DAI startup return value handling Add a comment explaining why .startup() must return 0 on success to ensure the DAI is correctly marked as started and prevent future changes from reintroducing the issue. Signed-off-by: bui duc phuc Link: https://patch.msgid.link/20261016040946.521195-3-phucduc.bui@gmail.com Signed-off-by: Mark Brown --- sound/soc/apple/mca.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sound/soc/apple/mca.c b/sound/soc/apple/mca.c index 3585432ad49b..26022a42a95e 100644 --- a/sound/soc/apple/mca.c +++ b/sound/soc/apple/mca.c @@ -535,6 +535,11 @@ static int mca_fe_startup(struct snd_pcm_substream *substream, if (ret < 0) return ret; + /* + * ASoC only marks the DAI as started when .startup() returns 0. + * Since snd_pcm_hw_constraint_minmax() may return 1, explicitly + * return 0 to ensure the DAI is correctly marked as started. + */ return 0; } From 1554ce7a5d9972780c8ebdddfc78299a107a50d8 Mon Sep 17 00:00:00 2001 From: bui duc phuc Date: Fri, 16 Oct 2026 11:09:38 +0700 Subject: [PATCH 03/11] ASoC: atmel: Explain component open return value handling Add a comment explaining why .open() must return 0 on success to ensure proper rollback handling and prevent future changes from reintroducing the issue. Signed-off-by: bui duc phuc Link: https://patch.msgid.link/20261016040946.521195-4-phucduc.bui@gmail.com Signed-off-by: Mark Brown --- sound/soc/atmel/atmel-pcm-pdc.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sound/soc/atmel/atmel-pcm-pdc.c b/sound/soc/atmel/atmel-pcm-pdc.c index 552bfa30d4ba..4cedf2ad934d 100644 --- a/sound/soc/atmel/atmel-pcm-pdc.c +++ b/sound/soc/atmel/atmel-pcm-pdc.c @@ -295,6 +295,11 @@ static int atmel_pcm_open(struct snd_soc_component *component, } runtime->private_data = prtd; + /* + * ASoC only marks the component as opened when .open() returns 0. + * Since snd_pcm_hw_constraint_integer() may return 1, explicitly + * return 0 to ensure .close() is not skipped on rollback. + */ return 0; out: From a6b1f3ccca48f9aefcbb6f09487931064a1ebe76 Mon Sep 17 00:00:00 2001 From: bui duc phuc Date: Fri, 16 Oct 2026 11:09:39 +0700 Subject: [PATCH 04/11] ASoC: codecs: Explain DAI startup return value handling Add comments explaining why the .startup() callbacks must return 0 on success to ensure the DAI is correctly marked as started and prevent future changes from reintroducing the issue. Signed-off-by: bui duc phuc Reviewed-by: Charles Keepax Link: https://patch.msgid.link/20261016040946.521195-5-phucduc.bui@gmail.com Signed-off-by: Mark Brown --- sound/soc/codecs/cs42l42.c | 5 +++++ sound/soc/codecs/nau8325.c | 5 +++++ sound/soc/codecs/nau8540.c | 5 +++++ sound/soc/codecs/nau8821.c | 5 +++++ sound/soc/codecs/nau8824.c | 5 +++++ sound/soc/codecs/nau8825.c | 5 +++++ sound/soc/codecs/wm8580.c | 5 +++++ sound/soc/codecs/wm8782.c | 5 +++++ 8 files changed, 40 insertions(+) diff --git a/sound/soc/codecs/cs42l42.c b/sound/soc/codecs/cs42l42.c index f6e4bf6206b7..18d6cb9bfa2c 100644 --- a/sound/soc/codecs/cs42l42.c +++ b/sound/soc/codecs/cs42l42.c @@ -907,6 +907,11 @@ static int cs42l42_dai_startup(struct snd_pcm_substream *substream, struct snd_s if (ret < 0) return ret; + /* + * ASoC only marks the DAI as started when .startup() returns 0. + * Since snd_pcm_hw_constraint_minmax() may return 1, explicitly + * return 0 to ensure the DAI is correctly marked as started. + */ return 0; } diff --git a/sound/soc/codecs/nau8325.c b/sound/soc/codecs/nau8325.c index 0902a7d7730d..5ccf4c110567 100644 --- a/sound/soc/codecs/nau8325.c +++ b/sound/soc/codecs/nau8325.c @@ -501,6 +501,11 @@ static int nau8325_dai_startup(struct snd_pcm_substream *substream, if (ret < 0) return ret; + /* + * ASoC only marks the DAI as started when .startup() returns 0. + * Since snd_pcm_hw_constraint_minmax() may return 1, explicitly + * return 0 to ensure the DAI is correctly marked as started. + */ return 0; } diff --git a/sound/soc/codecs/nau8540.c b/sound/soc/codecs/nau8540.c index 9484388ab262..09e7f31a904d 100644 --- a/sound/soc/codecs/nau8540.c +++ b/sound/soc/codecs/nau8540.c @@ -431,6 +431,11 @@ static int nau8540_dai_startup(struct snd_pcm_substream *substream, if (ret < 0) return ret; + /* + * ASoC only marks the DAI as started when .startup() returns 0. + * Since snd_pcm_hw_constraint_minmax() may return 1, explicitly + * return 0 to ensure the DAI is correctly marked as started. + */ return 0; } diff --git a/sound/soc/codecs/nau8821.c b/sound/soc/codecs/nau8821.c index 935df063822c..7b88ee3159d1 100644 --- a/sound/soc/codecs/nau8821.c +++ b/sound/soc/codecs/nau8821.c @@ -841,6 +841,11 @@ static int nau8821_dai_startup(struct snd_pcm_substream *substream, if (ret < 0) return ret; + /* + * ASoC only marks the DAI as started when .startup() returns 0. + * Since snd_pcm_hw_constraint_minmax() may return 1, explicitly + * return 0 to ensure the DAI is correctly marked as started. + */ return 0; } diff --git a/sound/soc/codecs/nau8824.c b/sound/soc/codecs/nau8824.c index c89889aa420e..046cce9192b7 100644 --- a/sound/soc/codecs/nau8824.c +++ b/sound/soc/codecs/nau8824.c @@ -1073,6 +1073,11 @@ static int nau8824_dai_startup(struct snd_pcm_substream *substream, if (ret < 0) return ret; + /* + * ASoC only marks the DAI as started when .startup() returns 0. + * Since snd_pcm_hw_constraint_minmax() may return 1, explicitly + * return 0 to ensure the DAI is correctly marked as started. + */ return 0; } diff --git a/sound/soc/codecs/nau8825.c b/sound/soc/codecs/nau8825.c index 10bbfbb460b1..af2a49c893d3 100644 --- a/sound/soc/codecs/nau8825.c +++ b/sound/soc/codecs/nau8825.c @@ -1273,6 +1273,11 @@ static int nau8825_dai_startup(struct snd_pcm_substream *substream, if (ret < 0) return ret; + /* + * ASoC only marks the DAI as started when .startup() returns 0. + * Since snd_pcm_hw_constraint_minmax() may return 1, explicitly + * return 0 to ensure the DAI is correctly marked as started. + */ return 0; } diff --git a/sound/soc/codecs/wm8580.c b/sound/soc/codecs/wm8580.c index 5343d445c322..cee80da8f753 100644 --- a/sound/soc/codecs/wm8580.c +++ b/sound/soc/codecs/wm8580.c @@ -860,6 +860,11 @@ static int wm8580_playback_startup(struct snd_pcm_substream *substream, if (ret < 0) return ret; + /* + * ASoC only marks the DAI as started when .startup() returns 0. + * Since snd_pcm_hw_constraint_minmax() may return 1, explicitly + * return 0 to ensure the DAI is correctly marked as started. + */ return 0; } diff --git a/sound/soc/codecs/wm8782.c b/sound/soc/codecs/wm8782.c index 767251ac4f89..cbf0c823c022 100644 --- a/sound/soc/codecs/wm8782.c +++ b/sound/soc/codecs/wm8782.c @@ -46,6 +46,11 @@ static int wm8782_dai_startup(struct snd_pcm_substream *sub, struct snd_soc_dai if (ret < 0) return ret; + /* + * ASoC only marks the DAI as started when .startup() returns 0. + * Since snd_pcm_hw_constraint_minmax() may return 1, explicitly + * return 0 to ensure the DAI is correctly marked as started. + */ return 0; } From f3e3dbbbbfd6139a05f96c628a694df590b439cd Mon Sep 17 00:00:00 2001 From: bui duc phuc Date: Fri, 16 Oct 2026 11:09:40 +0700 Subject: [PATCH 05/11] ASoC: imx-pcm-rpmsg: Explain component open return value handling Add a comment explaining why .open() must return 0 on success to ensure proper rollback handling and prevent future changes from reintroducing the issue. Reviewed-by: Chancel Liu Signed-off-by: bui duc phuc Link: https://patch.msgid.link/20261016040946.521195-6-phucduc.bui@gmail.com Signed-off-by: Mark Brown --- sound/soc/fsl/imx-pcm-rpmsg.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sound/soc/fsl/imx-pcm-rpmsg.c b/sound/soc/fsl/imx-pcm-rpmsg.c index 30e75fee5175..85b7c929a28a 100644 --- a/sound/soc/fsl/imx-pcm-rpmsg.c +++ b/sound/soc/fsl/imx-pcm-rpmsg.c @@ -269,6 +269,12 @@ static int imx_rpmsg_pcm_open(struct snd_soc_component *component, info->stream_timer[substream->stream].substream = substream; timer_setup(&info->stream_timer[substream->stream].timer, imx_rpmsg_timer_callback, 0); + + /* + * ASoC only marks the component as opened when .open() returns 0. + * Since snd_pcm_hw_constraint_integer() may return 1, explicitly + * return 0 to ensure .close() is not skipped on rollback. + */ return 0; } From 2f8d93394b7fe6af629760aca368bc55af7b2919 Mon Sep 17 00:00:00 2001 From: bui duc phuc Date: Fri, 16 Oct 2026 11:09:41 +0700 Subject: [PATCH 06/11] ASoC: intel: atom: Explain DAI startup return value handling Add a comment explaining why .startup() must return 0 on success to ensure proper rollback handling and prevent future changes from reintroducing the issue. Acked-by: Cezary Rojewski Signed-off-by: bui duc phuc Link: https://patch.msgid.link/20261016040946.521195-7-phucduc.bui@gmail.com Signed-off-by: Mark Brown --- sound/soc/intel/atom/sst-mfld-platform-pcm.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sound/soc/intel/atom/sst-mfld-platform-pcm.c b/sound/soc/intel/atom/sst-mfld-platform-pcm.c index db1fb3b26909..58681e007abf 100644 --- a/sound/soc/intel/atom/sst-mfld-platform-pcm.c +++ b/sound/soc/intel/atom/sst-mfld-platform-pcm.c @@ -341,6 +341,11 @@ static int sst_media_open(struct snd_pcm_substream *substream, stream = NULL; + /* + * ASoC only marks the DAI as started when .startup() returns 0. + * Since snd_pcm_hw_constraint_integer() may return 1, explicitly + * return 0 to ensure .shutdown() is not skipped on rollback. + */ return 0; } From 394f91bd0f7a3770201a53a104d37ca6a53b4df3 Mon Sep 17 00:00:00 2001 From: bui duc phuc Date: Fri, 16 Oct 2026 11:09:42 +0700 Subject: [PATCH 07/11] ASoC: renesas: msiof: Explain component open return value handling Add a comment explaining why .open() must return 0 on success to ensure the component is correctly marked as opened and prevent future changes from reintroducing the issue. Acked-by: Kuninori Morimoto Signed-off-by: bui duc phuc Link: https://patch.msgid.link/20261016040946.521195-8-phucduc.bui@gmail.com Signed-off-by: Mark Brown --- sound/soc/renesas/fsi.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sound/soc/renesas/fsi.c b/sound/soc/renesas/fsi.c index 88618e4b052d..74e2ea002fbb 100644 --- a/sound/soc/renesas/fsi.c +++ b/sound/soc/renesas/fsi.c @@ -1820,6 +1820,11 @@ static int fsi_pcm_open(struct snd_soc_component *component, if (ret < 0) return ret; + /* + * ASoC only marks the component as opened when .open() returns 0. + * Since snd_pcm_hw_constraint_integer() may return 1, explicitly + * return 0 to ensure the component is correctly marked as opened. + */ return 0; } From d2f4c848d0103027b16c4ed5171f3669031a69d4 Mon Sep 17 00:00:00 2001 From: bui duc phuc Date: Fri, 16 Oct 2026 11:09:43 +0700 Subject: [PATCH 08/11] ASoC: renesas: msiof: Remove redundant period constraint snd_pcm_hw_constraint_integer() is already called by snd_dmaengine_pcm_open(). Calling it again in msiof_open() is unnecessary, as the constraint is already applied and the second call returns 0. Remove the redundant constraint call. Acked-by: Kuninori Morimoto Signed-off-by: bui duc phuc Link: https://patch.msgid.link/20261016040946.521195-9-phucduc.bui@gmail.com Signed-off-by: Mark Brown --- sound/soc/renesas/rcar/msiof.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/sound/soc/renesas/rcar/msiof.c b/sound/soc/renesas/rcar/msiof.c index 9fead9a22cdc..11a6f22ec0ad 100644 --- a/sound/soc/renesas/rcar/msiof.c +++ b/sound/soc/renesas/rcar/msiof.c @@ -419,19 +419,13 @@ static int msiof_open(struct snd_soc_component *component, return PTR_ERR(chan); ret = snd_dmaengine_pcm_open(substream, chan); - if (ret < 0) - goto open_err_dma; - - snd_soc_set_runtime_hwparams(substream, &msiof_pcm_hardware); - - ret = snd_pcm_hw_constraint_integer(substream->runtime, SNDRV_PCM_HW_PARAM_PERIODS); - -open_err_dma: if (ret < 0) { dma_release_channel(chan); return ret; } + snd_soc_set_runtime_hwparams(substream, &msiof_pcm_hardware); + return 0; } From 65850cb2f9ce16a19c739e119a902927f3841c11 Mon Sep 17 00:00:00 2001 From: bui duc phuc Date: Fri, 16 Oct 2026 11:09:44 +0700 Subject: [PATCH 09/11] ASoC: renesas: rz-ssi: Explain component open return value handling Add a comment explaining why .open() must return 0 on success to ensure the component is correctly marked as opened and prevent future changes from reintroducing the issue. Signed-off-by: bui duc phuc Link: https://patch.msgid.link/20261016040946.521195-10-phucduc.bui@gmail.com Signed-off-by: Mark Brown --- sound/soc/renesas/rz-ssi.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sound/soc/renesas/rz-ssi.c b/sound/soc/renesas/rz-ssi.c index 2e297f721bb6..9f36fe2c16d2 100644 --- a/sound/soc/renesas/rz-ssi.c +++ b/sound/soc/renesas/rz-ssi.c @@ -946,6 +946,11 @@ static int rz_ssi_pcm_open_pio(struct snd_soc_component *component, if (ret < 0) return ret; + /* + * ASoC only marks the component as opened when .open() returns 0. + * Since snd_pcm_hw_constraint_integer() may return 1, explicitly + * return 0 to ensure the component is correctly marked as opened. + */ return 0; } From a0b64de6ea7e086f64ce97dec61e6639b334e13f Mon Sep 17 00:00:00 2001 From: bui duc phuc Date: Fri, 16 Oct 2026 11:09:45 +0700 Subject: [PATCH 10/11] ASoC: renesas: rz-ssi: Remove redundant component open callback In DMA mode, the generic dmaengine PCM component already applies the integer PERIODS constraint in snd_dmaengine_pcm_open(). Since rz_ssi_pcm_open_dma() only applies this constraint, remove the redundant component .open callback. Signed-off-by: bui duc phuc Link: https://patch.msgid.link/20261016040946.521195-11-phucduc.bui@gmail.com Signed-off-by: Mark Brown --- sound/soc/renesas/rz-ssi.c | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/sound/soc/renesas/rz-ssi.c b/sound/soc/renesas/rz-ssi.c index 9f36fe2c16d2..9a0781bb072d 100644 --- a/sound/soc/renesas/rz-ssi.c +++ b/sound/soc/renesas/rz-ssi.c @@ -954,19 +954,6 @@ static int rz_ssi_pcm_open_pio(struct snd_soc_component *component, return 0; } -static int rz_ssi_pcm_open_dma(struct snd_soc_component *component, - struct snd_pcm_substream *substream) -{ - int ret; - - ret = snd_pcm_hw_constraint_integer(substream->runtime, - SNDRV_PCM_HW_PARAM_PERIODS); - if (ret < 0) - return ret; - - return 0; -} - static snd_pcm_uframes_t rz_ssi_pcm_pointer(struct snd_soc_component *component, struct snd_pcm_substream *substream) { @@ -1017,7 +1004,6 @@ static const struct snd_soc_component_driver rz_ssi_soc_component_pio = { static const struct snd_soc_component_driver rz_ssi_soc_component_dma = { .name = "rz-ssi", - .open = rz_ssi_pcm_open_dma, .legacy_dai_naming = 1, }; From 48ed45aa30ced064b3425be777028aa3bd0ce423 Mon Sep 17 00:00:00 2001 From: bui duc phuc Date: Fri, 16 Oct 2026 11:09:46 +0700 Subject: [PATCH 11/11] ASoC: rockchip: Explain DAI link startup return value handling Add comments explaining why the .startup() callbacks must return 0 on success to ensure the DAI link is correctly marked as started and prevent future changes from reintroducing the issue. Signed-off-by: bui duc phuc Link: https://patch.msgid.link/20261016040946.521195-12-phucduc.bui@gmail.com Signed-off-by: Mark Brown --- sound/soc/rockchip/rk3399_gru_sound.c | 5 +++++ sound/soc/rockchip/rockchip_max98090.c | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/sound/soc/rockchip/rk3399_gru_sound.c b/sound/soc/rockchip/rk3399_gru_sound.c index 0ec80a4b8c59..d4a0daabfb42 100644 --- a/sound/soc/rockchip/rk3399_gru_sound.c +++ b/sound/soc/rockchip/rk3399_gru_sound.c @@ -266,6 +266,11 @@ static int rockchip_sound_startup(struct snd_pcm_substream *substream) if (ret < 0) return ret; + /* + * ASoC only marks the DAI link as started when .startup() returns 0. + * Since snd_pcm_hw_constraint_minmax() may return 1, explicitly + * return 0 to ensure the DAI link is correctly marked as started. + */ return 0; } diff --git a/sound/soc/rockchip/rockchip_max98090.c b/sound/soc/rockchip/rockchip_max98090.c index d54c36682415..de392b420ebd 100644 --- a/sound/soc/rockchip/rockchip_max98090.c +++ b/sound/soc/rockchip/rockchip_max98090.c @@ -202,6 +202,11 @@ static int rk_aif1_startup(struct snd_pcm_substream *substream) if (ret < 0) return ret; + /* + * ASoC only marks the DAI link as started when .startup() returns 0. + * Since snd_pcm_hw_constraint_minmax() may return 1, explicitly + * return 0 to ensure the DAI link is correctly marked as started. + */ return 0; }