summaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorNicolin Chen <Guangyu.Chen@freescale.com>2014-02-18 18:40:33 +0800
committerNicolin Chen <Guangyu.Chen@freescale.com>2014-02-19 18:49:53 +0800
commitaca9c9d8ff535d9eb8ba79f22c0ad6b8306bfa8b (patch)
tree429f7d0c35b1b38ecf7d94ee6a7a6f53a2eac34d /sound
parent66a466d52cedad06e68fe8c37238b5b8b65413b5 (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.c14
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;
}