Merge "ASoC: msm: qdsp6v2: Unblock drain on reset event callback"
diff --git a/sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c b/sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c
index 1a4ec7c..4ca5764 100644
--- a/sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c
+++ b/sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c
@@ -480,6 +480,7 @@
snd_compr_fragment_elapsed(cstream);
prtd->copied_total = prtd->bytes_received;
atomic_set(&prtd->error, 1);
+ wake_up(&prtd->drain_wait);
spin_unlock(&prtd->lock);
break;
default:
@@ -931,14 +932,19 @@
rc = wait_event_interruptible(prtd->drain_wait,
prtd->drain_ready ||
prtd->cmd_interrupt ||
- atomic_read(&prtd->xrun));
- pr_debug("%s: out of buffer drain wait\n", __func__);
+ atomic_read(&prtd->xrun) ||
+ atomic_read(&prtd->error));
+ pr_debug("%s: out of buffer drain wait with ret %d\n", __func__, rc);
spin_lock_irqsave(&prtd->lock, *flags);
if (prtd->cmd_interrupt) {
pr_debug("%s: buffer drain interrupted by flush)\n", __func__);
rc = -EINTR;
prtd->cmd_interrupt = 0;
}
+ if (atomic_read(&prtd->error)) {
+ pr_err("%s: Got RESET EVENTS notification, return\n", __func__);
+ rc = -ENETRESET;
+ }
return rc;
}