diff options
author | Sangbeom Kim <sbkim73@samsung.com> | 2011-07-20 04:07:12 -0400 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2011-07-20 15:58:07 -0400 |
commit | 61100f405de5c16a0866de7843ed442090436e6a (patch) | |
tree | 16ad020c5973ee5a66fb0c58160b4253339c995d /sound/soc | |
parent | 82d1d521036eb3f5aae48b847f939d99a44c18bb (diff) |
ASoC: SAMSUNG: Modify I2S driver to support idma
Previously, I2S driver only can support system dma.
In this patch, i2s driver can support internal dma too.
IDMA h/w configuration is initialized on idma.c
Signed-off-by: Sangbeom Kim <sbkim73@samsung.com>
Acked-by: Liam Girdwood <lrg@ti.com>
Acked-by: Jassi Brar <jassisinghbrar@gmail.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc')
-rw-r--r-- | sound/soc/samsung/i2s.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/sound/soc/samsung/i2s.c b/sound/soc/samsung/i2s.c index 1568eea31f41..c086b78539ee 100644 --- a/sound/soc/samsung/i2s.c +++ b/sound/soc/samsung/i2s.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <plat/audio.h> | 21 | #include <plat/audio.h> |
22 | 22 | ||
23 | #include "dma.h" | 23 | #include "dma.h" |
24 | #include "idma.h" | ||
24 | #include "i2s.h" | 25 | #include "i2s.h" |
25 | #include "i2s-regs.h" | 26 | #include "i2s-regs.h" |
26 | 27 | ||
@@ -60,6 +61,7 @@ struct i2s_dai { | |||
60 | /* DMA parameters */ | 61 | /* DMA parameters */ |
61 | struct s3c_dma_params dma_playback; | 62 | struct s3c_dma_params dma_playback; |
62 | struct s3c_dma_params dma_capture; | 63 | struct s3c_dma_params dma_capture; |
64 | struct s3c_dma_params idma_playback; | ||
63 | u32 quirks; | 65 | u32 quirks; |
64 | u32 suspend_i2smod; | 66 | u32 suspend_i2smod; |
65 | u32 suspend_i2scon; | 67 | u32 suspend_i2scon; |
@@ -877,6 +879,10 @@ static int samsung_i2s_dai_probe(struct snd_soc_dai *dai) | |||
877 | if (i2s->quirks & QUIRK_NEED_RSTCLR) | 879 | if (i2s->quirks & QUIRK_NEED_RSTCLR) |
878 | writel(CON_RSTCLR, i2s->addr + I2SCON); | 880 | writel(CON_RSTCLR, i2s->addr + I2SCON); |
879 | 881 | ||
882 | if (i2s->quirks & QUIRK_SEC_DAI) | ||
883 | idma_reg_addr_init((void *)i2s->addr, | ||
884 | i2s->sec_dai->idma_playback.dma_addr); | ||
885 | |||
880 | probe_exit: | 886 | probe_exit: |
881 | /* Reset any constraint on RFS and BFS */ | 887 | /* Reset any constraint on RFS and BFS */ |
882 | i2s->rfs = 0; | 888 | i2s->rfs = 0; |
@@ -1077,6 +1083,7 @@ static __devinit int samsung_i2s_probe(struct platform_device *pdev) | |||
1077 | sec_dai->dma_playback.dma_size = 4; | 1083 | sec_dai->dma_playback.dma_size = 4; |
1078 | sec_dai->base = regs_base; | 1084 | sec_dai->base = regs_base; |
1079 | sec_dai->quirks = quirks; | 1085 | sec_dai->quirks = quirks; |
1086 | sec_dai->idma_playback.dma_addr = i2s_cfg->idma_addr; | ||
1080 | sec_dai->pri_dai = pri_dai; | 1087 | sec_dai->pri_dai = pri_dai; |
1081 | pri_dai->sec_dai = sec_dai; | 1088 | pri_dai->sec_dai = sec_dai; |
1082 | } | 1089 | } |