[PATCH] ASoC: fsl_sai: Constrain sample rates from audio PLLs only in master mode

Chancel Liu posted 1 patch 1 month, 4 weeks ago
sound/soc/fsl/fsl_sai.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
[PATCH] ASoC: fsl_sai: Constrain sample rates from audio PLLs only in master mode
Posted by Chancel Liu 1 month, 4 weeks ago
If SAI works in master mode it will generate clocks for external codec
from audio PLLs. Thus sample rates should be constrained according to
audio PLL clocks. While SAI works in slave mode which means clocks are
generated externally then constraints are independent of audio PLLs.

Fixes: 4edc98598be4 ("ASoC: fsl_sai: Add sample rate constraint")
Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
---
 sound/soc/fsl/fsl_sai.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c
index 72bfc91e21b9..86730c214914 100644
--- a/sound/soc/fsl/fsl_sai.c
+++ b/sound/soc/fsl/fsl_sai.c
@@ -917,8 +917,14 @@ static int fsl_sai_startup(struct snd_pcm_substream *substream,
 					   tx ? sai->dma_params_tx.maxburst :
 					   sai->dma_params_rx.maxburst);
 
-	ret = snd_pcm_hw_constraint_list(substream->runtime, 0,
-					 SNDRV_PCM_HW_PARAM_RATE, &sai->constraint_rates);
+	if (sai->is_consumer_mode[tx])
+		ret = snd_pcm_hw_constraint_list(substream->runtime, 0,
+						 SNDRV_PCM_HW_PARAM_RATE,
+						 &fsl_sai_rate_constraints);
+	else
+		ret = snd_pcm_hw_constraint_list(substream->runtime, 0,
+						 SNDRV_PCM_HW_PARAM_RATE,
+						 &sai->constraint_rates);
 
 	return ret;
 }
-- 
2.50.1
Re: [PATCH] ASoC: fsl_sai: Constrain sample rates from audio PLLs only in master mode
Posted by Mark Brown 1 month, 3 weeks ago
On Wed, 10 Dec 2025 15:21:09 +0900, Chancel Liu wrote:
> If SAI works in master mode it will generate clocks for external codec
> from audio PLLs. Thus sample rates should be constrained according to
> audio PLL clocks. While SAI works in slave mode which means clocks are
> generated externally then constraints are independent of audio PLLs.
> 
> 

Applied to

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

Thanks!

[1/1] ASoC: fsl_sai: Constrain sample rates from audio PLLs only in master mode
      commit: 9f4d0899efd9892fc7514c9488270e1bb7dedd2b

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
Re: [PATCH] ASoC: fsl_sai: Constrain sample rates from audio PLLs only in master mode
Posted by Shengjiu Wang 1 month, 4 weeks ago
On Wed, Dec 10, 2025 at 2:21 PM Chancel Liu <chancel.liu@nxp.com> wrote:
>
> If SAI works in master mode it will generate clocks for external codec
> from audio PLLs. Thus sample rates should be constrained according to
> audio PLL clocks. While SAI works in slave mode which means clocks are
> generated externally then constraints are independent of audio PLLs.
>
> Fixes: 4edc98598be4 ("ASoC: fsl_sai: Add sample rate constraint")
> Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
> ---
>  sound/soc/fsl/fsl_sai.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c
> index 72bfc91e21b9..86730c214914 100644
> --- a/sound/soc/fsl/fsl_sai.c
> +++ b/sound/soc/fsl/fsl_sai.c
> @@ -917,8 +917,14 @@ static int fsl_sai_startup(struct snd_pcm_substream *substream,
>                                            tx ? sai->dma_params_tx.maxburst :
>                                            sai->dma_params_rx.maxburst);
>
> -       ret = snd_pcm_hw_constraint_list(substream->runtime, 0,
> -                                        SNDRV_PCM_HW_PARAM_RATE, &sai->constraint_rates);
> +       if (sai->is_consumer_mode[tx])

The sai->is_consumer_mode[tx] can be changed after startup(),
then there may be an issue for the constraint.

It looks like there is no perfect solution here.

Best regards
Shengjiu Wang

> +               ret = snd_pcm_hw_constraint_list(substream->runtime, 0,
> +                                                SNDRV_PCM_HW_PARAM_RATE,
> +                                                &fsl_sai_rate_constraints);
> +       else
> +               ret = snd_pcm_hw_constraint_list(substream->runtime, 0,
> +                                                SNDRV_PCM_HW_PARAM_RATE,
> +                                                &sai->constraint_rates);
>
>         return ret;
>  }
> --
> 2.50.1
>