| From c317b82b4eb12a09c9affc19245aa9dee66c958d Mon Sep 17 00:00:00 2001 |
| From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| Date: Sun, 22 Jun 2014 17:59:02 -0700 |
| Subject: ASoC: rsnd: DMA start address is properly used for each DMAC |
| |
| R-Car sound uses Audio DMAC and Audio DMAC peri peri. |
| Audio DMAC peri peri transfers data inside circuit. |
| |
| DMA transfer needs source / destination address, |
| and destination address can be set via dmaengine_slave_config(). |
| The source address can be set when starting DMAEngine. |
| Because Audio DMAC peri peri always ignores its value, |
| current driver always used same source address for |
| Audio DMAC / Audio DMAC peri peri |
| (Audio DMAC peri peri source / destination address |
| is always fixed value) |
| But, This is not good match for DT booting. |
| This patch properly uses DMA start address |
| for Audio DMAC / Audio DMAC peri peri. |
| |
| Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| Signed-off-by: Mark Brown <broonie@linaro.org> |
| (cherry picked from commit 340371005d399b595f4044fc5e336f4a66ead101) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| sound/soc/sh/rcar/core.c | 2 ++ |
| sound/soc/sh/rcar/rsnd.h | 1 + |
| 2 files changed, 3 insertions(+) |
| |
| diff --git a/sound/soc/sh/rcar/core.c b/sound/soc/sh/rcar/core.c |
| index 4435a31ecdad..49d9b31b185c 100644 |
| --- a/sound/soc/sh/rcar/core.c |
| +++ b/sound/soc/sh/rcar/core.c |
| @@ -200,6 +200,7 @@ void rsnd_dma_start(struct rsnd_dma *dma) |
| struct dma_async_tx_descriptor *desc; |
| |
| desc = dmaengine_prep_dma_cyclic(dma->chan, |
| + (dma->addr) ? dma->addr : |
| substream->runtime->dma_addr, |
| snd_pcm_lib_buffer_bytes(substream), |
| snd_pcm_lib_period_bytes(substream), |
| @@ -347,6 +348,7 @@ int rsnd_dma_init(struct rsnd_priv *priv, struct rsnd_dma *dma, |
| if (ret < 0) |
| goto rsnd_dma_init_err; |
| |
| + dma->addr = is_play ? cfg.src_addr : cfg.dst_addr; |
| dma->dir = is_play ? DMA_MEM_TO_DEV : DMA_DEV_TO_MEM; |
| |
| return 0; |
| diff --git a/sound/soc/sh/rcar/rsnd.h b/sound/soc/sh/rcar/rsnd.h |
| index 425b22ee6fb9..631b149df08f 100644 |
| --- a/sound/soc/sh/rcar/rsnd.h |
| +++ b/sound/soc/sh/rcar/rsnd.h |
| @@ -158,6 +158,7 @@ struct rsnd_dma { |
| struct sh_dmae_slave slave; |
| struct dma_chan *chan; |
| enum dma_transfer_direction dir; |
| + dma_addr_t addr; |
| }; |
| |
| void rsnd_dma_start(struct rsnd_dma *dma); |
| -- |
| 2.1.2 |
| |