From: Roger Quadros <[email protected]>

This patch enables the use of vdds_sdi regulator in SDI subsystem.
We can disable the vdds_sdi voltage when not in use to save
power.

Signed-off-by: Roger Quadros <[email protected]>
Signed-off-by: Tomi Valkeinen <[email protected]>
---
 drivers/video/omap2/dss/sdi.c |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/drivers/video/omap2/dss/sdi.c b/drivers/video/omap2/dss/sdi.c
index 3de3c1e..ee07a3c 100644
--- a/drivers/video/omap2/dss/sdi.c
+++ b/drivers/video/omap2/dss/sdi.c
@@ -23,13 +23,16 @@
 #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)
@@ -57,6 +60,10 @@ int omapdss_sdi_display_enable(struct omap_dss_device 
*dssdev)
                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);
@@ -120,6 +127,7 @@ int omapdss_sdi_display_enable(struct omap_dss_device 
*dssdev)
        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:
@@ -135,6 +143,8 @@ void omapdss_sdi_display_disable(struct omap_dss_device 
*dssdev)
 
        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);
@@ -151,6 +161,11 @@ int sdi_init(bool skip_init)
        /* 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.
-- 
1.7.0.4

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to