summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;
}