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@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