soc-compress: Update error handling to cleanup backend

In soc compress open fail, handle cleanup of backend
to avoid backend related issues after it during
stability SSR(Subsystem restart) tests.

Change-Id: Ib4417668e308f191b832d06601ef64bfa3bcd318
Signed-off-by: Laxminath Kasam <lkasam@codeaurora.org>
This commit is contained in:
Laxminath Kasam 2020-06-20 15:02:23 +05:30
commit 87edd6ebed

View file

@ -155,6 +155,10 @@ static int soc_compr_open_fe(struct snd_compr_stream *cstream)
fe->dpcm[stream].runtime_update = SND_SOC_DPCM_UPDATE_FE;
ret = dpcm_be_dai_startup(fe, stream);
#ifdef CONFIG_AUDIO_QGKI
if (ret < 0)
goto out;
#else
if (ret < 0) {
/* clean up all links */
for_each_dpcm_be(fe, stream, dpcm)
@ -164,14 +168,18 @@ static int soc_compr_open_fe(struct snd_compr_stream *cstream)
fe->dpcm[stream].runtime = NULL;
goto out;
}
#endif
if (cpu_dai->driver->cops && cpu_dai->driver->cops->startup) {
ret = cpu_dai->driver->cops->startup(cstream, cpu_dai);
if (ret < 0) {
dev_err(cpu_dai->dev,
"Compress ASoC: can't open interface %s: %d\n",
cpu_dai->name, ret);
#ifdef CONFIG_AUDIO_QGKI
goto be_unwind;
#else
goto out;
#endif
}
}
@ -205,8 +213,21 @@ machine_err:
open_err:
if (cpu_dai->driver->cops && cpu_dai->driver->cops->shutdown)
cpu_dai->driver->cops->shutdown(cstream, cpu_dai);
#ifdef CONFIG_AUDIO_QGKI
be_unwind:
dpcm_be_dai_shutdown(fe, stream);
out:
/* clean up all links */
for_each_dpcm_be(fe, stream, dpcm)
dpcm->state = SND_SOC_DPCM_LINK_STATE_FREE;
dpcm_be_disconnect(fe, stream);
fe->dpcm[stream].runtime = NULL;
dpcm_path_put(&list);
#else
out:
dpcm_path_put(&list);
#endif
be_err:
fe->dpcm[stream].runtime_update = SND_SOC_DPCM_UPDATE_NO;
mutex_unlock(&fe->card->mutex);