DISPC interrupts are not wake-up capable. Smart-idle in DISPC_SIDLEMODE
causes DSS interface to go to idle at the end of the frame, and the
FRAMEDONE interrupt is then delayed until something wakes up the DSS
interface.
So we set SIDLEMODE to no-idle when we start sending the frame, and
set it back to smart-idle after receiving FRAMEDONE.
omap_dispc_set_irqs();
}
+void dispc_enable_sidle(void)
+{
+ REG_FLD_MOD(DISPC_SYSCONFIG, 2, 4, 3); /* SIDLEMODE: smart idle */
+}
+
+void dispc_disable_sidle(void)
+{
+ REG_FLD_MOD(DISPC_SYSCONFIG, 1, 4, 3); /* SIDLEMODE: no idle */
+}
+
static void _omap_dispc_initial_config(void)
{
u32 l;
l = FLD_MOD(l, 1, 31, 31); /* TE_START */
dsi_write_reg(DSI_VC_TE(1), l);
+ dispc_disable_sidle();
+
dispc_enable_lcd_out(1);
if (dsi.use_te)
return;
}
+ dispc_enable_sidle();
+
dsi.framedone_scheduled = 1;
/* We get FRAMEDONE when DISPC has finished sending pixels and turns
void dispc_save_context(void);
void dispc_restore_context(void);
+void dispc_enable_sidle(void);
+void dispc_disable_sidle(void);
+
void dispc_lcd_enable_signal_polarity(bool act_high);
void dispc_lcd_enable_signal(bool enable);
void dispc_pck_free_enable(bool enable);