Commit f5cab3b8 authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Mark Brown

ASoC: rsnd: don't use schedule_work() when rsnd_dma_start()

rsnd_dma_start() is the function to start DMAEngine.
Current code is using schedule_work() for it,
but it breaks DMAC/SSI register setting timing.
Don't use schedule_work() on it.
Signed-off-by: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: default avatarMark Brown <broonie@linaro.org>
parent 64de62b3
...@@ -132,6 +132,7 @@ void rsnd_mod_init(struct rsnd_priv *priv, ...@@ -132,6 +132,7 @@ void rsnd_mod_init(struct rsnd_priv *priv,
/* /*
* rsnd_dma functions * rsnd_dma functions
*/ */
static void __rsnd_dma_start(struct rsnd_dma *dma);
static void rsnd_dma_continue(struct rsnd_dma *dma) static void rsnd_dma_continue(struct rsnd_dma *dma)
{ {
/* push next A or B plane */ /* push next A or B plane */
...@@ -143,7 +144,7 @@ void rsnd_dma_start(struct rsnd_dma *dma) ...@@ -143,7 +144,7 @@ void rsnd_dma_start(struct rsnd_dma *dma)
{ {
/* push both A and B plane*/ /* push both A and B plane*/
dma->submit_loop = 2; dma->submit_loop = 2;
schedule_work(&dma->work); __rsnd_dma_start(dma);
} }
void rsnd_dma_stop(struct rsnd_dma *dma) void rsnd_dma_stop(struct rsnd_dma *dma)
...@@ -169,9 +170,8 @@ static void rsnd_dma_complete(void *data) ...@@ -169,9 +170,8 @@ static void rsnd_dma_complete(void *data)
rsnd_unlock(priv, flags); rsnd_unlock(priv, flags);
} }
static void rsnd_dma_do_work(struct work_struct *work) static void __rsnd_dma_start(struct rsnd_dma *dma)
{ {
struct rsnd_dma *dma = container_of(work, struct rsnd_dma, work);
struct rsnd_priv *priv = rsnd_mod_to_priv(rsnd_dma_to_mod(dma)); struct rsnd_priv *priv = rsnd_mod_to_priv(rsnd_dma_to_mod(dma));
struct device *dev = rsnd_priv_to_dev(priv); struct device *dev = rsnd_priv_to_dev(priv);
struct dma_async_tx_descriptor *desc; struct dma_async_tx_descriptor *desc;
...@@ -204,6 +204,13 @@ static void rsnd_dma_do_work(struct work_struct *work) ...@@ -204,6 +204,13 @@ static void rsnd_dma_do_work(struct work_struct *work)
} }
} }
static void rsnd_dma_do_work(struct work_struct *work)
{
struct rsnd_dma *dma = container_of(work, struct rsnd_dma, work);
__rsnd_dma_start(dma);
}
int rsnd_dma_available(struct rsnd_dma *dma) int rsnd_dma_available(struct rsnd_dma *dma)
{ {
return !!dma->chan; return !!dma->chan;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment