ASoC: Fix DMA channel leak in imx-pcm-dma-mx2 driver.
"snd_imx_pcm_hw_params" callback can be called several times by the user (i.e. OSS emulation) leading to a DMA channel leak. Signed-off-by: Javier Martin <javier.martin@vista-silicon.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
36ae1a96c4
commit
220d9f2595
|
@ -88,11 +88,13 @@ static int imx_ssi_dma_alloc(struct snd_pcm_substream *substream,
|
||||||
iprtd->dma_data.dma_request = dma_params->dma;
|
iprtd->dma_data.dma_request = dma_params->dma;
|
||||||
|
|
||||||
/* Try to grab a DMA channel */
|
/* Try to grab a DMA channel */
|
||||||
|
if (!iprtd->dma_chan) {
|
||||||
dma_cap_zero(mask);
|
dma_cap_zero(mask);
|
||||||
dma_cap_set(DMA_SLAVE, mask);
|
dma_cap_set(DMA_SLAVE, mask);
|
||||||
iprtd->dma_chan = dma_request_channel(mask, filter, iprtd);
|
iprtd->dma_chan = dma_request_channel(mask, filter, iprtd);
|
||||||
if (!iprtd->dma_chan)
|
if (!iprtd->dma_chan)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
switch (params_format(params)) {
|
switch (params_format(params)) {
|
||||||
case SNDRV_PCM_FORMAT_S16_LE:
|
case SNDRV_PCM_FORMAT_S16_LE:
|
||||||
|
|
Loading…
Reference in New Issue