diff options
author | Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> | 2014-06-18 04:54:43 -0400 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2014-06-18 06:06:37 -0400 |
commit | 64eae986fc1e3a281b00f04b7c9c00b145ec8a57 (patch) | |
tree | e334618a54003036dea7368669955b66984ced06 /sound/soc/sh | |
parent | 4cf612780cec81317a0278b28679a8b69ea8f09c (diff) |
ASoC: rsnd: fixup rsnd_gen_dma_addr() for Gen1
ad32d0c7b0e993433df152ae747652647eb65a27
(ASoC: rsnd: add rsnd_gen_dma_addr() for DMAC addr)
added rsnd_gen_dma_addr() to calculate DMA addr,
but, it is necessary only for Gen2.
This patch ignores Gen1 case.
Kernel will be panic without this patch.
Special thanks to Simon
Reported-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Tested-by: Simon Horman <horms+renesas@verge.net.au>
Signed-off-by: Mark Brown <broonie@linaro.org>
Diffstat (limited to 'sound/soc/sh')
-rw-r--r-- | sound/soc/sh/rcar/gen.c | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/sound/soc/sh/rcar/gen.c b/sound/soc/sh/rcar/gen.c index 1dd2b7d38c2c..0280a11c0899 100644 --- a/sound/soc/sh/rcar/gen.c +++ b/sound/soc/sh/rcar/gen.c | |||
@@ -184,7 +184,7 @@ static int rsnd_gen_regmap_init(struct rsnd_priv *priv, | |||
184 | #define RDMA_CMD_O_N(addr, i) (addr ##_reg - 0x004f8000 + (0x400 * i)) | 184 | #define RDMA_CMD_O_N(addr, i) (addr ##_reg - 0x004f8000 + (0x400 * i)) |
185 | #define RDMA_CMD_O_P(addr, i) (addr ##_reg - 0x001f8000 + (0x400 * i)) | 185 | #define RDMA_CMD_O_P(addr, i) (addr ##_reg - 0x001f8000 + (0x400 * i)) |
186 | 186 | ||
187 | void rsnd_gen_dma_addr(struct rsnd_priv *priv, | 187 | static void rsnd_gen2_dma_addr(struct rsnd_priv *priv, |
188 | struct rsnd_dma *dma, | 188 | struct rsnd_dma *dma, |
189 | struct dma_slave_config *cfg, | 189 | struct dma_slave_config *cfg, |
190 | int is_play, int slave_id) | 190 | int is_play, int slave_id) |
@@ -226,17 +226,6 @@ void rsnd_gen_dma_addr(struct rsnd_priv *priv, | |||
226 | } | 226 | } |
227 | }; | 227 | }; |
228 | 228 | ||
229 | cfg->slave_id = slave_id; | ||
230 | cfg->src_addr = 0; | ||
231 | cfg->dst_addr = 0; | ||
232 | cfg->direction = is_play ? DMA_MEM_TO_DEV : DMA_DEV_TO_MEM; | ||
233 | |||
234 | /* | ||
235 | * gen1 uses default DMA addr | ||
236 | */ | ||
237 | if (rsnd_is_gen1(priv)) | ||
238 | return; | ||
239 | |||
240 | /* it shouldn't happen */ | 229 | /* it shouldn't happen */ |
241 | if (use_dvc & !use_src) { | 230 | if (use_dvc & !use_src) { |
242 | dev_err(dev, "DVC is selected without SRC\n"); | 231 | dev_err(dev, "DVC is selected without SRC\n"); |
@@ -250,6 +239,26 @@ void rsnd_gen_dma_addr(struct rsnd_priv *priv, | |||
250 | id, cfg->src_addr, cfg->dst_addr); | 239 | id, cfg->src_addr, cfg->dst_addr); |
251 | } | 240 | } |
252 | 241 | ||
242 | void rsnd_gen_dma_addr(struct rsnd_priv *priv, | ||
243 | struct rsnd_dma *dma, | ||
244 | struct dma_slave_config *cfg, | ||
245 | int is_play, int slave_id) | ||
246 | { | ||
247 | cfg->slave_id = slave_id; | ||
248 | cfg->src_addr = 0; | ||
249 | cfg->dst_addr = 0; | ||
250 | cfg->direction = is_play ? DMA_MEM_TO_DEV : DMA_DEV_TO_MEM; | ||
251 | |||
252 | /* | ||
253 | * gen1 uses default DMA addr | ||
254 | */ | ||
255 | if (rsnd_is_gen1(priv)) | ||
256 | return; | ||
257 | |||
258 | rsnd_gen2_dma_addr(priv, dma, cfg, is_play, slave_id); | ||
259 | } | ||
260 | |||
261 | |||
253 | /* | 262 | /* |
254 | * Gen2 | 263 | * Gen2 |
255 | */ | 264 | */ |