ASoC: fsi: master clock selection become independent from platform flags
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Fri, 16 Nov 2012 09:17:18 +0000 (01:17 -0800)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Tue, 20 Nov 2012 06:11:21 +0000 (15:11 +0900)
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>
include/sound/sh_fsi.h
sound/soc/sh/fsi.c

index 27ee1dc..cc1c919 100644 (file)
@@ -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
index cc81a49..77747b0 100644 (file)
@@ -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,