mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
14f0e5f8d9
commit
61fb4ff703
|
@ -308,12 +308,15 @@ static int stm32_sai_set_dai_tdm_slot(struct snd_soc_dai *cpu_dai, u32 tx_mask,
|
|||
static int stm32_sai_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
|
||||
{
|
||||
struct stm32_sai_sub_data *sai = snd_soc_dai_get_drvdata(cpu_dai);
|
||||
int cr1 = 0, frcr = 0;
|
||||
int cr1_mask = 0, frcr_mask = 0;
|
||||
int cr1, frcr = 0;
|
||||
int cr1_mask, frcr_mask = 0;
|
||||
int ret;
|
||||
|
||||
dev_dbg(cpu_dai->dev, "fmt %x\n", fmt);
|
||||
|
||||
cr1_mask = SAI_XCR1_PRTCFG_MASK;
|
||||
cr1 = SAI_XCR1_PRTCFG_SET(SAI_FREE_PROTOCOL);
|
||||
|
||||
switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
|
||||
/* SCK active high for all protocols */
|
||||
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)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
cr1_mask |= SAI_XCR1_PRTCFG_MASK | SAI_XCR1_CKSTR;
|
||||
cr1_mask |= SAI_XCR1_CKSTR;
|
||||
frcr_mask |= SAI_XFRCR_FSPOL | SAI_XFRCR_FSOFF |
|
||||
SAI_XFRCR_FSDEF;
|
||||
|
||||
|
@ -458,7 +461,7 @@ static int stm32_sai_set_config(struct snd_soc_dai *cpu_dai,
|
|||
SAI_XCR2_FTH_SET(STM_SAI_FIFO_TH_HALF));
|
||||
|
||||
/* Mode, data format and channel config */
|
||||
cr1 = SAI_XCR1_PRTCFG_SET(SAI_FREE_PROTOCOL);
|
||||
cr1_mask = SAI_XCR1_DS_MASK;
|
||||
switch (params_format(params)) {
|
||||
case SNDRV_PCM_FORMAT_S8:
|
||||
cr1 |= SAI_XCR1_DS_SET(SAI_DATASIZE_8);
|
||||
|
@ -473,11 +476,6 @@ static int stm32_sai_set_config(struct snd_soc_dai *cpu_dai,
|
|||
dev_err(cpu_dai->dev, "Data format not supported");
|
||||
return -EINVAL;
|
||||
}
|
||||
cr1_mask = SAI_XCR1_DS_MASK | SAI_XCR1_PRTCFG_MASK;
|
||||
|
||||
cr1_mask |= SAI_XCR1_RX_TX;
|
||||
if (STM_SAI_IS_CAPTURE(sai))
|
||||
cr1 |= SAI_XCR1_RX_TX;
|
||||
|
||||
cr1_mask |= SAI_XCR1_MONO;
|
||||
if ((sai->slots == 2) && (params_channels(params) == 1))
|
||||
|
@ -729,6 +727,7 @@ static void stm32_sai_shutdown(struct snd_pcm_substream *substream,
|
|||
static int stm32_sai_dai_probe(struct snd_soc_dai *cpu_dai)
|
||||
{
|
||||
struct stm32_sai_sub_data *sai = dev_get_drvdata(cpu_dai->dev);
|
||||
int cr1 = 0, cr1_mask;
|
||||
|
||||
sai->dma_params.addr = (dma_addr_t)(sai->phys_addr + STM_SAI_DR_REGX);
|
||||
/*
|
||||
|
@ -745,7 +744,11 @@ static int stm32_sai_dai_probe(struct snd_soc_dai *cpu_dai)
|
|||
else
|
||||
snd_soc_dai_init_dma_data(cpu_dai, NULL, &sai->dma_params);
|
||||
|
||||
return 0;
|
||||
cr1_mask = SAI_XCR1_RX_TX;
|
||||
if (STM_SAI_IS_CAPTURE(sai))
|
||||
cr1 |= SAI_XCR1_RX_TX;
|
||||
|
||||
return regmap_update_bits(sai->regmap, STM_SAI_CR1_REGX, cr1_mask, cr1);
|
||||
}
|
||||
|
||||
static const struct snd_soc_dai_ops stm32_sai_pcm_dai_ops = {
|
||||
|
|
Loading…
Reference in New Issue