From 4bc2390d9355dc1a127df2b03cd8241d92feba9b Mon Sep 17 00:00:00 2001 From: Viorel Suman Date: Wed, 27 Jun 2018 10:31:02 +0300 Subject: MLK-18682-1: ASoC: fsl: sai: use set_bclk_ratio to calculate BCLK freq (part 1) ALSA API has a standard way to configure DAI BCLK by calling "snd_soc_dai_set_bclk_ratio" function. So use it to set BCLK ratio and calculate SAI BCLK frequency. Signed-off-by: Viorel Suman [ Aisheng: split machine imx-pdm changes ] Signed-off-by: Dong Aisheng --- sound/soc/fsl/fsl_sai.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'sound/soc/fsl/fsl_sai.c') diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c index 10dda41249d2..3f7852d2a93a 100644 --- a/sound/soc/fsl/fsl_sai.c +++ b/sound/soc/fsl/fsl_sai.c @@ -234,6 +234,14 @@ static int fsl_sai_set_dai_sysclk_tr(struct snd_soc_dai *cpu_dai, return 0; } +static int fsl_sai_set_dai_bclk_ratio(struct snd_soc_dai *dai, unsigned int ratio) +{ + struct fsl_sai *sai = snd_soc_dai_get_drvdata(dai); + + sai->bitclk_ratio = ratio; + return 0; +} + static int fsl_sai_set_dai_sysclk(struct snd_soc_dai *cpu_dai, int clk_id, unsigned int freq, int dir) { @@ -243,11 +251,6 @@ static int fsl_sai_set_dai_sysclk(struct snd_soc_dai *cpu_dai, if (dir == SND_SOC_CLOCK_IN) return 0; - if (clk_id == FSL_SAI_CLK_BIT) { - sai->bitclk_freq = freq; - return 0; - } - if (freq > 0) { if (clk_id < 0 || clk_id >= FSL_SAI_MCLK_MAX) { dev_err(cpu_dai->dev, "Unknown clock id: %d\n", clk_id); @@ -571,6 +574,7 @@ static int fsl_sai_hw_params(struct snd_pcm_substream *substream, bool tx = substream->stream == SNDRV_PCM_STREAM_PLAYBACK; unsigned int channels = params_channels(params); u32 word_width = params_width(params); + u32 rate = params_rate(params); u32 val_cr4 = 0, val_cr5 = 0; u32 slots = (channels == 1) ? 2 : channels; u32 slot_width = word_width; @@ -605,12 +609,12 @@ static int fsl_sai_hw_params(struct snd_pcm_substream *substream, slot_width = sai->slot_width; if (!sai->slave_mode[tx]) { - if (sai->bitclk_freq) + if (sai->bitclk_ratio) ret = fsl_sai_set_bclk(cpu_dai, tx, - sai->bitclk_freq); + rate * sai->bitclk_ratio); else ret = fsl_sai_set_bclk(cpu_dai, tx, - slots * slot_width * params_rate(params)); + rate * slots * slot_width); if (ret) return ret; @@ -935,6 +939,7 @@ static void fsl_sai_shutdown(struct snd_pcm_substream *substream, } static const struct snd_soc_dai_ops fsl_sai_pcm_dai_ops = { + .set_bclk_ratio = fsl_sai_set_dai_bclk_ratio, .set_sysclk = fsl_sai_set_dai_sysclk, .set_fmt = fsl_sai_set_dai_fmt, .set_tdm_slot = fsl_sai_set_dai_tdm_slot, -- cgit v1.2.3