From 4cc0556ce360b6b033d645d9db698c19bd100995 Mon Sep 17 00:00:00 2001 From: Keyon Jie Date: Wed, 2 Jan 2019 16:59:28 +0800 Subject: [PATCH] dai: only get dma channel at first config For dais, we don't support change dma channel dynamically, so only get dma channel at first config, ignore that for latter dai_config invokings to avoid dma channel leaking. Signed-off-by: Keyon Jie --- src/audio/dai.c | 7 +++++-- src/include/sof/dma.h | 2 ++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/audio/dai.c b/src/audio/dai.c index ff17c55a5..28ba0c853 100644 --- a/src/audio/dai.c +++ b/src/audio/dai.c @@ -256,6 +256,7 @@ static struct comp_dev *dai_new(struct sof_ipc_comp *comp) dd->dai_pos_blks = 0; dd->xrun = 0; dd->pointer_init = 0; + dd->chan = DMA_CHAN_INVALID; dev->state = COMP_STATE_READY; return dev; @@ -774,8 +775,10 @@ static int dai_config(struct comp_dev *dev, struct sof_ipc_dai_config *config) return -EINVAL; } - /* channel is ignored by GP dma get function */ - dd->chan = dma_channel_get(dd->dma, channel); + if (dd->chan == DMA_CHAN_INVALID) + /* get dma channel at first config only */ + dd->chan = dma_channel_get(dd->dma, channel); + if (dd->chan < 0) { trace_dai_error_with_ids(dev, "dai_config() error: " "dma_channel_get() failed"); diff --git a/src/include/sof/dma.h b/src/include/sof/dma.h index bf03fb8c4..68cfa8d49 100644 --- a/src/include/sof/dma.h +++ b/src/include/sof/dma.h @@ -89,6 +89,8 @@ #define DMA_RELOAD_END 0 #define DMA_RELOAD_LLI 0xFFFFFFFF +#define DMA_CHAN_INVALID 0xFFFFFFFF + struct dma; /**