[Sound-open-firmware] [PATCH 3/5] byt-ssp: fixes for DSP modes

Pierre-Louis Bossart pierre-louis.bossart at linux.intel.com
Mon Jun 18 21:27:32 CEST 2018


For some reason SSCR3 fixes prevent DSP_A and DSP_B from working:
DMAs don't start and an IPC error is eventually thrown.

Fall back to reset value (recommended in data sheet), this fix
lets DMA go on in DSP_a and DSP_B modes.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart at linux.intel.com>
---
 src/drivers/byt-ssp.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/drivers/byt-ssp.c b/src/drivers/byt-ssp.c
index 0119f8d..caaf161 100644
--- a/src/drivers/byt-ssp.c
+++ b/src/drivers/byt-ssp.c
@@ -150,9 +150,16 @@ static inline int ssp_set_config(struct dai *dai,
 	 * sscr3 dynamic settings are FRM_MS_EN, I2S_MODE_EN, I2S_FRM_POL,
 	 * I2S_TX_EN, I2S_RX_EN, I2S_CLK_MST
 	 */
-	sscr3 = SSCR3_I2S_TX_SS_FIX_EN | SSCR3_I2S_RX_SS_FIX_EN |
-		SSCR3_STRETCH_TX | SSCR3_STRETCH_RX |
-		SSCR3_SYN_FIX_EN;
+	sscr3 = SSCR3_SYN_FIX_EN;
+#ifdef ENABLE_SSRC3_FIXES
+	/*
+	 * this seems to prevent DSP modes from working but is harmless for
+	 * I2S and LEFT_J. Keep with ifdef in case it's ever needed.
+	 */
+	sscr3 |= SSCR3_I2S_TX_SS_FIX_EN | SSCR3_I2S_RX_SS_FIX_EN |
+		SSCR3_STRETCH_TX | SSCR3_STRETCH_RX;
+#endif
+
 #ifdef ENABLE_CLK_EDGE_SEL /* FIXME: is this needed ? */
 	sscr3 |= SSCR3_CLK_EDGE_SEL;
 #endif
-- 
2.14.1



More information about the Sound-open-firmware mailing list