diff options
author | Koen Kooi <koen@openembedded.org> | 2009-04-16 17:29:14 +0200 |
---|---|---|
committer | Koen Kooi <koen@openembedded.org> | 2009-04-16 17:29:14 +0200 |
commit | e9c95296cbcdca6a5531fca7b7a1b21ef2173a6d (patch) | |
tree | 5e807044dddba20f60b841a02e978ff7d3150f64 /recipes/linux/linux-omap-2.6.29/dss2/0026-DSS2-DSI-sidlemode-to-noidle-while-sending-frame.patch | |
parent | f9a6f7e2fb04f0ae4ce64769833e2464565cf530 (diff) |
linux-omap 2.6.29: sync with dss2 tree for YUV rotation
Diffstat (limited to 'recipes/linux/linux-omap-2.6.29/dss2/0026-DSS2-DSI-sidlemode-to-noidle-while-sending-frame.patch')
-rw-r--r-- | recipes/linux/linux-omap-2.6.29/dss2/0026-DSS2-DSI-sidlemode-to-noidle-while-sending-frame.patch | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/recipes/linux/linux-omap-2.6.29/dss2/0026-DSS2-DSI-sidlemode-to-noidle-while-sending-frame.patch b/recipes/linux/linux-omap-2.6.29/dss2/0026-DSS2-DSI-sidlemode-to-noidle-while-sending-frame.patch new file mode 100644 index 0000000000..6ee3908d10 --- /dev/null +++ b/recipes/linux/linux-omap-2.6.29/dss2/0026-DSS2-DSI-sidlemode-to-noidle-while-sending-frame.patch @@ -0,0 +1,78 @@ +From a1e8018c0806a1a0579eda4b93b7d6764a2ff643 Mon Sep 17 00:00:00 2001 +From: Tomi Valkeinen <tomi.valkeinen@nokia.com> +Date: Wed, 15 Apr 2009 14:06:54 +0300 +Subject: [PATCH] DSS2: DSI: sidlemode to noidle while sending frame + +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. +--- + drivers/video/omap2/dss/dispc.c | 10 ++++++++++ + drivers/video/omap2/dss/dsi.c | 4 ++++ + drivers/video/omap2/dss/dss.h | 3 +++ + 3 files changed, 17 insertions(+), 0 deletions(-) + +diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c +index ae7be3d..16c68b8 100644 +--- a/drivers/video/omap2/dss/dispc.c ++++ b/drivers/video/omap2/dss/dispc.c +@@ -2791,6 +2791,16 @@ static void _omap_dispc_initialize_irq(void) + 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; +diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c +index 66ac6ea..50af925 100644 +--- a/drivers/video/omap2/dss/dsi.c ++++ b/drivers/video/omap2/dss/dsi.c +@@ -2665,6 +2665,8 @@ static void dsi_update_screen_dispc(struct omap_display *display, + 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) +@@ -2678,6 +2680,8 @@ static void framedone_callback(void *data, u32 mask) + return; + } + ++ dispc_enable_sidle(); ++ + dsi.framedone_scheduled = 1; + + /* We get FRAMEDONE when DISPC has finished sending pixels and turns +diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h +index 0be42b6..d0917a8 100644 +--- a/drivers/video/omap2/dss/dss.h ++++ b/drivers/video/omap2/dss/dss.h +@@ -244,6 +244,9 @@ void dispc_fake_vsync_irq(void); + 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); +-- +1.5.6.5 + |