Unverified Commit 721a94b4 authored by Srinivas Kandagatla's avatar Srinivas Kandagatla Committed by Mark Brown
Browse files

ASoC: qdsp6: q6asm: fix q6asm_dai_prepare error handling



Error handling in q6asm_dai_prepare() seems to be completely broken,
Fix this by handling it properly.

Fixes: 2a9e92d3 ("ASoC: qdsp6: q6asm: Add q6asm dai driver")
Signed-off-by: default avatarSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20211116114721.12517-4-srinivas.kandagatla@linaro.org


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 861afeac
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -269,9 +269,7 @@ static int q6asm_dai_prepare(struct snd_soc_component *component,

	if (ret < 0) {
		dev_err(dev, "%s: q6asm_open_write failed\n", __func__);
		q6asm_audio_client_free(prtd->audio_client);
		prtd->audio_client = NULL;
		return -ENOMEM;
		goto open_err;
	}

	prtd->session_id = q6asm_get_session_id(prtd->audio_client);
@@ -279,7 +277,7 @@ static int q6asm_dai_prepare(struct snd_soc_component *component,
			      prtd->session_id, substream->stream);
	if (ret) {
		dev_err(dev, "%s: stream reg failed ret:%d\n", __func__, ret);
		return ret;
		goto routing_err;
	}

	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
@@ -301,10 +299,19 @@ static int q6asm_dai_prepare(struct snd_soc_component *component,
	}
	if (ret < 0)
		dev_info(dev, "%s: CMD Format block failed\n", __func__);

	else
		prtd->state = Q6ASM_STREAM_RUNNING;

	return 0;
	return ret;

routing_err:
	q6asm_cmd(prtd->audio_client, prtd->stream_id,  CMD_CLOSE);
open_err:
	q6asm_unmap_memory_regions(substream->stream, prtd->audio_client);
	q6asm_audio_client_free(prtd->audio_client);
	prtd->audio_client = NULL;

	return ret;
}

static int q6asm_dai_trigger(struct snd_soc_component *component,