ASoC: fsl_sai: Update slots number according to bclk_ratio
authorShengjiu Wang <shengjiu.wang@nxp.com>
Fri, 5 Aug 2022 06:45:26 +0000 (14:45 +0800)
committerMark Brown <broonie@kernel.org>
Tue, 23 Aug 2022 18:52:36 +0000 (19:52 +0100)
The bclk_ratio is set by .set_bclk_ratio API.
bclk_ratio = slots * slot_width
So if slots is not set by .set_tdm_slot, then it can be calculated
by bclk_ratio.

Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
Link: https://lore.kernel.org/r/1659681926-13493-1-git-send-email-shengjiu.wang@nxp.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/fsl/fsl_sai.c

index 0f92906..81f89f6 100644 (file)
@@ -530,12 +530,14 @@ static int fsl_sai_hw_params(struct snd_pcm_substream *substream,
        u32 watermark;
        int ret, i;
 
-       if (sai->slots)
-               slots = sai->slots;
-
        if (sai->slot_width)
                slot_width = sai->slot_width;
 
+       if (sai->slots)
+               slots = sai->slots;
+       else if (sai->bclk_ratio)
+               slots = sai->bclk_ratio / slot_width;
+
        pins = DIV_ROUND_UP(channels, slots);
 
        /*