Merge branch 'for-5.0' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie...
[linux-2.6-block.git] / sound / soc / codecs / wm_adsp.c
index 8077c18cbcdf244e72f4e11383457a4fcfafae7e..b93fdc8d2d6fb76112eabc4fe2a6a302fa86b710 100644 (file)
@@ -3529,6 +3529,23 @@ static int wm_adsp_buffer_free(struct wm_adsp *dsp)
        return 0;
 }
 
+static int wm_adsp_buffer_get_error(struct wm_adsp_compr_buf *buf)
+{
+       int ret;
+
+       ret = wm_adsp_buffer_read(buf, HOST_BUFFER_FIELD(error), &buf->error);
+       if (ret < 0) {
+               adsp_err(buf->dsp, "Failed to check buffer error: %d\n", ret);
+               return ret;
+       }
+       if (buf->error != 0) {
+               adsp_err(buf->dsp, "Buffer error occurred: %d\n", buf->error);
+               return -EIO;
+       }
+
+       return 0;
+}
+
 int wm_adsp_compr_trigger(struct snd_compr_stream *stream, int cmd)
 {
        struct wm_adsp_compr *compr = stream->runtime->private_data;
@@ -3550,6 +3567,10 @@ int wm_adsp_compr_trigger(struct snd_compr_stream *stream, int cmd)
                        }
                }
 
+               ret = wm_adsp_buffer_get_error(compr->buf);
+               if (ret < 0)
+                       break;
+
                wm_adsp_buffer_clear(compr->buf);
 
                /* Trigger the IRQ at one fragment of data */
@@ -3625,23 +3646,6 @@ static int wm_adsp_buffer_update_avail(struct wm_adsp_compr_buf *buf)
        return 0;
 }
 
-static int wm_adsp_buffer_get_error(struct wm_adsp_compr_buf *buf)
-{
-       int ret;
-
-       ret = wm_adsp_buffer_read(buf, HOST_BUFFER_FIELD(error), &buf->error);
-       if (ret < 0) {
-               compr_err(buf, "Failed to check buffer error: %d\n", ret);
-               return ret;
-       }
-       if (buf->error != 0) {
-               compr_err(buf, "Buffer error occurred: %d\n", buf->error);
-               return -EIO;
-       }
-
-       return 0;
-}
-
 int wm_adsp_compr_handle_irq(struct wm_adsp *dsp)
 {
        struct wm_adsp_compr_buf *buf;