|
@@ -153,7 +153,6 @@ static int snd_bcm2835_playback_open_generic(
|
|
|
chip->alsa_stream[idx] = alsa_stream;
|
|
|
|
|
|
chip->opened |= (1 << idx);
|
|
|
- alsa_stream->draining = 1;
|
|
|
|
|
|
out:
|
|
|
mutex_unlock(&chip->audio_mutex);
|
|
@@ -268,6 +267,7 @@ static int snd_bcm2835_pcm_prepare(struct snd_pcm_substream *substream)
|
|
|
alsa_stream->buffer_size = snd_pcm_lib_buffer_bytes(substream);
|
|
|
alsa_stream->period_size = snd_pcm_lib_period_bytes(substream);
|
|
|
alsa_stream->pos = 0;
|
|
|
+ alsa_stream->draining = false;
|
|
|
|
|
|
audio_debug("buffer_size=%d, period_size=%d pos=%d frame_bits=%d\n",
|
|
|
alsa_stream->buffer_size, alsa_stream->period_size,
|
|
@@ -312,21 +312,15 @@ static int snd_bcm2835_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
|
|
|
switch (cmd) {
|
|
|
case SNDRV_PCM_TRIGGER_START:
|
|
|
err = bcm2835_audio_start(alsa_stream);
|
|
|
- if (!err)
|
|
|
- alsa_stream->draining = 1;
|
|
|
- else
|
|
|
+ if (err)
|
|
|
audio_error(" Failed to START alsa device (%d)\n", err);
|
|
|
break;
|
|
|
+ case SNDRV_PCM_TRIGGER_DRAIN:
|
|
|
+ alsa_stream->draining = true;
|
|
|
+ break;
|
|
|
case SNDRV_PCM_TRIGGER_STOP:
|
|
|
- if (runtime->status->state == SNDRV_PCM_STATE_DRAINING) {
|
|
|
- audio_info("DRAINING\n");
|
|
|
- alsa_stream->draining = 1;
|
|
|
- } else {
|
|
|
- audio_info("DROPPING\n");
|
|
|
- alsa_stream->draining = 0;
|
|
|
- }
|
|
|
err = bcm2835_audio_stop(alsa_stream);
|
|
|
- if (err != 0)
|
|
|
+ if (err)
|
|
|
audio_error(" Failed to STOP alsa device (%d)\n", err);
|
|
|
break;
|
|
|
default:
|