ASoC: EDB93xx: Manage I2S rates according to datasheet for CS4271 CODEC.

Manage I2S rates according to datasheet for CS4271 CODEC in EDB93xx
machine driver.

Signed-off-by: Alexander Sverdlin <subaparts@yandex.ru>
Acked-by: Liam Girdwood <lrg@ti.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>

authored by

Alexander Sverdlin and committed by
Mark Brown
6d33cd77 5c3a12e9

+8 -8
+8 -8
sound/soc/ep93xx/edb93xx.c
··· 41 41 struct snd_soc_dai *codec_dai = rtd->codec_dai; 42 42 struct snd_soc_dai *cpu_dai = rtd->cpu_dai; 43 43 int err; 44 + unsigned int mclk_rate; 44 45 unsigned int rate = params_rate(params); 46 + 45 47 /* 46 - * We set LRCLK equal to `rate' and SCLK = LRCLK * 64, 47 - * because our sample size is 32 bit * 2 channels. 48 - * I2S standard permits us to transmit more bits than 49 - * the codec uses. 50 - * MCLK = SCLK * 4 is the best recommended value, 51 - * but we have to fall back to ratio 2 for higher 52 - * sample rates. 48 + * According to CS4271 datasheet we use MCLK/LRCK=256 for 49 + * rates below 50kHz and 128 for higher sample rates 53 50 */ 54 - unsigned int mclk_rate = rate * 64 * ((rate <= 48000) ? 4 : 2); 51 + if (rate < 50000) 52 + mclk_rate = rate * 64 * 4; 53 + else 54 + mclk_rate = rate * 64 * 2; 55 55 56 56 err = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S | 57 57 SND_SOC_DAIFMT_NB_IF |