diff mbox

ASoC: rsnd: care SWSP bit for TDM/non-TDM

Message ID 87r3j5jogm.wl%kuninori.morimoto.gx@renesas.com (mailing list archive)
State Accepted
Commit f98ed119a7c5feacb1fc1c8d7f6c68934cd27384
Headers show

Commit Message

Kuninori Morimoto Dec. 2, 2015, 7:34 a.m. UTC
From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>

SSICR::SWSP bit controls WS signal low/high, but in case of TDM
it is inverted. This patch solves this issue.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
 sound/soc/sh/rcar/ssi.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
diff mbox

Patch

diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c
index 628739f..79c3211 100644
--- a/sound/soc/sh/rcar/ssi.c
+++ b/sound/soc/sh/rcar/ssi.c
@@ -265,6 +265,9 @@  static int rsnd_ssi_config_init(struct rsnd_ssi *ssi,
 	u32 cr_own;
 	u32 cr_mode;
 	u32 wsr;
+	int is_tdm;
+
+	is_tdm = (rsnd_get_slot_runtime(io) >= 6) ? 1 : 0;
 
 	/*
 	 * always use 32bit system word.
@@ -274,7 +277,7 @@  static int rsnd_ssi_config_init(struct rsnd_ssi *ssi,
 
 	if (rdai->bit_clk_inv)
 		cr_own |= SCKP;
-	if (rdai->frm_clk_inv)
+	if (rdai->frm_clk_inv ^ is_tdm)
 		cr_own |= SWSP;
 	if (rdai->data_alignment)
 		cr_own |= SDTA;
@@ -307,7 +310,7 @@  static int rsnd_ssi_config_init(struct rsnd_ssi *ssi,
 	 *	rsnd_ssiu_init_gen2()
 	 */
 	wsr = ssi->wsr;
-	if (rsnd_get_slot_runtime(io) >= 6) {
+	if (is_tdm) {
 		wsr	|= WS_MODE;
 		cr_own	|= CHNL_8;
 	}