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