소스 검색

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>
Kuninori Morimoto 12 년 전
부모
커밋
ab6340c4ec
2개의 변경된 파일10개의 추가작업 그리고 11개의 파일을 삭제
  1. 2 2
      include/sound/sh_fsi.h
  2. 8 9
      sound/soc/sh/fsi.c

+ 2 - 2
include/sound/sh_fsi.h

@@ -47,8 +47,8 @@
 
 
 /* D:  clock selecter if master mode */
 /* D:  clock selecter if master mode */
 #define SH_FSI_CLK_MASK		0x0000F000
 #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
  * set_rate return value

+ 8 - 9
sound/soc/sh/fsi.c

@@ -264,6 +264,7 @@ struct fsi_priv {
 
 
 	int chan_num:16;
 	int chan_num:16;
 	int clk_master:1;
 	int clk_master:1;
+	int clk_cpg:1;
 	int spdif:1;
 	int spdif:1;
 
 
 	long rate;
 	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);
 	struct fsi_priv *fsi = fsi_get_priv_frm_dai(dai);
 	set_rate_func set_rate = fsi_get_info_set_rate(fsi);
 	set_rate_func set_rate = fsi_get_info_set_rate(fsi);
-	u32 flags = fsi_get_info_flags(fsi);
 	int ret;
 	int ret;
 
 
 	/* set master/slave audio interface */
 	/* 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)
 		if (set_rate)
 			dev_warn(dai->dev, "set_rate will be removed soon\n");
 			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_init(dai->dev, fsi, 0, 1, 1,
 				     fsi_clk_set_rate_cpg);
 				     fsi_clk_set_rate_cpg);
-			break;
-		}
+		else
+			fsi_clk_init(dai->dev, fsi, 1, 1, 0,
+				     fsi_clk_set_rate_external);
 	}
 	}
 
 
 	/* set format */
 	/* set format */
@@ -1989,6 +1985,9 @@ static void fsi_port_info_init(struct fsi_priv *fsi,
 {
 {
 	if (info->flags & SH_FSI_FMT_SPDIF)
 	if (info->flags & SH_FSI_FMT_SPDIF)
 		fsi->spdif = 1;
 		fsi->spdif = 1;
+
+	if (info->flags & SH_FSI_CLK_CPG)
+		fsi->clk_cpg = 1;
 }
 }
 
 
 static void fsi_handler_init(struct fsi_priv *fsi,
 static void fsi_handler_init(struct fsi_priv *fsi,