aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/layerscape/patches-5.4/801-audio-0052-MLK-18682-1-ASoC-fsl-sai-use-set_bclk_ratio-to-calcu.patch
diff options
context:
space:
mode:
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.patch98
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;