summaryrefslogtreecommitdiff
path: root/drivers/video/omap2/dss/dss.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/omap2/dss/dss.c')
-rw-r--r--drivers/video/omap2/dss/dss.c33
1 files changed, 30 insertions, 3 deletions
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
index 3f1fee63c67..db0a9ef210c 100644
--- a/drivers/video/omap2/dss/dss.c
+++ b/drivers/video/omap2/dss/dss.c
@@ -68,6 +68,7 @@ static struct {
struct clk *dss_sys_clk;
struct clk *dss_tv_fck;
struct clk *dss_video_fck;
+ struct clk *dss_dss_clk;
unsigned num_clks_enabled;
unsigned long cache_req_pck;
@@ -816,6 +817,7 @@ static int dss_get_clocks(void)
dss.dss_sys_clk = NULL;
dss.dss_tv_fck = NULL;
dss.dss_video_fck = NULL;
+ dss.dss_dss_clk = NULL;
r = dss_get_clock(&dss.dss_ick, "ick");
if (r)
@@ -848,6 +850,12 @@ static int dss_get_clocks(void)
goto err;
}
+ if (pdata->opt_clock_available("dss_clk")) {
+ r = dss_get_clock(&dss.dss_dss_clk, "dss_clk");
+ if (r)
+ goto err;
+ }
+
return 0;
err:
@@ -861,7 +869,8 @@ err:
clk_put(dss.dss_tv_fck);
if (dss.dss_video_fck)
clk_put(dss.dss_video_fck);
-
+ if (dss.dss_dss_clk)
+ clk_put(dss.dss_dss_clk);
return r;
}
@@ -873,6 +882,8 @@ static void dss_put_clocks(void)
clk_put(dss.dss_tv_fck);
if (dss.dss_sys_clk)
clk_put(dss.dss_sys_clk);
+ if (dss.dss_dss_clk)
+ clk_put(dss.dss_dss_clk);
clk_put(dss.dss_fck);
clk_put(dss.dss_ick);
}
@@ -920,8 +931,16 @@ static void dss_clk_enable_no_ctx(enum dss_clock clks)
if (clks & DSS_CLK_ICK)
clk_enable(dss.dss_ick);
- if (clks & DSS_CLK_FCK)
+ /*
+ * XXX: tie dss_dss_clk to FCK - this will change with following
+ * pm_runtime patches. Needed for OMAP4 boot up due to stricter
+ * clock cutting in pm framework post 2.6.38-rc5.
+ */
+ if (clks & DSS_CLK_FCK) {
clk_enable(dss.dss_fck);
+ if (dss.dss_dss_clk)
+ clk_enable(dss.dss_dss_clk);
+ }
if ((clks & DSS_CLK_SYSCK) && dss.dss_sys_clk)
clk_enable(dss.dss_sys_clk);
if ((clks & DSS_CLK_TVFCK) && dss.dss_tv_fck)
@@ -956,8 +975,16 @@ static void dss_clk_disable_no_ctx(enum dss_clock clks)
if (clks & DSS_CLK_ICK)
clk_disable(dss.dss_ick);
- if (clks & DSS_CLK_FCK)
+ /*
+ * XXX: tie dss_dss_clk to FCK - this will change with following
+ * pm_runtime patches. Needed for OMAP4 boot up due to stricter
+ * clock cutting in pm framework post 2.6.38-rc5.
+ */
+ if (clks & DSS_CLK_FCK) {
clk_disable(dss.dss_fck);
+ if (dss.dss_dss_clk)
+ clk_disable(dss.dss_dss_clk);
+ }
if ((clks & DSS_CLK_SYSCK) && dss.dss_sys_clk)
clk_disable(dss.dss_sys_clk);
if ((clks & DSS_CLK_TVFCK) && dss.dss_tv_fck)