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>
This commit is contained in:
Ben Romberger 2015-10-08 13:29:38 -07:00 committed by Gerrit - the friendly Code Review server
parent aa310fac06
commit 3740696958

View file

@ -1147,6 +1147,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) {
@ -1848,6 +1850,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) {
@ -1857,10 +1865,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;
}