| From eca25d1bf57f905f5ff39d486ac34270c25801f3 Mon Sep 17 00:00:00 2001 |
| From: Jerome Brunet <jbrunet@baylibre.com> |
| Date: Mon, 29 Apr 2019 15:29:39 +0200 |
| Subject: ASoC: hdmi-codec: unlock the device on startup errors |
| |
| [ Upstream commit 30180e8436046344b12813dc954b2e01dfdcd22d ] |
| |
| If the hdmi codec startup fails, it should clear the current_substream |
| pointer to free the device. This is properly done for the audio_startup() |
| callback but for snd_pcm_hw_constraint_eld(). |
| |
| Make sure the pointer cleared if an error is reported. |
| |
| Signed-off-by: Jerome Brunet <jbrunet@baylibre.com> |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| sound/soc/codecs/hdmi-codec.c | 6 +++++- |
| 1 file changed, 5 insertions(+), 1 deletion(-) |
| |
| diff --git a/sound/soc/codecs/hdmi-codec.c b/sound/soc/codecs/hdmi-codec.c |
| index 35df73e42cbc5..fb2f0ac1f16f3 100644 |
| --- a/sound/soc/codecs/hdmi-codec.c |
| +++ b/sound/soc/codecs/hdmi-codec.c |
| @@ -439,8 +439,12 @@ static int hdmi_codec_startup(struct snd_pcm_substream *substream, |
| if (!ret) { |
| ret = snd_pcm_hw_constraint_eld(substream->runtime, |
| hcp->eld); |
| - if (ret) |
| + if (ret) { |
| + mutex_lock(&hcp->current_stream_lock); |
| + hcp->current_stream = NULL; |
| + mutex_unlock(&hcp->current_stream_lock); |
| return ret; |
| + } |
| } |
| /* Select chmap supported */ |
| hdmi_codec_eld_chmap(hcp); |
| -- |
| 2.20.1 |
| |