summary refs log tree commit diff
path: root/drivers/video/sh_mobile_hdmi.c
diff options
context:
space:
mode:
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>2010-09-09 11:48:20 +0900
committerMark Brown <broonie@opensource.wolfsonmicro.com>2010-09-10 16:07:41 +0100
commitec4e5ccd4b8be576f9cd8bfc3cb8651565ed87ef (patch)
tree46f591057cd699035b79dfa9cd80a088e25c2dbe /drivers/video/sh_mobile_hdmi.c
parent17731f8dffe7dc6fd0eb82018505a74907431699 (diff)
downloadlinux-ec4e5ccd4b8be576f9cd8bfc3cb8651565ed87ef.tar.gz
fbdev: sh_mobile_hdmi: add new label for sound error path
This patch solve below report from Guennadi

>  /* External video parameter settings */
>  static void hdmi_external_video_param(struct sh_hdmi *hdmi)
>  {
> @@ -804,6 +862,11 @@ static int __init sh_hdmi_probe(struct platform_device *pdev)
>  		return -ENOMEM;
>  	}
>
> +	ret =  snd_soc_register_codec(&pdev->dev,
> +			&soc_codec_dev_sh_hdmi, &sh_hdmi_dai, 1);
> +	if (ret < 0)
> +		goto egetclk;
> +
>  	hdmi->dev = &pdev->dev;
>
>  	hdmi->hdmi_clk = clk_get(&pdev->dev, "ick");

NAK. This breaks the error path and has to be fixed. Firstly, please, use
a new label like "esndreg," secondly, you have to add

 	clk_disable(hdmi->hdmi_clk);
 erate:
 	clk_put(hdmi->hdmi_clk);
 egetclk:
+	snd_soc_unregister_codec(&pdev->dev);
+esndreg:
 	mutex_destroy(&hdmi->mutex);
 	kfree(hdmi);

Reported-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Reviewed-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'drivers/video/sh_mobile_hdmi.c')
-rw-r--r--drivers/video/sh_mobile_hdmi.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/video/sh_mobile_hdmi.c b/drivers/video/sh_mobile_hdmi.c
index a2cb49254eb2..ef989d94511c 100644
--- a/drivers/video/sh_mobile_hdmi.c
+++ b/drivers/video/sh_mobile_hdmi.c
@@ -967,7 +967,7 @@ static int __init sh_hdmi_probe(struct platform_device *pdev)
 	ret =  snd_soc_register_codec(&pdev->dev,
 			&soc_codec_dev_sh_hdmi, &sh_hdmi_dai, 1);
 	if (ret < 0)
-		goto egetclk;
+		goto esndreg;
 
 	hdmi->dev = &pdev->dev;
 
@@ -1054,6 +1054,8 @@ eclkenable:
 erate:
 	clk_put(hdmi->hdmi_clk);
 egetclk:
+	snd_soc_unregister_codec(&pdev->dev);
+esndreg:
 	kfree(hdmi);
 
 	return ret;