ASoC: rcar: remove original filter from rsnd_dma_init()

Remove original filter from rsnd_dma_init(),
and use SH-DMA suitable filter.
This new style can be used from Device Tree.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
This commit is contained in:
Kuninori Morimoto 2013-10-29 00:52:19 -07:00 committed by Mark Brown
parent 92eba04e4b
commit 9ade09d6c6

View file

@ -94,6 +94,7 @@
* *
*/ */
#include <linux/pm_runtime.h> #include <linux/pm_runtime.h>
#include <linux/shdma-base.h>
#include "rsnd.h" #include "rsnd.h"
#define RSND_RATES SNDRV_PCM_RATE_8000_96000 #define RSND_RATES SNDRV_PCM_RATE_8000_96000
@ -209,13 +210,6 @@ int rsnd_dma_available(struct rsnd_dma *dma)
return !!dma->chan; return !!dma->chan;
} }
static bool rsnd_dma_filter(struct dma_chan *chan, void *param)
{
chan->private = param;
return true;
}
int rsnd_dma_init(struct rsnd_priv *priv, struct rsnd_dma *dma, int rsnd_dma_init(struct rsnd_priv *priv, struct rsnd_dma *dma,
int is_play, int id, int is_play, int id,
int (*inquiry)(struct rsnd_dma *dma, int (*inquiry)(struct rsnd_dma *dma,
@ -223,7 +217,9 @@ int rsnd_dma_init(struct rsnd_priv *priv, struct rsnd_dma *dma,
int (*complete)(struct rsnd_dma *dma)) int (*complete)(struct rsnd_dma *dma))
{ {
struct device *dev = rsnd_priv_to_dev(priv); struct device *dev = rsnd_priv_to_dev(priv);
struct dma_slave_config cfg;
dma_cap_mask_t mask; dma_cap_mask_t mask;
int ret;
if (dma->chan) { if (dma->chan) {
dev_err(dev, "it already has dma channel\n"); dev_err(dev, "it already has dma channel\n");
@ -233,15 +229,23 @@ int rsnd_dma_init(struct rsnd_priv *priv, struct rsnd_dma *dma,
dma_cap_zero(mask); dma_cap_zero(mask);
dma_cap_set(DMA_SLAVE, mask); dma_cap_set(DMA_SLAVE, mask);
dma->slave.shdma_slave.slave_id = id; dma->chan = dma_request_slave_channel_compat(mask, shdma_chan_filter,
(void *)id, dev,
dma->chan = dma_request_channel(mask, rsnd_dma_filter, is_play ? "tx" : "rx");
&dma->slave.shdma_slave);
if (!dma->chan) { if (!dma->chan) {
dev_err(dev, "can't get dma channel\n"); dev_err(dev, "can't get dma channel\n");
return -EIO; return -EIO;
} }
cfg.slave_id = id;
cfg.dst_addr = 0; /* use default addr when playback */
cfg.src_addr = 0; /* use default addr when capture */
cfg.direction = is_play ? DMA_MEM_TO_DEV : DMA_DEV_TO_MEM;
ret = dmaengine_slave_config(dma->chan, &cfg);
if (ret < 0)
goto rsnd_dma_init_err;
dma->dir = is_play ? DMA_TO_DEVICE : DMA_FROM_DEVICE; dma->dir = is_play ? DMA_TO_DEVICE : DMA_FROM_DEVICE;
dma->priv = priv; dma->priv = priv;
dma->inquiry = inquiry; dma->inquiry = inquiry;
@ -249,6 +253,11 @@ int rsnd_dma_init(struct rsnd_priv *priv, struct rsnd_dma *dma,
INIT_WORK(&dma->work, rsnd_dma_do_work); INIT_WORK(&dma->work, rsnd_dma_do_work);
return 0; return 0;
rsnd_dma_init_err:
rsnd_dma_quit(priv, dma);
return ret;
} }
void rsnd_dma_quit(struct rsnd_priv *priv, void rsnd_dma_quit(struct rsnd_priv *priv,