blob: c1da63cccf96938669974ccbe0fe5d8bc6092816 [file] [log] [blame]
From e763c47fab9fe188a39d5428a76ec75223742b2e Mon Sep 17 00:00:00 2001
From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Date: Sun, 6 Nov 2011 22:05:25 -0800
Subject: ASoC: fsi: add valid data position control support
FSI2 can control valid data position, like
package in front/back or stream mode (16bit x 2).
But current fsi driver is assuming it was in-back.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
(cherry picked from commit 65ff03f4624d12ad6c19a01a0af7385eda09e4a6)
Signed-off-by: Simon Horman <horms@verge.net.au>
---
sound/soc/sh/fsi.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/sound/soc/sh/fsi.c b/sound/soc/sh/fsi.c
index e620cb1..99ed610 100644
--- a/sound/soc/sh/fsi.c
+++ b/sound/soc/sh/fsi.c
@@ -32,7 +32,9 @@
#define REG_DIDT 0x0020
#define REG_DODT 0x0024
#define REG_MUTE_ST 0x0028
+#define REG_OUT_DMAC 0x002C
#define REG_OUT_SEL 0x0030
+#define REG_IN_DMAC 0x0038
/* master register */
#define MST_CLK_RST 0x0210
@@ -886,6 +888,8 @@ static int fsi_hw_startup(struct fsi_priv *fsi,
int is_play,
struct device *dev)
{
+ struct fsi_master *master = fsi_get_master(fsi);
+ int fsi_ver = master->core->ver;
u32 flags = fsi_get_info_flags(fsi);
u32 data = 0;
@@ -920,6 +924,17 @@ static int fsi_hw_startup(struct fsi_priv *fsi,
fsi_reg_mask_set(fsi, OUT_SEL, DMMD, DMMD);
}
+ /*
+ * FIXME
+ *
+ * FSI driver assumed that data package is in-back.
+ * FSI2 chip can select it.
+ */
+ if (fsi_ver >= 2) {
+ fsi_reg_write(fsi, OUT_DMAC, (1 << 4));
+ fsi_reg_write(fsi, IN_DMAC, (1 << 4));
+ }
+
/* irq clear */
fsi_irq_disable(fsi, is_play);
fsi_irq_clear_status(fsi);
--
1.7.10.2.565.gbd578b5