diff options
author | Nicolin Chen <Guangyu.Chen@freescale.com> | 2014-02-18 18:40:33 +0800 |
---|---|---|
committer | Nicolin Chen <Guangyu.Chen@freescale.com> | 2014-02-19 18:49:53 +0800 |
commit | aca9c9d8ff535d9eb8ba79f22c0ad6b8306bfa8b (patch) | |
tree | 429f7d0c35b1b38ecf7d94ee6a7a6f53a2eac34d /sound | |
parent | 66a466d52cedad06e68fe8c37238b5b8b65413b5 (diff) |
ENGR00299756-1 ASoC: fsl_esai: Add missing clock enabler to ASoC interfaces
All of these functions might be called before we enable the core clock in the
startup() by set_bias_level() or late_probe() in machine driver for example.
To make it safe, we here add pair of clock en/disabling to each function.
Acked-by: Wang Shengjiu <b02247@freescale.com>
Signed-off-by: Nicolin Chen <Guangyu.Chen@freescale.com>
(cherry picked from commit e6df36df2bc8062f3d1c0a19d18acc843a77619d)
Diffstat (limited to 'sound')
-rw-r--r-- | sound/soc/fsl/fsl_esai.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/sound/soc/fsl/fsl_esai.c b/sound/soc/fsl/fsl_esai.c index 72165238e4ac..1eda08f7b490 100644 --- a/sound/soc/fsl/fsl_esai.c +++ b/sound/soc/fsl/fsl_esai.c @@ -1,5 +1,5 @@ /* - * Copyright 2008-2013 Freescale Semiconductor, Inc. All Rights Reserved. + * Copyright 2008-2014 Freescale Semiconductor, Inc. All Rights Reserved. */ /* @@ -41,6 +41,7 @@ static int fsl_esai_set_dai_sysclk(struct snd_soc_dai *cpu_dai, struct fsl_esai *esai = snd_soc_dai_get_drvdata(cpu_dai); u32 ecr, tccr, rccr; + clk_enable(esai->clk); ecr = readl(esai->base + ESAI_ECR); tccr = readl(esai->base + ESAI_TCCR); rccr = readl(esai->base + ESAI_RCCR); @@ -73,6 +74,8 @@ static int fsl_esai_set_dai_sysclk(struct snd_soc_dai *cpu_dai, writel(rccr, esai->base + ESAI_RCCR); ESAI_DUMP(); + clk_disable(esai->clk); + return 0; } @@ -82,6 +85,7 @@ static int fsl_esai_set_dai_clkdiv(struct snd_soc_dai *cpu_dai, struct fsl_esai *esai = snd_soc_dai_get_drvdata(cpu_dai); u32 tccr, rccr; + clk_enable(esai->clk); tccr = readl(esai->base + ESAI_TCCR); rccr = readl(esai->base + ESAI_RCCR); @@ -133,6 +137,8 @@ static int fsl_esai_set_dai_clkdiv(struct snd_soc_dai *cpu_dai, } writel(tccr, esai->base + ESAI_TCCR); writel(rccr, esai->base + ESAI_RCCR); + clk_disable(esai->clk); + return 0; } @@ -145,6 +151,7 @@ static int fsl_esai_set_dai_tdm_slot(struct snd_soc_dai *cpu_dai, struct fsl_esai *esai = snd_soc_dai_get_drvdata(cpu_dai); u32 tccr, rccr; + clk_enable(esai->clk); tccr = readl(esai->base + ESAI_TCCR); tccr &= ESAI_TCCR_TDC_MASK; @@ -164,6 +171,8 @@ static int fsl_esai_set_dai_tdm_slot(struct snd_soc_dai *cpu_dai, writel(((rx_mask >> 16) & 0xffff), esai->base + ESAI_RSMB); ESAI_DUMP(); + clk_disable(esai->clk); + return 0; } @@ -175,6 +184,7 @@ static int fsl_esai_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt) struct fsl_esai *esai = snd_soc_dai_get_drvdata(cpu_dai); u32 tcr, tccr, rcr, rccr, saicr; + clk_enable(esai->clk); tcr = readl(esai->base + ESAI_TCR); tccr = readl(esai->base + ESAI_TCCR); rcr = readl(esai->base + ESAI_RCR); @@ -285,6 +295,8 @@ static int fsl_esai_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt) writel(saicr, esai->base + ESAI_SAICR); ESAI_DUMP(); + clk_disable(esai->clk); + return 0; } |