ASoC: fsl_sai: Move the global registers setting to _dai_probe()
Because we cannot make sure which one of _dai_fmt() and _dai_sysclk() will be firstly called. So move the RCSR/TCSR and TCR1/RCR1's initialization to _dai_probe(), and this can make sure that before any of {T,R}CR{1~5} register to be set the RCSR/TCSR's RE/TE bit has been cleared for the hareware limitation. Signed-off-by: Xiubo Li <Li.Xiubo@freescale.com> Signed-off-by: Mark Brown <broonie@linaro.org>
This commit is contained in:
parent
4e3a99f5b0
commit
e6dc12d719
1 changed files with 12 additions and 5 deletions
|
@ -100,11 +100,6 @@ static int fsl_sai_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
sai_writel(sai, 0x0, sai->base + FSL_SAI_RCSR);
|
||||
sai_writel(sai, 0x0, sai->base + FSL_SAI_TCSR);
|
||||
sai_writel(sai, FSL_SAI_MAXBURST_TX * 2, sai->base + FSL_SAI_TCR1);
|
||||
sai_writel(sai, FSL_SAI_MAXBURST_RX - 1, sai->base + FSL_SAI_RCR1);
|
||||
|
||||
ret = fsl_sai_set_dai_sysclk_tr(cpu_dai, clk_id, freq,
|
||||
FSL_FMT_TRANSMITTER);
|
||||
if (ret) {
|
||||
|
@ -351,6 +346,18 @@ static const struct snd_soc_dai_ops fsl_sai_pcm_dai_ops = {
|
|||
static int fsl_sai_dai_probe(struct snd_soc_dai *cpu_dai)
|
||||
{
|
||||
struct fsl_sai *sai = dev_get_drvdata(cpu_dai->dev);
|
||||
int ret;
|
||||
|
||||
ret = clk_prepare_enable(sai->clk);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
sai_writel(sai, 0x0, sai->base + FSL_SAI_RCSR);
|
||||
sai_writel(sai, 0x0, sai->base + FSL_SAI_TCSR);
|
||||
sai_writel(sai, FSL_SAI_MAXBURST_TX * 2, sai->base + FSL_SAI_TCR1);
|
||||
sai_writel(sai, FSL_SAI_MAXBURST_RX - 1, sai->base + FSL_SAI_RCR1);
|
||||
|
||||
clk_disable_unprepare(sai->clk);
|
||||
|
||||
snd_soc_dai_init_dma_data(cpu_dai, &sai->dma_params_tx,
|
||||
&sai->dma_params_rx);
|
||||
|
|
Loading…
Reference in a new issue