diff options
| -rw-r--r-- | sound/soc/codecs/wm_adsp.c | 7 |
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 | ||
| 2871 | out_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, |
