diff options
author | Olivier Moysan <olivier.moysan@st.com> | 2017-10-19 09:03:18 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2017-10-21 06:17:49 -0400 |
commit | 61fb4ff70377cd2c49a3487bdb0156eba6930072 (patch) | |
tree | 553ac21dc2a9f06f0dc3358da0921e1ac83a1123 | |
parent | 14f0e5f8d97e632695d92f41f2e91d10d8005d47 (diff) |
ASoC: stm32: sai: Move static settings to DAI init
Audio interface direction and protocol settings does not change
at runtime. So, these settings are moved from hw_params
function to dai_probe and set_fmt.
Signed-off-by: olivier moysan <olivier.moysan@st.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | sound/soc/stm/stm32_sai_sub.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/sound/soc/stm/stm32_sai_sub.c b/sound/soc/stm/stm32_sai_sub.c index dde8ddf9e777..815ef1036199 100644 --- a/sound/soc/stm/stm32_sai_sub.c +++ b/sound/soc/stm/stm32_sai_sub.c | |||
@@ -308,12 +308,15 @@ static int stm32_sai_set_dai_tdm_slot(struct snd_soc_dai *cpu_dai, u32 tx_mask, | |||
308 | static int stm32_sai_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt) | 308 | static int stm32_sai_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt) |
309 | { | 309 | { |
310 | struct stm32_sai_sub_data *sai = snd_soc_dai_get_drvdata(cpu_dai); | 310 | struct stm32_sai_sub_data *sai = snd_soc_dai_get_drvdata(cpu_dai); |
311 | int cr1 = 0, frcr = 0; | 311 | int cr1, frcr = 0; |
312 | int cr1_mask = 0, frcr_mask = 0; | 312 | int cr1_mask, frcr_mask = 0; |
313 | int ret; | 313 | int ret; |
314 | 314 | ||
315 | dev_dbg(cpu_dai->dev, "fmt %x\n", fmt); | 315 | dev_dbg(cpu_dai->dev, "fmt %x\n", fmt); |
316 | 316 | ||
317 | cr1_mask = SAI_XCR1_PRTCFG_MASK; | ||
318 | cr1 = SAI_XCR1_PRTCFG_SET(SAI_FREE_PROTOCOL); | ||
319 | |||
317 | switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { | 320 | switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { |
318 | /* SCK active high for all protocols */ | 321 | /* SCK active high for all protocols */ |
319 | case SND_SOC_DAIFMT_I2S: | 322 | case SND_SOC_DAIFMT_I2S: |
@@ -340,7 +343,7 @@ static int stm32_sai_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt) | |||
340 | return -EINVAL; | 343 | return -EINVAL; |
341 | } | 344 | } |
342 | 345 | ||
343 | cr1_mask |= SAI_XCR1_PRTCFG_MASK | SAI_XCR1_CKSTR; | 346 | cr1_mask |= SAI_XCR1_CKSTR; |
344 | frcr_mask |= SAI_XFRCR_FSPOL | SAI_XFRCR_FSOFF | | 347 | frcr_mask |= SAI_XFRCR_FSPOL | SAI_XFRCR_FSOFF | |
345 | SAI_XFRCR_FSDEF; | 348 | SAI_XFRCR_FSDEF; |
346 | 349 | ||
@@ -458,7 +461,7 @@ static int stm32_sai_set_config(struct snd_soc_dai *cpu_dai, | |||
458 | SAI_XCR2_FTH_SET(STM_SAI_FIFO_TH_HALF)); | 461 | SAI_XCR2_FTH_SET(STM_SAI_FIFO_TH_HALF)); |
459 | 462 | ||
460 | /* Mode, data format and channel config */ | 463 | /* Mode, data format and channel config */ |
461 | cr1 = SAI_XCR1_PRTCFG_SET(SAI_FREE_PROTOCOL); | 464 | cr1_mask = SAI_XCR1_DS_MASK; |
462 | switch (params_format(params)) { | 465 | switch (params_format(params)) { |
463 | case SNDRV_PCM_FORMAT_S8: | 466 | case SNDRV_PCM_FORMAT_S8: |
464 | cr1 |= SAI_XCR1_DS_SET(SAI_DATASIZE_8); | 467 | cr1 |= SAI_XCR1_DS_SET(SAI_DATASIZE_8); |
@@ -473,11 +476,6 @@ static int stm32_sai_set_config(struct snd_soc_dai *cpu_dai, | |||
473 | dev_err(cpu_dai->dev, "Data format not supported"); | 476 | dev_err(cpu_dai->dev, "Data format not supported"); |
474 | return -EINVAL; | 477 | return -EINVAL; |
475 | } | 478 | } |
476 | cr1_mask = SAI_XCR1_DS_MASK | SAI_XCR1_PRTCFG_MASK; | ||
477 | |||
478 | cr1_mask |= SAI_XCR1_RX_TX; | ||
479 | if (STM_SAI_IS_CAPTURE(sai)) | ||
480 | cr1 |= SAI_XCR1_RX_TX; | ||
481 | 479 | ||
482 | cr1_mask |= SAI_XCR1_MONO; | 480 | cr1_mask |= SAI_XCR1_MONO; |
483 | if ((sai->slots == 2) && (params_channels(params) == 1)) | 481 | if ((sai->slots == 2) && (params_channels(params) == 1)) |
@@ -729,6 +727,7 @@ static void stm32_sai_shutdown(struct snd_pcm_substream *substream, | |||
729 | static int stm32_sai_dai_probe(struct snd_soc_dai *cpu_dai) | 727 | static int stm32_sai_dai_probe(struct snd_soc_dai *cpu_dai) |
730 | { | 728 | { |
731 | struct stm32_sai_sub_data *sai = dev_get_drvdata(cpu_dai->dev); | 729 | struct stm32_sai_sub_data *sai = dev_get_drvdata(cpu_dai->dev); |
730 | int cr1 = 0, cr1_mask; | ||
732 | 731 | ||
733 | sai->dma_params.addr = (dma_addr_t)(sai->phys_addr + STM_SAI_DR_REGX); | 732 | sai->dma_params.addr = (dma_addr_t)(sai->phys_addr + STM_SAI_DR_REGX); |
734 | /* | 733 | /* |
@@ -745,7 +744,11 @@ static int stm32_sai_dai_probe(struct snd_soc_dai *cpu_dai) | |||
745 | else | 744 | else |
746 | snd_soc_dai_init_dma_data(cpu_dai, NULL, &sai->dma_params); | 745 | snd_soc_dai_init_dma_data(cpu_dai, NULL, &sai->dma_params); |
747 | 746 | ||
748 | return 0; | 747 | cr1_mask = SAI_XCR1_RX_TX; |
748 | if (STM_SAI_IS_CAPTURE(sai)) | ||
749 | cr1 |= SAI_XCR1_RX_TX; | ||
750 | |||
751 | return regmap_update_bits(sai->regmap, STM_SAI_CR1_REGX, cr1_mask, cr1); | ||
749 | } | 752 | } |
750 | 753 | ||
751 | static const struct snd_soc_dai_ops stm32_sai_pcm_dai_ops = { | 754 | static const struct snd_soc_dai_ops stm32_sai_pcm_dai_ops = { |