*/
        dsi_enable_scp_clk(dsi);
 
-       if (!dsi->vdds_dsi_enabled) {
-               r = regulator_enable(dsi->vdds_dsi_reg);
-               if (r)
-                       goto err0;
-               dsi->vdds_dsi_enabled = true;
-       }
+       r = regulator_enable(dsi->vdds_dsi_reg);
+       if (r)
+               goto err0;
 
        /* XXX PLL does not come out of reset without this... */
        dispc_pck_free_enable(dsi->dss->dispc, 1);
 
        return 0;
 err1:
-       if (dsi->vdds_dsi_enabled) {
-               regulator_disable(dsi->vdds_dsi_reg);
-               dsi->vdds_dsi_enabled = false;
-       }
+       regulator_disable(dsi->vdds_dsi_reg);
 err0:
        dsi_disable_scp_clk(dsi);
        dsi_runtime_put(dsi);
        return r;
 }
 
-static void dsi_pll_uninit(struct dsi_data *dsi, bool disconnect_lanes)
+static void dsi_pll_disable(struct dss_pll *pll)
 {
+       struct dsi_data *dsi = container_of(pll, struct dsi_data, pll);
+
        dsi_pll_power(dsi, DSI_PLL_POWER_OFF);
-       if (disconnect_lanes) {
-               WARN_ON(!dsi->vdds_dsi_enabled);
-               regulator_disable(dsi->vdds_dsi_reg);
-               dsi->vdds_dsi_enabled = false;
-       }
+
+       regulator_disable(dsi->vdds_dsi_reg);
 
        dsi_disable_scp_clk(dsi);
        dsi_runtime_put(dsi);
 
-       DSSDBG("PLL uninit done\n");
-}
-
-static void dsi_pll_disable(struct dss_pll *pll)
-{
-       struct dsi_data *dsi = container_of(pll, struct dsi_data, pll);
-
-       dsi_pll_uninit(dsi, true);
+       DSSDBG("PLL disable done\n");
 }
 
 static int dsi_dump_dsi_clocks(struct seq_file *s, void *p)
 
        r = dss_pll_enable(&dsi->pll);
        if (r)
-               goto err0;
+               return r;
 
        r = dsi_configure_dsi_clocks(dsi);
        if (r)
-               goto err1;
+               goto err0;
 
        dss_select_dsi_clk_source(dsi->dss, dsi->module_id,
                                  dsi->module_id == 0 ?
 
        DSSDBG("PLL OK\n");
 
+       if (!dsi->vdds_dsi_enabled) {
+               r = regulator_enable(dsi->vdds_dsi_reg);
+               if (r)
+                       goto err1;
+
+               dsi->vdds_dsi_enabled = true;
+       }
+
        r = dsi_cio_init(dsi);
        if (r)
                goto err2;
 err3:
        dsi_cio_uninit(dsi);
 err2:
-       dss_select_dsi_clk_source(dsi->dss, dsi->module_id, DSS_CLK_SRC_FCK);
+       regulator_disable(dsi->vdds_dsi_reg);
+       dsi->vdds_dsi_enabled = false;
 err1:
-       dss_pll_disable(&dsi->pll);
+       dss_select_dsi_clk_source(dsi->dss, dsi->module_id, DSS_CLK_SRC_FCK);
 err0:
+       dss_pll_disable(&dsi->pll);
+
        return r;
 }
 
 
        dss_select_dsi_clk_source(dsi->dss, dsi->module_id, DSS_CLK_SRC_FCK);
        dsi_cio_uninit(dsi);
-       dsi_pll_uninit(dsi, disconnect_lanes);
+       dss_pll_disable(&dsi->pll);
+
+       if (disconnect_lanes) {
+               regulator_disable(dsi->vdds_dsi_reg);
+               dsi->vdds_dsi_enabled = false;
+       }
 }
 
 static void dsi_display_enable(struct omap_dss_device *dssdev)