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