]> git.karo-electronics.de Git - linux-beck.git/commitdiff
OMAPDSS: HDMI: Handle panel init error at probe
authorRicardo Neri <ricardo.neri@ti.com>
Tue, 6 Nov 2012 06:19:14 +0000 (00:19 -0600)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Tue, 6 Nov 2012 11:33:35 +0000 (13:33 +0200)
Do not blindly assume that the panel could be initialized.

While there, group mutex initialization at a single place.

Signed-off-by: Ricardo Neri <ricardo.neri@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/video/omap2/dss/hdmi.c

index 1d04bc0479e74c98ee7b59a760621eb15df86dab..31cedbb9f9fd8e5edc4690d406074bf5d9d49128 100644 (file)
@@ -60,6 +60,7 @@
 static struct {
        struct mutex lock;
        struct platform_device *pdev;
+
        struct hdmi_ip_data ip_data;
 
        struct clk *sys_clk;
@@ -1056,6 +1057,7 @@ static int __init omapdss_hdmihw_probe(struct platform_device *pdev)
        hdmi.pdev = pdev;
 
        mutex_init(&hdmi.lock);
+       mutex_init(&hdmi.ip_data.lock);
 
        res = platform_get_resource(hdmi.pdev, IORESOURCE_MEM, 0);
        if (!res) {
@@ -1083,9 +1085,11 @@ static int __init omapdss_hdmihw_probe(struct platform_device *pdev)
        hdmi.ip_data.pll_offset = HDMI_PLLCTRL;
        hdmi.ip_data.phy_offset = HDMI_PHY;
 
-       mutex_init(&hdmi.ip_data.lock);
-
-       hdmi_panel_init();
+       r = hdmi_panel_init();
+       if (r) {
+               DSSERR("can't init panel\n");
+               goto err_panel_init;
+       }
 
        dss_debugfs_create_file("hdmi", hdmi_dump_regs);
 
@@ -1094,6 +1098,10 @@ static int __init omapdss_hdmihw_probe(struct platform_device *pdev)
        hdmi_probe_pdata(pdev);
 
        return 0;
+
+err_panel_init:
+       hdmi_put_clocks();
+       return r;
 }
 
 static int __exit hdmi_remove_child(struct device *dev, void *data)