summaryrefslogtreecommitdiffstats
path: root/sound/soc/sh/rcar/ssi.c
diff options
context:
space:
mode:
authorKuninori Morimoto2013-07-29 03:59:12 +0200
committerMark Brown2013-08-06 18:56:13 +0200
commit374a528111fa07878090bd9694a3e153814de39c (patch)
treea9af99a7d5a419f7ee7d92b4205e8274a731c566 /sound/soc/sh/rcar/ssi.c
parentASoC: rsnd: SSI supports DMA transfer (diff)
downloadkernel-qcow2-linux-374a528111fa07878090bd9694a3e153814de39c.tar.gz
kernel-qcow2-linux-374a528111fa07878090bd9694a3e153814de39c.tar.xz
kernel-qcow2-linux-374a528111fa07878090bd9694a3e153814de39c.zip
ASoC: rsnd: SSI supports DMA transfer via BUSIF
This patch adds BUSIF support for R-Car sound DMAEngine transfer. The sound data will be transferred via FIFO which can cover blank time which will happen when DMA channel is switching. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@linaro.org>
Diffstat (limited to 'sound/soc/sh/rcar/ssi.c')
-rw-r--r--sound/soc/sh/rcar/ssi.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c
index 2079ccf5f322..fae26d3f79d2 100644
--- a/sound/soc/sh/rcar/ssi.c
+++ b/sound/soc/sh/rcar/ssi.c
@@ -104,6 +104,7 @@ struct rsnd_ssiu {
static void rsnd_ssi_mode_init(struct rsnd_priv *priv,
struct rsnd_ssiu *ssiu)
{
+ struct device *dev = rsnd_priv_to_dev(priv);
struct rsnd_ssi *ssi;
u32 flags;
u32 val;
@@ -113,8 +114,17 @@ static void rsnd_ssi_mode_init(struct rsnd_priv *priv,
* SSI_MODE0
*/
ssiu->ssi_mode0 = 0;
- for_each_rsnd_ssi(ssi, priv, i)
- ssiu->ssi_mode0 |= (1 << i);
+ for_each_rsnd_ssi(ssi, priv, i) {
+ flags = rsnd_ssi_mode_flags(ssi);
+
+ /* see also BUSIF_MODE */
+ if (!(flags & RSND_SSI_DEPENDENT)) {
+ ssiu->ssi_mode0 |= (1 << i);
+ dev_dbg(dev, "SSI%d uses INDEPENDENT mode\n", i);
+ } else {
+ dev_dbg(dev, "SSI%d uses DEPENDENT mode\n", i);
+ }
+ }
/*
* SSI_MODE1
@@ -670,6 +680,8 @@ int rsnd_ssi_probe(struct platform_device *pdev,
dev_info(dev, "SSI DMA failed. try PIO transter\n");
else
ops = &rsnd_ssi_dma_ops;
+
+ dev_dbg(dev, "SSI%d use DMA transfer\n", i);
}
/*
@@ -687,6 +699,8 @@ int rsnd_ssi_probe(struct platform_device *pdev,
}
ops = &rsnd_ssi_pio_ops;
+
+ dev_dbg(dev, "SSI%d use PIO transfer\n", i);
}
rsnd_mod_init(priv, &ssi->mod, ops, i);