OMAP: DSS2: Fix init and unit sequence
Tomi Valkeinen [Tue, 17 May 2011 13:10:59 +0000 (16:10 +0300)]
The initialization order of the DSS modules is important when pm_runtime
support is implemented. Currently RFBI is initialized before DISPC,
which will cause problems with pm_runtime as RFBI uses DISPC.

The same goes for uninitialization order, and dss_uninit needs to be
called last, and dispc_uninit just before that.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>

drivers/video/omap2/dss/core.c

index 3da4267..3380a91 100644 (file)
@@ -185,6 +185,11 @@ static int omap_dss_probe(struct platform_device *pdev)
 
        /* keep clocks enabled to prevent context saves/restores during init */
        dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK);
+       r = dispc_init_platform_driver();
+       if (r) {
+               DSSERR("Failed to initialize dispc platform driver\n");
+               goto err_dispc;
+       }
 
        r = rfbi_init_platform_driver();
        if (r) {
@@ -192,12 +197,6 @@ static int omap_dss_probe(struct platform_device *pdev)
                goto err_rfbi;
        }
 
-       r = dispc_init_platform_driver();
-       if (r) {
-               DSSERR("Failed to initialize dispc platform driver\n");
-               goto err_dispc;
-       }
-
        r = venc_init_platform_driver();
        if (r) {
                DSSERR("Failed to initialize venc platform driver\n");
@@ -268,11 +267,11 @@ static int omap_dss_remove(struct platform_device *pdev)
 
        dss_uninitialize_debugfs();
 
+       hdmi_uninit_platform_driver();
+       dsi_uninit_platform_driver();
        venc_uninit_platform_driver();
-       dispc_uninit_platform_driver();
        rfbi_uninit_platform_driver();
-       dsi_uninit_platform_driver();
-       hdmi_uninit_platform_driver();
+       dispc_uninit_platform_driver();
        dss_uninit_platform_driver();
 
        dss_uninit_overlays(pdev);