summaryrefslogtreecommitdiff
path: root/drivers/video/omap2/dss/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/omap2/dss/core.c')
-rw-r--r--[-rwxr-xr-x]drivers/video/omap2/dss/core.c26
1 files changed, 20 insertions, 6 deletions
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
index 2b23c75aa551..1eab132328b1 100755..100644
--- a/drivers/video/omap2/dss/core.c
+++ b/drivers/video/omap2/dss/core.c
@@ -147,6 +147,7 @@ static void core_dump_clocks(struct seq_file *s)
seq_printf(s, "- CORE -\n");
seq_printf(s, "internal clk count\t\t%u\n", core.num_clks_enabled);
+ seq_printf(s, "mainclk count\t\t%u\n", dss_get_mainclk_state());
for (i = 0; i < 5; i++) {
if (!clocks[i])
@@ -302,6 +303,7 @@ static void dss_clk_enable_no_ctx(enum dss_clock clks)
{
unsigned num_clks = count_clk_bits(clks);
+ /* don't do aggressive clock cutting on OMAP4 */
if (cpu_is_omap44xx())
return;
@@ -328,11 +330,21 @@ void dss_clk_enable(enum dss_clock clks)
if (check_ctx && cpu_is_omap34xx() && dss_need_ctx_restore())
restore_all_ctx();
}
-void dss_opt_clock_enable()
+
+int dss_opt_clock_enable()
{
- clk_enable(core.dss_ick);
- clk_enable(core.dss1_fck);
- clk_enable(core.dss_96m_fck);
+ int r = clk_enable(core.dss_ick);
+ if (!r) {
+ r = clk_enable(core.dss1_fck);
+ if (!r) {
+ r = clk_enable(core.dss_96m_fck);
+ if (!r)
+ return 0;
+ clk_disable(core.dss1_fck);
+ }
+ clk_disable(core.dss_ick);
+ }
+ return r;
}
void dss_opt_clock_disable()
@@ -472,8 +484,10 @@ struct regulator *dss_get_vdda_dac(void)
static void dss_debug_dump_clocks(struct seq_file *s)
{
core_dump_clocks(s);
- dss_dump_clocks(s);
- dispc_dump_clocks(s);
+ if (dss_get_mainclk_state()) {
+ dss_dump_clocks(s);
+ dispc_dump_clocks(s);
+ }
#ifdef CONFIG_OMAP2_DSS_DSI
dsi1_dump_clocks(s);
dsi2_dump_clocks(s);