diff options
author | Mark Brown <broonie@kernel.org> | 2022-03-25 15:42:40 +0000 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2022-04-04 14:24:10 +0100 |
commit | 28103509248b94392e04a8ffcbc47da5e3e31dfc (patch) | |
tree | 60ea2a62787fd1dea705f59c08e58d2ce98098d9 /sound | |
parent | c775cbf62ed4911e4f0f23880f01815753123690 (diff) | |
download | linux-stable-28103509248b94392e04a8ffcbc47da5e3e31dfc.tar.gz linux-stable-28103509248b94392e04a8ffcbc47da5e3e31dfc.tar.bz2 linux-stable-28103509248b94392e04a8ffcbc47da5e3e31dfc.zip |
ASoC: atmel: Fix error handling in at91samg20ek probe()
The error handling in the AT91SAM9G20-EK machine driver probe did not
consistently free the SSC in error paths, sometimes immediately returning
an error rather than doing cleanup. Fix this.
Signed-off-by: Mark Brown <broonie@kernel.org>
Reviewed-by: Codrin Ciubotariu <codrin.ciubotariu@microchip.com>
Link: https://lore.kernel.org/r/20220325154241.1600757-3-broonie@kernel.org
Diffstat (limited to 'sound')
-rw-r--r-- | sound/soc/atmel/sam9g20_wm8731.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/sound/soc/atmel/sam9g20_wm8731.c b/sound/soc/atmel/sam9g20_wm8731.c index 0d639a33ad96..d771843011ea 100644 --- a/sound/soc/atmel/sam9g20_wm8731.c +++ b/sound/soc/atmel/sam9g20_wm8731.c @@ -148,7 +148,8 @@ static int at91sam9g20ek_audio_probe(struct platform_device *pdev) codec_np = of_parse_phandle(np, "atmel,audio-codec", 0); if (!codec_np) { dev_err(&pdev->dev, "codec info missing\n"); - return -EINVAL; + ret = -EINVAL; + goto err; } at91sam9g20ek_dai.codecs->of_node = codec_np; @@ -159,7 +160,8 @@ static int at91sam9g20ek_audio_probe(struct platform_device *pdev) if (!cpu_np) { dev_err(&pdev->dev, "dai and pcm info missing\n"); of_node_put(codec_np); - return -EINVAL; + ret = -EINVAL; + goto err; } at91sam9g20ek_dai.cpus->of_node = cpu_np; at91sam9g20ek_dai.platforms->of_node = cpu_np; @@ -170,9 +172,10 @@ static int at91sam9g20ek_audio_probe(struct platform_device *pdev) ret = snd_soc_register_card(card); if (ret) { dev_err(&pdev->dev, "snd_soc_register_card() failed\n"); + goto err; } - return ret; + return 0; err: atmel_ssc_put_audio(0); |