|
@@ -23,13 +23,16 @@
|
|
#include <linux/clk.h>
|
|
#include <linux/clk.h>
|
|
#include <linux/delay.h>
|
|
#include <linux/delay.h>
|
|
#include <linux/err.h>
|
|
#include <linux/err.h>
|
|
|
|
+#include <linux/regulator/consumer.h>
|
|
|
|
|
|
#include <plat/display.h>
|
|
#include <plat/display.h>
|
|
|
|
+#include <plat/cpu.h>
|
|
#include "dss.h"
|
|
#include "dss.h"
|
|
|
|
|
|
static struct {
|
|
static struct {
|
|
bool skip_init;
|
|
bool skip_init;
|
|
bool update_enabled;
|
|
bool update_enabled;
|
|
|
|
+ struct regulator *vdds_sdi_reg;
|
|
} sdi;
|
|
} sdi;
|
|
|
|
|
|
static void sdi_basic_init(void)
|
|
static void sdi_basic_init(void)
|
|
@@ -57,6 +60,10 @@ int omapdss_sdi_display_enable(struct omap_dss_device *dssdev)
|
|
goto err0;
|
|
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 */
|
|
/* In case of skip_init sdi_init has already enabled the clocks */
|
|
if (!sdi.skip_init)
|
|
if (!sdi.skip_init)
|
|
dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
|
|
dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
|
|
@@ -120,6 +127,7 @@ int omapdss_sdi_display_enable(struct omap_dss_device *dssdev)
|
|
return 0;
|
|
return 0;
|
|
err2:
|
|
err2:
|
|
dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
|
|
dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
|
|
|
|
+ regulator_disable(sdi.vdds_sdi_reg);
|
|
err1:
|
|
err1:
|
|
omap_dss_stop_device(dssdev);
|
|
omap_dss_stop_device(dssdev);
|
|
err0:
|
|
err0:
|
|
@@ -135,6 +143,8 @@ void omapdss_sdi_display_disable(struct omap_dss_device *dssdev)
|
|
|
|
|
|
dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
|
|
dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
|
|
|
|
|
|
|
|
+ regulator_disable(sdi.vdds_sdi_reg);
|
|
|
|
+
|
|
omap_dss_stop_device(dssdev);
|
|
omap_dss_stop_device(dssdev);
|
|
}
|
|
}
|
|
EXPORT_SYMBOL(omapdss_sdi_display_disable);
|
|
EXPORT_SYMBOL(omapdss_sdi_display_disable);
|
|
@@ -151,6 +161,11 @@ int sdi_init(bool skip_init)
|
|
/* we store this for first display enable, then clear it */
|
|
/* we store this for first display enable, then clear it */
|
|
sdi.skip_init = skip_init;
|
|
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
|
|
* Enable clocks already here, otherwise there would be a toggle
|
|
* of them until sdi_display_enable is called.
|
|
* of them until sdi_display_enable is called.
|