]> Pileus Git - ~andy/linux/blobdiff - sound/core/pcm_lib.c
Merge master.kernel.org:/home/rmk/linux-2.6-arm
[~andy/linux] / sound / core / pcm_lib.c
index c58ec67d1cbfbebdde187bb5c5cfe1d4d1b4b038..eedc6cb038bb172e36c3643dbf7d77031fafc0b0 100644 (file)
@@ -56,9 +56,8 @@ void snd_pcm_playback_silence(struct snd_pcm_substream *substream, snd_pcm_ufram
                                runtime->silence_filled = 0;
                        runtime->silence_start = runtime->control->appl_ptr;
                }
-               if (runtime->silence_filled == runtime->buffer_size)
+               if (runtime->silence_filled >= runtime->buffer_size)
                        return;
-               snd_assert(runtime->silence_filled <= runtime->buffer_size, return);
                noise_dist = snd_pcm_playback_hw_avail(runtime) + runtime->silence_filled;
                if (noise_dist >= (snd_pcm_sframes_t) runtime->silence_threshold)
                        return;
@@ -131,7 +130,7 @@ void snd_pcm_playback_silence(struct snd_pcm_substream *substream, snd_pcm_ufram
 static void xrun(struct snd_pcm_substream *substream)
 {
        snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
-#ifdef CONFIG_SND_DEBUG
+#ifdef CONFIG_SND_PCM_XRUN_DEBUG
        if (substream->pstr->xrun_debug) {
                snd_printd(KERN_DEBUG "XRUN: pcmC%dD%d%c\n",
                           substream->pcm->card->number,
@@ -205,7 +204,7 @@ static inline int snd_pcm_update_hw_ptr_interrupt(struct snd_pcm_substream *subs
        delta = hw_ptr_interrupt - new_hw_ptr;
        if (delta > 0) {
                if ((snd_pcm_uframes_t)delta < runtime->buffer_size / 2) {
-#ifdef CONFIG_SND_DEBUG
+#ifdef CONFIG_SND_PCM_XRUN_DEBUG
                        if (runtime->periods > 1 && substream->pstr->xrun_debug) {
                                snd_printd(KERN_ERR "Unexpected hw_pointer value [1] (stream = %i, delta: -%ld, max jitter = %ld): wrong interrupt acknowledge?\n", substream->stream, (long) delta, runtime->buffer_size / 2);
                                if (substream->pstr->xrun_debug > 1)
@@ -250,7 +249,7 @@ int snd_pcm_update_hw_ptr(struct snd_pcm_substream *substream)
        delta = old_hw_ptr - new_hw_ptr;
        if (delta > 0) {
                if ((snd_pcm_uframes_t)delta < runtime->buffer_size / 2) {
-#ifdef CONFIG_SND_DEBUG
+#ifdef CONFIG_SND_PCM_XRUN_DEBUG
                        if (runtime->periods > 2 && substream->pstr->xrun_debug) {
                                snd_printd(KERN_ERR "Unexpected hw_pointer value [2] (stream = %i, delta: -%ld, max jitter = %ld): wrong interrupt acknowledge?\n", substream->stream, (long) delta, runtime->buffer_size / 2);
                                if (substream->pstr->xrun_debug > 1)
@@ -2006,8 +2005,8 @@ void snd_pcm_tick_prepare(struct snd_pcm_substream *substream)
                           runtime->silence_filled < runtime->buffer_size) {
                        snd_pcm_sframes_t noise_dist;
                        noise_dist = snd_pcm_playback_hw_avail(runtime) + runtime->silence_filled;
-                       snd_assert(noise_dist <= (snd_pcm_sframes_t)runtime->silence_threshold, );
-                       frames = noise_dist - runtime->silence_threshold;
+                       if (noise_dist > (snd_pcm_sframes_t)runtime->silence_threshold)
+                               frames = noise_dist - runtime->silence_threshold;
                }
                avail = snd_pcm_playback_avail(runtime);
        } else {
@@ -2300,19 +2299,7 @@ snd_pcm_sframes_t snd_pcm_lib_write(struct snd_pcm_substream *substream, const v
        if (runtime->status->state == SNDRV_PCM_STATE_OPEN)
                return -EBADFD;
 
-       snd_assert(substream->ffile != NULL, return -ENXIO);
        nonblock = !!(substream->ffile->f_flags & O_NONBLOCK);
-#if defined(CONFIG_SND_PCM_OSS) || defined(CONFIG_SND_PCM_OSS_MODULE)
-       if (substream->oss.oss) {
-               struct snd_pcm_oss_setup *setup = substream->oss.setup;
-               if (setup != NULL) {
-                       if (setup->nonblock)
-                               nonblock = 1;
-                       else if (setup->block)
-                               nonblock = 0;
-               }
-       }
-#endif
 
        if (runtime->access != SNDRV_PCM_ACCESS_RW_INTERLEAVED &&
            runtime->channels > 1)
@@ -2375,19 +2362,7 @@ snd_pcm_sframes_t snd_pcm_lib_writev(struct snd_pcm_substream *substream,
        if (runtime->status->state == SNDRV_PCM_STATE_OPEN)
                return -EBADFD;
 
-       snd_assert(substream->ffile != NULL, return -ENXIO);
        nonblock = !!(substream->ffile->f_flags & O_NONBLOCK);
-#if defined(CONFIG_SND_PCM_OSS) || defined(CONFIG_SND_PCM_OSS_MODULE)
-       if (substream->oss.oss) {
-               struct snd_pcm_oss_setup *setup = substream->oss.setup;
-               if (setup != NULL) {
-                       if (setup->nonblock)
-                               nonblock = 1;
-                       else if (setup->block)
-                               nonblock = 0;
-               }
-       }
-#endif
 
        if (runtime->access != SNDRV_PCM_ACCESS_RW_NONINTERLEAVED)
                return -EINVAL;
@@ -2597,19 +2572,7 @@ snd_pcm_sframes_t snd_pcm_lib_read(struct snd_pcm_substream *substream, void __u
        if (runtime->status->state == SNDRV_PCM_STATE_OPEN)
                return -EBADFD;
 
-       snd_assert(substream->ffile != NULL, return -ENXIO);
        nonblock = !!(substream->ffile->f_flags & O_NONBLOCK);
-#if defined(CONFIG_SND_PCM_OSS) || defined(CONFIG_SND_PCM_OSS_MODULE)
-       if (substream->oss.oss) {
-               struct snd_pcm_oss_setup *setup = substream->oss.setup;
-               if (setup != NULL) {
-                       if (setup->nonblock)
-                               nonblock = 1;
-                       else if (setup->block)
-                               nonblock = 0;
-               }
-       }
-#endif
        if (runtime->access != SNDRV_PCM_ACCESS_RW_INTERLEAVED)
                return -EINVAL;
        return snd_pcm_lib_read1(substream, (unsigned long)buf, size, nonblock, snd_pcm_lib_read_transfer);
@@ -2666,20 +2629,7 @@ snd_pcm_sframes_t snd_pcm_lib_readv(struct snd_pcm_substream *substream,
        if (runtime->status->state == SNDRV_PCM_STATE_OPEN)
                return -EBADFD;
 
-       snd_assert(substream->ffile != NULL, return -ENXIO);
        nonblock = !!(substream->ffile->f_flags & O_NONBLOCK);
-#if defined(CONFIG_SND_PCM_OSS) || defined(CONFIG_SND_PCM_OSS_MODULE)
-       if (substream->oss.oss) {
-               struct snd_pcm_oss_setup *setup = substream->oss.setup;
-               if (setup != NULL) {
-                       if (setup->nonblock)
-                               nonblock = 1;
-                       else if (setup->block)
-                               nonblock = 0;
-               }
-       }
-#endif
-
        if (runtime->access != SNDRV_PCM_ACCESS_RW_NONINTERLEAVED)
                return -EINVAL;
        return snd_pcm_lib_read1(substream, (unsigned long)bufs, frames, nonblock, snd_pcm_lib_readv_transfer);