ASoC: stm32: i2s: fix 32 bits channel length without mclk
authorOlivier Moysan <olivier.moysan@foss.st.com>
Wed, 17 Nov 2021 10:44:04 +0000 (11:44 +0100)
committerMark Brown <broonie@kernel.org>
Wed, 17 Nov 2021 13:04:38 +0000 (13:04 +0000)
Fix divider calculation in the case of 32 bits channel
configuration, when no master clock is used.

Fixes: e4e6ec7b127c ("ASoC: stm32: Add I2S driver")

Signed-off-by: Olivier Moysan <olivier.moysan@foss.st.com>
Link: https://lore.kernel.org/r/20211117104404.3832-1-olivier.moysan@foss.st.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/stm/stm32_i2s.c

index 6254bacad6eb7673aa0b90f57077790175705457..717f45a83445c129e1779d3f3851011b207517ef 100644 (file)
@@ -700,7 +700,7 @@ static int stm32_i2s_configure_clock(struct snd_soc_dai *cpu_dai,
                if (ret < 0)
                        return ret;
 
-               nb_bits = frame_len * ((cgfr & I2S_CGFR_CHLEN) + 1);
+               nb_bits = frame_len * (FIELD_GET(I2S_CGFR_CHLEN, cgfr) + 1);
                ret = stm32_i2s_calc_clk_div(i2s, i2s_clock_rate,
                                             (nb_bits * rate));
                if (ret)