Merge "ASoC: compr: wake up drain only if it's the last buffer" into audio-drivers.lnx.4.0

This commit is contained in:
Linux Build Service Account 2019-12-03 04:48:59 -08:00 • committed by Gerrit - the friendly Code Review server
commit 2ec178af46

View file

@ -825,15 +825,23 @@ static void compr_event_handler(uint32_t opcode,
* RESUME
*/
if ((prtd->copied_total == prtd->bytes_sent) &&
atomic_read(&prtd->drain)) {
pr_debug("RUN ack, wake up & continue pending drain\n");
atomic_read(&prtd->drain)) {
bytes_available = prtd->bytes_received - prtd->copied_total;
if (bytes_available < cstream->runtime->fragment_size) {
pr_debug("%s: RUN ack, wake up & continue pending drain\n",
__func__);
if (prtd->last_buffer)
prtd->last_buffer = 0;
if (prtd->last_buffer)
prtd->last_buffer = 0;
prtd->drain_ready = 1;
wake_up(&prtd->drain_wait);
atomic_set(&prtd->drain, 0);
prtd->drain_ready = 1;
wake_up(&prtd->drain_wait);
atomic_set(&prtd->drain, 0);
} else if (atomic_read(&prtd->xrun)) {
pr_debug("%s: RUN ack, continue write cycle\n", __func__);
atomic_set(&prtd->xrun, 0);
msm_compr_send_buffer(prtd);
}
}
spin_unlock_irqrestore(&prtd->lock, flags);