#include <linux/clk.h>
 #include <linux/delay.h>
 #include <linux/err.h>
+#include <linux/regulator/consumer.h>
 
 #include <plat/display.h>
+#include <plat/cpu.h>
 #include "dss.h"
 
 static struct {
        bool skip_init;
        bool update_enabled;
+       struct regulator *vdds_sdi_reg;
 } sdi;
 
 static void sdi_basic_init(void)
                goto err0;
        }
 
+       r = regulator_enable(sdi.vdds_sdi_reg);
+       if (r)
+               goto err1;
+
        /* In case of skip_init sdi_init has already enabled the clocks */
        if (!sdi.skip_init)
                dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
        return 0;
 err2:
        dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
+       regulator_disable(sdi.vdds_sdi_reg);
 err1:
        omap_dss_stop_device(dssdev);
 err0:
 
        dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
 
+       regulator_disable(sdi.vdds_sdi_reg);
+
        omap_dss_stop_device(dssdev);
 }
 EXPORT_SYMBOL(omapdss_sdi_display_disable);
        /* we store this for first display enable, then clear it */
        sdi.skip_init = skip_init;
 
+       sdi.vdds_sdi_reg = dss_get_vdds_sdi();
+       if (IS_ERR(sdi.vdds_sdi_reg)) {
+               DSSERR("can't get VDDS_SDI regulator\n");
+               return PTR_ERR(sdi.vdds_sdi_reg);
+       }
        /*
         * Enable clocks already here, otherwise there would be a toggle
         * of them until sdi_display_enable is called.