diff options
Diffstat (limited to 'sound/soc/s3c24xx/s3c24xx-pcm.c')
-rw-r--r-- | sound/soc/s3c24xx/s3c24xx-pcm.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/sound/soc/s3c24xx/s3c24xx-pcm.c b/sound/soc/s3c24xx/s3c24xx-pcm.c index bfbdc3cbd43b..4107a87d4de3 100644 --- a/sound/soc/s3c24xx/s3c24xx-pcm.c +++ b/sound/soc/s3c24xx/s3c24xx-pcm.c | |||
@@ -158,18 +158,22 @@ static int s3c24xx_pcm_hw_params(struct snd_pcm_substream *substream, | |||
158 | if (!dma) | 158 | if (!dma) |
159 | return 0; | 159 | return 0; |
160 | 160 | ||
161 | /* prepare DMA */ | 161 | /* this may get called several times by oss emulation |
162 | prtd->params = dma; | 162 | * with different params -HW */ |
163 | if (prtd->params == NULL) { | ||
164 | /* prepare DMA */ | ||
165 | prtd->params = dma; | ||
163 | 166 | ||
164 | DBG("params %p, client %p, channel %d\n", prtd->params, | 167 | DBG("params %p, client %p, channel %d\n", prtd->params, |
165 | prtd->params->client, prtd->params->channel); | 168 | prtd->params->client, prtd->params->channel); |
166 | 169 | ||
167 | ret = s3c2410_dma_request(prtd->params->channel, | 170 | ret = s3c2410_dma_request(prtd->params->channel, |
168 | prtd->params->client, NULL); | 171 | prtd->params->client, NULL); |
169 | 172 | ||
170 | if (ret) { | 173 | if (ret) { |
171 | DBG(KERN_ERR "failed to get dma channel\n"); | 174 | DBG(KERN_ERR "failed to get dma channel\n"); |
172 | return ret; | 175 | return ret; |
176 | } | ||
173 | } | 177 | } |
174 | 178 | ||
175 | /* channel needs configuring for mem=>device, increment memory addr, | 179 | /* channel needs configuring for mem=>device, increment memory addr, |