aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlivier Moysan <olivier.moysan@st.com>2017-10-19 09:03:18 -0400
committerMark Brown <broonie@kernel.org>2017-10-21 06:17:49 -0400
commit61fb4ff70377cd2c49a3487bdb0156eba6930072 (patch)
tree553ac21dc2a9f06f0dc3358da0921e1ac83a1123
parent14f0e5f8d97e632695d92f41f2e91d10d8005d47 (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.c23
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,
308static int stm32_sai_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt) 308static 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,
729static int stm32_sai_dai_probe(struct snd_soc_dai *cpu_dai) 727static 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
751static const struct snd_soc_dai_ops stm32_sai_pcm_dai_ops = { 754static const struct snd_soc_dai_ops stm32_sai_pcm_dai_ops = {