diff options
Diffstat (limited to 'target/linux/layerscape/patches-5.4/801-audio-0052-MLK-18682-1-ASoC-fsl-sai-use-set_bclk_ratio-to-calcu.patch')
-rw-r--r-- | target/linux/layerscape/patches-5.4/801-audio-0052-MLK-18682-1-ASoC-fsl-sai-use-set_bclk_ratio-to-calcu.patch | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/target/linux/layerscape/patches-5.4/801-audio-0052-MLK-18682-1-ASoC-fsl-sai-use-set_bclk_ratio-to-calcu.patch b/target/linux/layerscape/patches-5.4/801-audio-0052-MLK-18682-1-ASoC-fsl-sai-use-set_bclk_ratio-to-calcu.patch new file mode 100644 index 0000000000..7c3685f654 --- /dev/null +++ b/target/linux/layerscape/patches-5.4/801-audio-0052-MLK-18682-1-ASoC-fsl-sai-use-set_bclk_ratio-to-calcu.patch @@ -0,0 +1,98 @@ +From fc4146698489c4725c9ac86ea3e0484914d5285b Mon Sep 17 00:00:00 2001 +From: Viorel Suman <viorel.suman@nxp.com> +Date: Wed, 27 Jun 2018 10:31:02 +0300 +Subject: [PATCH] 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 <viorel.suman@nxp.com> +[ Aisheng: split machine imx-pdm changes ] +Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com> +--- + sound/soc/fsl/fsl_sai.c | 21 +++++++++++++-------- + sound/soc/fsl/fsl_sai.h | 3 +-- + 2 files changed, 14 insertions(+), 10 deletions(-) + +--- 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(str + 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 + 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_ + 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_ + 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_ + } + + 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, +--- a/sound/soc/fsl/fsl_sai.h ++++ b/sound/soc/fsl/fsl_sai.h +@@ -203,7 +203,6 @@ + #define FSL_SAI_CLK_MAST3 3 + + #define FSL_SAI_MCLK_MAX 4 +-#define FSL_SAI_CLK_BIT 5 + + /* SAI data transfer numbers per DMA request */ + #define FSL_SAI_MAXBURST_TX 6 +@@ -258,7 +257,7 @@ struct fsl_sai { + unsigned int mclk_streams; + unsigned int slots; + unsigned int slot_width; +- unsigned int bitclk_freq; ++ unsigned int bitclk_ratio; + + struct snd_dmaengine_dai_dma_data dma_params_rx; + struct snd_dmaengine_dai_dma_data dma_params_tx; |