summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Romberger <bromberg@codeaurora.org>2015-10-08 13:29:38 -0700
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:11:20 -0700
commit24102570c8bc285d121d41a246e9e2e1dc5e698a (patch)
treec82fbb7666c76be9937f522ee9d81a9255268c0f
parent60ae3d3db46e588d9a0d6bd2695c9527795cb208 (diff)
ASoC: msm: Interrupt events in compress free
Interrupt any wait events during free of the compress driver and move spinlock unlock to after the ASM client is freed. Change-Id: Idb865ebbb47b86ac32043ba4562053d3f9795b4d Signed-off-by: Ben Romberger <bromberg@codeaurora.org>
-rwxr-xr-xsound/soc/msm/qdsp6v2/msm-compress-q6-v2.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c b/sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c
index abb02bcb046e..8399f02fd4a2 100755
--- a/sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c
+++ b/sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c
@@ -1144,6 +1144,8 @@ static int msm_compr_free(struct snd_compr_stream *cstream)
pr_err("%s prtd is null\n", __func__);
return 0;
}
+ prtd->cmd_interrupt = 1;
+ wake_up(&prtd->drain_wait);
pdata = snd_soc_platform_get_drvdata(soc_prtd->platform);
ac = prtd->audio_client;
if (!pdata || !ac) {
@@ -1838,6 +1840,12 @@ static int msm_compr_trigger(struct snd_compr_stream *cstream, int cmd)
__func__);
break;
}
+
+ spin_lock_irqsave(&prtd->lock, flags);
+ prtd->gapless_state.stream_opened[stream_index] = 1;
+ prtd->gapless_state.set_next_stream_id = true;
+ spin_unlock_irqrestore(&prtd->lock, flags);
+
rc = msm_compr_send_media_format_block(cstream,
stream_id, false);
if (rc < 0) {
@@ -1847,10 +1855,6 @@ static int msm_compr_trigger(struct snd_compr_stream *cstream, int cmd)
}
msm_compr_send_dec_params(cstream, pdata->dec_params[fe_id],
stream_id);
- spin_lock_irqsave(&prtd->lock, flags);
- prtd->gapless_state.stream_opened[stream_index] = 1;
- prtd->gapless_state.set_next_stream_id = true;
- spin_unlock_irqrestore(&prtd->lock, flags);
break;
}