From b36d8ca7148d95d1ee0657ce927ffa8dc8cfc553 Mon Sep 17 00:00:00 2001 From: Guodong Hu Date: Tue, 14 Apr 2020 23:03:31 +0800 Subject: [PATCH] asoc: fix prepare error in pulseaudio loopback cases In pulseaudio, prepare comes just after open for every substream in loopback cases, but the 'audio_client' is not allocated for the first substream in every pcm. And the returned error causes the failure of pulseaudio initialization for all loopback cases. Change-Id: I7fb6c1f23b9cf2660e4dd519a731c7e13a809a4a Signed-off-by: Guodong Hu --- asoc/msm-pcm-loopback-v2.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/asoc/msm-pcm-loopback-v2.c b/asoc/msm-pcm-loopback-v2.c index c0e567a7c262..dd710fd9ad60 100644 --- a/asoc/msm-pcm-loopback-v2.c +++ b/asoc/msm-pcm-loopback-v2.c @@ -448,12 +448,6 @@ static int msm_pcm_prepare(struct snd_pcm_substream *substream) dev_dbg(component->dev, "%s: ASM loopback stream:%d\n", __func__, substream->stream); - if (!pcm || !pcm->audio_client) { - mutex_unlock(&pcm->lock); - pr_err("%s: private data null or audio client freed\n", __func__); - return -EINVAL; - } - if (pcm->playback_start && pcm->capture_start) { mutex_unlock(&pcm->lock); return ret; @@ -474,6 +468,12 @@ static int msm_pcm_prepare(struct snd_pcm_substream *substream) pcm->capture_substream->private_data; event.event_func = msm_pcm_route_event_handler; event.priv_data = (void *) pcm; + + if (!pcm->audio_client) { + mutex_unlock(&pcm->lock); + pr_err("%s: audio client freed\n", __func__); + return -EINVAL; + } msm_pcm_routing_reg_phy_stream(soc_pcm_tx->dai_link->id, pcm->audio_client->perf_mode, pcm->session_id, pcm->capture_substream->stream);