diff options
Diffstat (limited to 'meta/recipes-kernel/linux/linux-netbook-2.6.33.2/linux-2.6.35-OMAP-DSS2-Use-vdds_sdi-regulator-supply-in-SDI.patch')
-rw-r--r-- | meta/recipes-kernel/linux/linux-netbook-2.6.33.2/linux-2.6.35-OMAP-DSS2-Use-vdds_sdi-regulator-supply-in-SDI.patch | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/meta/recipes-kernel/linux/linux-netbook-2.6.33.2/linux-2.6.35-OMAP-DSS2-Use-vdds_sdi-regulator-supply-in-SDI.patch b/meta/recipes-kernel/linux/linux-netbook-2.6.33.2/linux-2.6.35-OMAP-DSS2-Use-vdds_sdi-regulator-supply-in-SDI.patch new file mode 100644 index 000000000..db0bf723e --- /dev/null +++ b/meta/recipes-kernel/linux/linux-netbook-2.6.33.2/linux-2.6.35-OMAP-DSS2-Use-vdds_sdi-regulator-supply-in-SDI.patch @@ -0,0 +1,118 @@ +From 4111c672962a8df130b294961ab552fef6a498d9 Mon Sep 17 00:00:00 2001 +From: Roger Quadros <roger.quadros@nokia.com> +Date: Wed, 17 Mar 2010 12:35:21 +0000 +Subject: [PATCH 2/10] OMAP: DSS2: Use vdds_sdi regulator supply in SDI + +From: Roger Quadros <roger.quadros@nokia.com> + +Patch-mainline: 2.6.35? +Git-repo: http://www.gitorious.org/linux-omap-dss2/linux/commit/1d5c6663d92b37539617d833e6049e5dd21751c4 + +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 <roger.quadros@nokia.com> +Signed-off-by: Tomi Valkeinen <tomi.valkeinen@nokia.com> +--- + drivers/video/omap2/dss/core.c | 2 +- + drivers/video/omap2/dss/dss.h | 2 +- + drivers/video/omap2/dss/sdi.c | 17 ++++++++++++++++- + 3 files changed, 18 insertions(+), 3 deletions(-) + +diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c +index 0988781..97f929b 100644 +--- a/drivers/video/omap2/dss/core.c ++++ b/drivers/video/omap2/dss/core.c +@@ -495,7 +495,7 @@ static int omap_dss_probe(struct platform_device *pdev) + #endif + if (cpu_is_omap34xx()) { + #ifdef CONFIG_OMAP2_DSS_SDI +- r = sdi_init(skip_init); ++ r = sdi_init(pdev, skip_init); + if (r) { + DSSERR("Failed to initialize SDI\n"); + goto fail0; +diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h +index 2bcb124..8490bdf 100644 +--- a/drivers/video/omap2/dss/dss.h ++++ b/drivers/video/omap2/dss/dss.h +@@ -231,7 +231,7 @@ int dss_calc_clock_div(bool is_tft, unsigned long req_pck, + struct dispc_clock_info *dispc_cinfo); + + /* SDI */ +-int sdi_init(bool skip_init); ++int sdi_init(struct platform_device *pdev, bool skip_init); + void sdi_exit(void); + int sdi_init_display(struct omap_dss_device *display); + +diff --git a/drivers/video/omap2/dss/sdi.c b/drivers/video/omap2/dss/sdi.c +index c24f307..025c56c 100644 +--- a/drivers/video/omap2/dss/sdi.c ++++ b/drivers/video/omap2/dss/sdi.c +@@ -23,6 +23,8 @@ + #include <linux/clk.h> + #include <linux/delay.h> + #include <linux/err.h> ++#include <linux/platform_device.h> ++#include <linux/regulator/consumer.h> + + #include <plat/display.h> + #include "dss.h" +@@ -30,6 +32,7 @@ + static struct { + bool skip_init; + bool update_enabled; ++ struct regulator *vdds_sdi_reg; + } sdi; + + static void sdi_basic_init(void) +@@ -63,6 +66,10 @@ static int sdi_display_enable(struct omap_dss_device *dssdev) + goto err1; + } + ++ 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); +@@ -136,6 +143,7 @@ err3: + dispc_enable_lcd_out(0); + err2: + dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1); ++ regulator_disable(sdi.vdds_sdi_reg); + err1: + omap_dss_stop_device(dssdev); + err0: +@@ -164,6 +172,8 @@ static void sdi_display_disable(struct omap_dss_device *dssdev) + + dssdev->state = OMAP_DSS_DISPLAY_DISABLED; + ++ regulator_disable(sdi.vdds_sdi_reg); ++ + omap_dss_stop_device(dssdev); + } + +@@ -258,11 +268,16 @@ int sdi_init_display(struct omap_dss_device *dssdev) + return 0; + } + +-int sdi_init(bool skip_init) ++int sdi_init(struct platform_device *pdev, bool skip_init) + { + /* we store this for first display enable, then clear it */ + sdi.skip_init = skip_init; + ++ sdi.vdds_sdi_reg = regulator_get(&pdev->dev, "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.6.0.4 + |