summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>2012-11-16 01:17:18 -0800
committerMark Brown <broonie@opensource.wolfsonmicro.com>2012-11-20 15:11:21 +0900
commitab6340c4ecc21c01a487e9be15754d5f934a003a (patch)
tree3f957fdfffc82caf864e694dc34d2b48538a129f
parentc2052def9e92de0f702eb38e179b7991f4638351 (diff)
ASoC: fsi: master clock selection become independent from platform flags
Current FSI driver is using platform information pointer, but it is not good design for DT support. This patch makes master clock selection independent from platform information pointer. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
-rw-r--r--include/sound/sh_fsi.h4
-rw-r--r--sound/soc/sh/fsi.c17
2 files changed, 10 insertions, 11 deletions
diff --git a/include/sound/sh_fsi.h b/include/sound/sh_fsi.h
index 27ee1dcc3e2..cc1c919c643 100644
--- a/include/sound/sh_fsi.h
+++ b/include/sound/sh_fsi.h
@@ -47,8 +47,8 @@
/* D: clock selecter if master mode */
#define SH_FSI_CLK_MASK 0x0000F000
-#define SH_FSI_CLK_EXTERNAL (1 << 12)
-#define SH_FSI_CLK_CPG (2 << 12) /* FSIxCK + FSI-DIV */
+#define SH_FSI_CLK_EXTERNAL (0 << 12)
+#define SH_FSI_CLK_CPG (1 << 12) /* FSIxCK + FSI-DIV */
/*
* set_rate return value
diff --git a/sound/soc/sh/fsi.c b/sound/soc/sh/fsi.c
index cc81a4966df..77747b07536 100644
--- a/sound/soc/sh/fsi.c
+++ b/sound/soc/sh/fsi.c
@@ -264,6 +264,7 @@ struct fsi_priv {
int chan_num:16;
int clk_master:1;
+ int clk_cpg:1;
int spdif:1;
long rate;
@@ -1779,7 +1780,6 @@ static int fsi_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
{
struct fsi_priv *fsi = fsi_get_priv_frm_dai(dai);
set_rate_func set_rate = fsi_get_info_set_rate(fsi);
- u32 flags = fsi_get_info_flags(fsi);
int ret;
/* set master/slave audio interface */
@@ -1802,16 +1802,12 @@ static int fsi_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
if (set_rate)
dev_warn(dai->dev, "set_rate will be removed soon\n");
- switch (flags & SH_FSI_CLK_MASK) {
- case SH_FSI_CLK_EXTERNAL:
- fsi_clk_init(dai->dev, fsi, 1, 1, 0,
- fsi_clk_set_rate_external);
- break;
- case SH_FSI_CLK_CPG:
+ if (fsi->clk_cpg)
fsi_clk_init(dai->dev, fsi, 0, 1, 1,
fsi_clk_set_rate_cpg);
- break;
- }
+ else
+ fsi_clk_init(dai->dev, fsi, 1, 1, 0,
+ fsi_clk_set_rate_external);
}
/* set format */
@@ -1989,6 +1985,9 @@ static void fsi_port_info_init(struct fsi_priv *fsi,
{
if (info->flags & SH_FSI_FMT_SPDIF)
fsi->spdif = 1;
+
+ if (info->flags & SH_FSI_CLK_CPG)
+ fsi->clk_cpg = 1;
}
static void fsi_handler_init(struct fsi_priv *fsi,