[Sound-open-firmware] [PATCH 4/4] ssp: use BCLK and MCLK directly for DAI clocking

Liam Girdwood liam.r.girdwood at linux.intel.com
Wed Dec 28 17:29:14 CET 2016


It's better to express MCLK and BCLK as freqencies rather than as ratios.

Signed-off-by: Liam Girdwood <liam.r.girdwood at linux.intel.com>
---
 src/drivers/ssp.c      | 4 +++-
 src/include/reef/dai.h | 3 +--
 src/ipc/intel-ipc.c    | 6 +++---
 3 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/drivers/ssp.c b/src/drivers/ssp.c
index 9656104..c285af3 100644
--- a/src/drivers/ssp.c
+++ b/src/drivers/ssp.c
@@ -252,7 +252,9 @@ static inline int ssp_set_config(struct dai *dai, struct dai_config *dai_config)
 		return -ENODEV;
 	}
 
-	sscr0 |= SSCR0_SCR(dai->config.mclk_fs / dai->config.bclk_fs - 1);
+	/* BCLK is generated from MCLK */
+	sscr0 |= SSCR0_SCR(dai->config.mclk / dai->config.bclk - 1);
+
 	/* format */
 	switch (dai->config.format & DAI_FMT_FORMAT_MASK) {
 	case DAI_FMT_I2S:
diff --git a/src/include/reef/dai.h b/src/include/reef/dai.h
index 5a29e85..cfcc428 100644
--- a/src/include/reef/dai.h
+++ b/src/include/reef/dai.h
@@ -103,8 +103,7 @@ struct dai_config {
 	uint32_t frame_size;	/* in BCLKs */
 	struct dai_slot_map tx_slot_map[DAI_NUM_SLOT_MAPS];
 	struct dai_slot_map rx_slot_map[DAI_NUM_SLOT_MAPS];
-	uint32_t bclk_fs;	/* ratio between frame size and BCLK */
-	uint32_t mclk_fs;	/* ratio between frame size and MCLK */
+	uint32_t bclk;	/* BCLK frequency in Hz */
 	uint32_t mclk;		/* mclk frequency in Hz */
 	uint32_t clk_src;	/* DAI specific clk source */
 	uint32_t lbm;	/* loopback mode */
diff --git a/src/ipc/intel-ipc.c b/src/ipc/intel-ipc.c
index cfe53c1..bfffaf6 100644
--- a/src/ipc/intel-ipc.c
+++ b/src/ipc/intel-ipc.c
@@ -565,9 +565,9 @@ static uint32_t ipc_device_set_formats(uint32_t header)
 	dai_dev->dai_config.mclk = config_req.clock_frequency;
 	dai_dev->dai_config.format = DAI_FMT_I2S | DAI_FMT_CONT |
 		DAI_FMT_NB_NF | DAI_FMT_CBS_CFS;
-	dai_dev->dai_config.frame_size = 32;	/* TODO 16bit stereo hard coded */
-	dai_dev->dai_config.bclk_fs = 32;	/* 32 BCLKs per frame - */
-	dai_dev->dai_config.mclk_fs = 256;	
+	dai_dev->dai_config.frame_size = 24; /* really sample size */
+	dai_dev->dai_config.bclk = 2400000;
+	dai_dev->dai_config.mclk = 19200000;
 	dai_dev->dai_config.clk_src = SSP_CLK_EXT;
 
 	comp_dai_config(dai_dev->dev.cd, &dai_dev->dai_config);
-- 
2.9.3



More information about the Sound-open-firmware mailing list