diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c index 956051268b516781b905de972ae4ce601e9e1fc8..5cf6711393246465252c3a6eff111472a7634e0b 100644 --- a/sound/soc/fsl/fsl_sai.c +++ b/sound/soc/fsl/fsl_sai.c @@ -547,8 +547,13 @@ static int fsl_sai_hw_params(struct snd_pcm_substream *substream, int ret, i, trce_mask = 0, dl_cfg_cnt, dl_cfg_idx = 0; struct fsl_sai_dl_cfg *dl_cfg; + 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); sai->is_dsd = fsl_is_dsd(params); @@ -574,9 +579,6 @@ static int fsl_sai_hw_params(struct snd_pcm_substream *substream, return -EINVAL; } - if (sai->slot_width) - slot_width = sai->slot_width; - bclk = rate*(sai->bclk_ratio ? sai->bclk_ratio : slots * slot_width); if (!IS_ERR_OR_NULL(sai->pinctrl)) {