aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/soc/codecs/wm_adsp.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c
index f70c60914042..3ac2e1f06ad3 100644
--- a/sound/soc/codecs/wm_adsp.c
+++ b/sound/soc/codecs/wm_adsp.c
@@ -2853,7 +2853,7 @@ int wm_adsp_compr_handle_irq(struct wm_adsp *dsp)
2853 2853
2854 ret = wm_adsp_buffer_get_error(buf); 2854 ret = wm_adsp_buffer_get_error(buf);
2855 if (ret < 0) 2855 if (ret < 0)
2856 goto out; 2856 goto out_notify; /* Wake poll to report error */
2857 2857
2858 ret = wm_adsp_buffer_read(buf, HOST_BUFFER_FIELD(irq_count), 2858 ret = wm_adsp_buffer_read(buf, HOST_BUFFER_FIELD(irq_count),
2859 &buf->irq_count); 2859 &buf->irq_count);
@@ -2868,6 +2868,7 @@ int wm_adsp_compr_handle_irq(struct wm_adsp *dsp)
2868 goto out; 2868 goto out;
2869 } 2869 }
2870 2870
2871out_notify:
2871 if (compr && compr->stream) 2872 if (compr && compr->stream)
2872 snd_compr_fragment_elapsed(compr->stream); 2873 snd_compr_fragment_elapsed(compr->stream);
2873 2874
@@ -2928,6 +2929,10 @@ int wm_adsp_compr_pointer(struct snd_compr_stream *stream,
2928 * DSP to inform us once a whole fragment is available. 2929 * DSP to inform us once a whole fragment is available.
2929 */ 2930 */
2930 if (buf->avail < wm_adsp_compr_frag_words(compr)) { 2931 if (buf->avail < wm_adsp_compr_frag_words(compr)) {
2932 ret = wm_adsp_buffer_get_error(buf);
2933 if (ret < 0)
2934 goto out;
2935
2931 ret = wm_adsp_buffer_reenable_irq(buf); 2936 ret = wm_adsp_buffer_reenable_irq(buf);
2932 if (ret < 0) { 2937 if (ret < 0) {
2933 adsp_err(dsp, 2938 adsp_err(dsp,