Skip to content

Commit

Permalink
ASoC: rsnd: recover PIO mode for new dma interface
Browse files Browse the repository at this point in the history
Renesas sound driver needs 1st/2nd DMA interface,
and 1st DMA is using DMAEngine, and 2nd is using local method now.
2nd DMA had been DMAEngine, but it was moved to local method by previous
patchset. But then, it lost PIO mode fallback when probe.
this patch recovers it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
  • Loading branch information
Kuninori Morimoto authored and Mark Brown committed Mar 11, 2015
1 parent 6ec6fb6 commit 8537483
Showing 1 changed file with 18 additions and 1 deletion.
19 changes: 18 additions & 1 deletion sound/soc/sh/rcar/dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -539,6 +539,13 @@ void rsnd_dma_start(struct rsnd_dma *dma)

void rsnd_dma_quit(struct rsnd_dma *dma)
{
struct rsnd_mod *mod = rsnd_dma_to_mod(dma);
struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
struct rsnd_dma_ctrl *dmac = rsnd_priv_to_dmac(priv);

if (!dmac)
return;

dma->ops->quit(dma);
}

Expand All @@ -548,8 +555,18 @@ int rsnd_dma_init(struct rsnd_priv *priv, struct rsnd_dma *dma, int id)
struct rsnd_mod *mod_from;
struct rsnd_mod *mod_to;
struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
struct rsnd_dma_ctrl *dmac = rsnd_priv_to_dmac(priv);
int is_play = rsnd_io_is_play(io);

/*
* DMA failed. try to PIO mode
* see
* rsnd_ssi_fallback()
* rsnd_rdai_continuance_probe()
*/
if (!dmac)
return -EAGAIN;

rsnd_dma_of_path(dma, is_play, &mod_from, &mod_to);

dma->src_addr = rsnd_dma_addr(priv, mod_from, is_play, 1);
Expand Down Expand Up @@ -589,7 +606,7 @@ int rsnd_dma_probe(struct platform_device *pdev,
dmac = devm_kzalloc(dev, sizeof(*dmac), GFP_KERNEL);
if (!dmac || !res) {
dev_err(dev, "dma allocate failed\n");
return -ENOMEM;
return 0; /* it will be PIO mode */
}

dmac->dmapp_num = 0;
Expand Down

0 comments on commit 8537483

Please sign in to comment.