summaryrefslogtreecommitdiffstats
path: root/sound/soc/sh/rcar/ssi.c
diff options
context:
space:
mode:
authorKuninori Morimoto2015-11-30 09:54:03 +0100
committerMark Brown2015-11-30 19:11:23 +0100
commit186fadc132f0d634c7b43202a240fbd3654b6623 (patch)
tree7ae0a922d045d4ae7641157b2bd7e3ee047b46e6 /sound/soc/sh/rcar/ssi.c
parentASoC: rsnd: dvc enables non-stereo sound (diff)
downloadkernel-qcow2-linux-186fadc132f0d634c7b43202a240fbd3654b6623.tar.gz
kernel-qcow2-linux-186fadc132f0d634c7b43202a240fbd3654b6623.tar.xz
kernel-qcow2-linux-186fadc132f0d634c7b43202a240fbd3654b6623.zip
ASoC: rsnd: add TDM Extend Mode support
Renesas R-Car can out TDM by 1) 6ch x 1 DAI as TDM Extend Mode 2) 2ch x 4 x 1 DAI as TDM split Mode 3) 2ch x 3 DAI or 2ch x 4 DAI as TDM Multichannel Mode This patch adds 1) TDM Extend Mode. Because of HW design, this 6ch data will be outputed via 8ch data width. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/sh/rcar/ssi.c')
-rw-r--r--sound/soc/sh/rcar/ssi.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c
index 44e914132b02..628739f13f99 100644
--- a/sound/soc/sh/rcar/ssi.c
+++ b/sound/soc/sh/rcar/ssi.c
@@ -24,7 +24,9 @@
#define OIEN (1 << 26) /* Overflow Interrupt Enable */
#define IIEN (1 << 25) /* Idle Mode Interrupt Enable */
#define DIEN (1 << 24) /* Data Interrupt Enable */
-
+#define CHNL_4 (1 << 22) /* Channels */
+#define CHNL_6 (2 << 22) /* Channels */
+#define CHNL_8 (3 << 22) /* Channels */
#define DWL_8 (0 << 19) /* Data Word Length */
#define DWL_16 (1 << 19) /* Data Word Length */
#define DWL_18 (2 << 19) /* Data Word Length */
@@ -57,6 +59,7 @@
* SSIWSR
*/
#define CONT (1 << 8) /* WS Continue Function */
+#define WS_MODE (1 << 0) /* WS Mode */
#define SSI_NAME "ssi"
@@ -261,6 +264,7 @@ static int rsnd_ssi_config_init(struct rsnd_ssi *ssi,
struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
u32 cr_own;
u32 cr_mode;
+ u32 wsr;
/*
* always use 32bit system word.
@@ -297,8 +301,20 @@ static int rsnd_ssi_config_init(struct rsnd_ssi *ssi,
cr_mode = DIEN; /* PIO : enable Data interrupt */
}
+ /*
+ * TDM Extend Mode
+ * see
+ * rsnd_ssiu_init_gen2()
+ */
+ wsr = ssi->wsr;
+ if (rsnd_get_slot_runtime(io) >= 6) {
+ wsr |= WS_MODE;
+ cr_own |= CHNL_8;
+ }
+
ssi->cr_own = cr_own;
ssi->cr_mode = cr_mode;
+ ssi->wsr = wsr;
return 0;
}