]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ASoC: wm_adsp: Use new snd_compr_stop_error to signal stream failure
authorCharles Keepax <ckeepax@opensource.wolfsonmicro.com>
Mon, 13 Jun 2016 13:17:11 +0000 (14:17 +0100)
committerMark Brown <broonie@kernel.org>
Mon, 13 Jun 2016 15:49:51 +0000 (16:49 +0100)
If we encounter a fatal error on the compressed stream call the new
snd_compr_stop_error to shutdown the stream and allow the core to
inform user-space that the stream is no longer valid.

Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
Reviewed-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/wm_adsp.c

index a07bd7c2c587dd9d9d0135015b1aa4b578307e93..8ed1cdececf29545734938f115d8e01d52a16a1d 100644 (file)
@@ -3043,6 +3043,7 @@ int wm_adsp_compr_pointer(struct snd_compr_stream *stream,
        }
 
        if (compr->buf->error) {
+               snd_compr_stop_error(stream, SNDRV_PCM_STATE_XRUN);
                ret = -EIO;
                goto out;
        }
@@ -3060,8 +3061,12 @@ int wm_adsp_compr_pointer(struct snd_compr_stream *stream,
                 */
                if (buf->avail < wm_adsp_compr_frag_words(compr)) {
                        ret = wm_adsp_buffer_get_error(buf);
-                       if (ret < 0)
+                       if (ret < 0) {
+                               if (compr->buf->error)
+                                       snd_compr_stop_error(stream,
+                                                       SNDRV_PCM_STATE_XRUN);
                                goto out;
+                       }
 
                        ret = wm_adsp_buffer_reenable_irq(buf);
                        if (ret < 0) {
@@ -3159,8 +3164,10 @@ static int wm_adsp_compr_read(struct wm_adsp_compr *compr,
        if (!compr->buf)
                return -ENXIO;
 
-       if (compr->buf->error)
+       if (compr->buf->error) {
+               snd_compr_stop_error(compr->stream, SNDRV_PCM_STATE_XRUN);
                return -EIO;
+       }
 
        count /= WM_ADSP_DATA_WORD_SIZE;