aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorMark Brown <broonie@opensource.wolfsonmicro.com>2008-11-14 09:40:46 -0500
committerMark Brown <broonie@opensource.wolfsonmicro.com>2008-11-14 09:40:46 -0500
commit2bef901071448e0c86af8edb4797cd5f81b6240d (patch)
treeeee4e15911994525efc5d837e3936f5140b49d11 /sound
parent0b6048561d5f505e3a027a519a6d0f488ba9a2bb (diff)
ASoC: Revert "ASoC: Add new parameter to s3c24xx_pcm_enqueue"
This reverts commit 8dc840f88d9c9f75f46d5dbe489242f8a114fab6. Christian Pellegrin <chripell@gmail.com> reported that on some systems the patch caused DMA to fail which is much more serious than the original skipped audio issue. Further investigation by Dave shows that the behaviour depends on the clock speed of the SoC - a better fix is neeeded. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound')
-rw-r--r--sound/soc/s3c24xx/s3c24xx-pcm.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/sound/soc/s3c24xx/s3c24xx-pcm.c b/sound/soc/s3c24xx/s3c24xx-pcm.c
index 341198bb0c17..e13e614bada9 100644
--- a/sound/soc/s3c24xx/s3c24xx-pcm.c
+++ b/sound/soc/s3c24xx/s3c24xx-pcm.c
@@ -78,8 +78,7 @@ struct s3c24xx_runtime_data {
78 * place a dma buffer onto the queue for the dma system 78 * place a dma buffer onto the queue for the dma system
79 * to handle. 79 * to handle.
80*/ 80*/
81static void s3c24xx_pcm_enqueue(struct snd_pcm_substream *substream, 81static void s3c24xx_pcm_enqueue(struct snd_pcm_substream *substream)
82 int dma_max)
83{ 82{
84 struct s3c24xx_runtime_data *prtd = substream->runtime->private_data; 83 struct s3c24xx_runtime_data *prtd = substream->runtime->private_data;
85 dma_addr_t pos = prtd->dma_pos; 84 dma_addr_t pos = prtd->dma_pos;
@@ -87,10 +86,7 @@ static void s3c24xx_pcm_enqueue(struct snd_pcm_substream *substream,
87 86
88 DBG("Entered %s\n", __func__); 87 DBG("Entered %s\n", __func__);
89 88
90 if (!dma_max) 89 while (prtd->dma_loaded < prtd->dma_limit) {
91 dma_max = prtd->dma_limit;
92
93 while (prtd->dma_loaded < dma_max) {
94 unsigned long len = prtd->dma_period; 90 unsigned long len = prtd->dma_period;
95 91
96 DBG("dma_loaded: %d\n", prtd->dma_loaded); 92 DBG("dma_loaded: %d\n", prtd->dma_loaded);
@@ -136,7 +132,7 @@ static void s3c24xx_audio_buffdone(struct s3c2410_dma_chan *channel,
136 spin_lock(&prtd->lock); 132 spin_lock(&prtd->lock);
137 if (prtd->state & ST_RUNNING) { 133 if (prtd->state & ST_RUNNING) {
138 prtd->dma_loaded--; 134 prtd->dma_loaded--;
139 s3c24xx_pcm_enqueue(substream, 0); 135 s3c24xx_pcm_enqueue(substream);
140 } 136 }
141 137
142 spin_unlock(&prtd->lock); 138 spin_unlock(&prtd->lock);
@@ -253,7 +249,7 @@ static int s3c24xx_pcm_prepare(struct snd_pcm_substream *substream)
253 prtd->dma_pos = prtd->dma_start; 249 prtd->dma_pos = prtd->dma_start;
254 250
255 /* enqueue dma buffers */ 251 /* enqueue dma buffers */
256 s3c24xx_pcm_enqueue(substream, 1); 252 s3c24xx_pcm_enqueue(substream);
257 253
258 return ret; 254 return ret;
259} 255}