From 0f65a07b71edaca3ad0971a8745ca70102fac119 Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Mon, 11 Nov 2013 14:11:59 +0530 Subject: [PATCH] ASoC: msm: Return proper error codes Return proper error codes back to ASoc framework if trigger operations like flush, drain fails or gets interrupted. Change-Id: I3e2a259b55d5619eac6122083a8936a85700d657 Signed-off-by: Eric Laurent Git-commit: 3a14d1af02c52d19d698732f3772f07843c90f6c Git-repo: https://android.googlesource.com/kernel/msm [dhakumar@codeaurora.org: resolved merge conflicts] Signed-off-by: Dhananjay Kumar --- sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c b/sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c index 57e06389daec..9e8c04dff8fa 100644 --- a/sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c +++ b/sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c @@ -562,7 +562,7 @@ static int msm_compr_trigger(struct snd_compr_stream *cstream, int cmd) spin_unlock_irq(&prtd->lock); spin_lock_irq(&prtd->lock); - /* only reset if flush was successful */ + /* FIXME. only reset if flush was successful */ prtd->byte_offset = 0; prtd->copied_total = 0; prtd->app_pointer = 0; @@ -589,6 +589,7 @@ static int msm_compr_trigger(struct snd_compr_stream *cstream, int cmd) if (!atomic_read(&prtd->start)) { pr_err("%s: stream is not in started state\n", __func__); + rc = -EPERM; spin_unlock_irq(&prtd->lock); break; } @@ -601,12 +602,14 @@ static int msm_compr_trigger(struct snd_compr_stream *cstream, int cmd) pr_debug("%s: wait till all the data is sent to dsp\n", __func__); rc = wait_event_interruptible(prtd->drain_wait, - prtd->drain_ready); + prtd->cmd_interrupt || prtd->drain_ready); } else spin_unlock_irq(&prtd->lock); - if (!atomic_read(&prtd->start)) { + if (!atomic_read(&prtd->start) || prtd->cmd_interrupt) { pr_err("%s: stream is not started\n", __func__); + rc = -EINTR; + prtd->cmd_interrupt = 0; break; } @@ -616,7 +619,7 @@ static int msm_compr_trigger(struct snd_compr_stream *cstream, int cmd) q6asm_cmd_nowait(prtd->audio_client, CMD_EOS); if (cmd == SND_COMPR_TRIGGER_PARTIAL_DRAIN) { - pr_err("PARTIAL DRAIN, do not send EOS now, why!?"); + pr_err("PARTIAL DRAIN, do not wait for EOS ack"); break; } @@ -640,7 +643,7 @@ static int msm_compr_trigger(struct snd_compr_stream *cstream, int cmd) break; } - return 0; + return rc; } static int msm_compr_pointer(struct snd_compr_stream *cstream,