ASoC: mxs-saif: fix clock prepare and enable unbalance issue
Currently we directly call a clock_enable in trigger function without a clk_prepare as pair first. This will cause system hang immediately when run capture because the clock was not prepared(playback does not hang because the clock was prepared already by get_mclk before), a warning message in clock framework may cause a deadlock to reclaim clock lock (see: pl011_console_write). Here we prepare clock first in hw_param, then enable it in trigger function to guarantee the balance. Signed-off-by: Dong Aisheng <dong.aisheng@linaro.org> Acked-by: Shawn Guo <shawn.guo@linaro.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
b8edf3e552
commit
c2e1d9073f
|
@ -394,9 +394,14 @@ static int mxs_saif_hw_params(struct snd_pcm_substream *substream,
|
||||||
struct snd_soc_dai *cpu_dai)
|
struct snd_soc_dai *cpu_dai)
|
||||||
{
|
{
|
||||||
struct mxs_saif *saif = snd_soc_dai_get_drvdata(cpu_dai);
|
struct mxs_saif *saif = snd_soc_dai_get_drvdata(cpu_dai);
|
||||||
|
struct mxs_saif *master_saif;
|
||||||
u32 scr, stat;
|
u32 scr, stat;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
master_saif = mxs_saif_get_master(saif);
|
||||||
|
if (!master_saif)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
/* mclk should already be set */
|
/* mclk should already be set */
|
||||||
if (!saif->mclk && saif->mclk_in_use) {
|
if (!saif->mclk && saif->mclk_in_use) {
|
||||||
dev_err(cpu_dai->dev, "set mclk first\n");
|
dev_err(cpu_dai->dev, "set mclk first\n");
|
||||||
|
@ -420,6 +425,11 @@ static int mxs_saif_hw_params(struct snd_pcm_substream *substream,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* prepare clk in hw_param, enable in trigger */
|
||||||
|
clk_prepare(saif->clk);
|
||||||
|
if (saif != master_saif)
|
||||||
|
clk_prepare(master_saif->clk);
|
||||||
|
|
||||||
scr = __raw_readl(saif->base + SAIF_CTRL);
|
scr = __raw_readl(saif->base + SAIF_CTRL);
|
||||||
|
|
||||||
scr &= ~BM_SAIF_CTRL_WORD_LENGTH;
|
scr &= ~BM_SAIF_CTRL_WORD_LENGTH;
|
||||||
|
|
Loading…
Reference in New Issue