diff options
author | Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> | 2015-12-02 10:34:28 +0300 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2015-12-02 14:15:27 +0300 |
commit | f98ed119a7c5feacb1fc1c8d7f6c68934cd27384 (patch) | |
tree | 243b0d52a7d3c80c0836ce9db5c95e104f2f8d2a | |
parent | 575f1f929f5a2ed80130c294aa7b2dc40dba74f2 (diff) | |
download | linux-f98ed119a7c5feacb1fc1c8d7f6c68934cd27384.tar.xz |
ASoC: rsnd: care SWSP bit for TDM/non-TDM
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>
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | sound/soc/sh/rcar/ssi.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c index 628739f13f99..79c3211a1e7f 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; } |