ASoC: fsi: master clock selection become independent from platform flags
[firefly-linux-kernel-4.4.55.git] / sound / soc / sh / fsi.c
index cc81a4966df562c235658f5584b7acb2b600a9a7..77747b0753698b589a99080121154fb95f5296cf 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,