You've already forked linux-rockchip
mirror of
https://github.com/armbian/linux-rockchip.git
synced 2026-01-06 11:08:10 -08:00
ASoC: qdsp6: q6asm: fix q6asm_dai_prepare error handling
[ Upstream commit721a94b435] Error handling in q6asm_dai_prepare() seems to be completely broken, Fix this by handling it properly. Fixes:2a9e92d371("ASoC: qdsp6: q6asm: Add q6asm dai driver") Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Link: https://lore.kernel.org/r/20211116114721.12517-4-srinivas.kandagatla@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
9196a68581
commit
4a4f900e04
@@ -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;
|
||||
|
||||
prtd->state = Q6ASM_STREAM_RUNNING;
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
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,
|
||||
|
||||
Reference in New Issue
Block a user