diff options
Diffstat (limited to 'meta/recipes-kernel/linux/linux-omap-2.6.29/dss2/0026-DSS2-DSI-sidlemode-to-noidle-while-sending-frame.patch')
-rw-r--r-- | meta/recipes-kernel/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/meta/recipes-kernel/linux/linux-omap-2.6.29/dss2/0026-DSS2-DSI-sidlemode-to-noidle-while-sending-frame.patch b/meta/recipes-kernel/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/meta/recipes-kernel/linux/linux-omap-2.6.29/dss2/0026-DSS2-DSI-sidlemode-to-noidle-while-sending-frame.patch | |||
@@ -0,0 +1,78 @@ | |||
1 | From a1e8018c0806a1a0579eda4b93b7d6764a2ff643 Mon Sep 17 00:00:00 2001 | ||
2 | From: Tomi Valkeinen <tomi.valkeinen@nokia.com> | ||
3 | Date: Wed, 15 Apr 2009 14:06:54 +0300 | ||
4 | Subject: [PATCH] DSS2: DSI: sidlemode to noidle while sending frame | ||
5 | |||
6 | DISPC interrupts are not wake-up capable. Smart-idle in DISPC_SIDLEMODE | ||
7 | causes DSS interface to go to idle at the end of the frame, and the | ||
8 | FRAMEDONE interrupt is then delayed until something wakes up the DSS | ||
9 | interface. | ||
10 | |||
11 | So we set SIDLEMODE to no-idle when we start sending the frame, and | ||
12 | set it back to smart-idle after receiving FRAMEDONE. | ||
13 | --- | ||
14 | drivers/video/omap2/dss/dispc.c | 10 ++++++++++ | ||
15 | drivers/video/omap2/dss/dsi.c | 4 ++++ | ||
16 | drivers/video/omap2/dss/dss.h | 3 +++ | ||
17 | 3 files changed, 17 insertions(+), 0 deletions(-) | ||
18 | |||
19 | diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c | ||
20 | index ae7be3d..16c68b8 100644 | ||
21 | --- a/drivers/video/omap2/dss/dispc.c | ||
22 | +++ b/drivers/video/omap2/dss/dispc.c | ||
23 | @@ -2791,6 +2791,16 @@ static void _omap_dispc_initialize_irq(void) | ||
24 | omap_dispc_set_irqs(); | ||
25 | } | ||
26 | |||
27 | +void dispc_enable_sidle(void) | ||
28 | +{ | ||
29 | + REG_FLD_MOD(DISPC_SYSCONFIG, 2, 4, 3); /* SIDLEMODE: smart idle */ | ||
30 | +} | ||
31 | + | ||
32 | +void dispc_disable_sidle(void) | ||
33 | +{ | ||
34 | + REG_FLD_MOD(DISPC_SYSCONFIG, 1, 4, 3); /* SIDLEMODE: no idle */ | ||
35 | +} | ||
36 | + | ||
37 | static void _omap_dispc_initial_config(void) | ||
38 | { | ||
39 | u32 l; | ||
40 | diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c | ||
41 | index 66ac6ea..50af925 100644 | ||
42 | --- a/drivers/video/omap2/dss/dsi.c | ||
43 | +++ b/drivers/video/omap2/dss/dsi.c | ||
44 | @@ -2665,6 +2665,8 @@ static void dsi_update_screen_dispc(struct omap_display *display, | ||
45 | l = FLD_MOD(l, 1, 31, 31); /* TE_START */ | ||
46 | dsi_write_reg(DSI_VC_TE(1), l); | ||
47 | |||
48 | + dispc_disable_sidle(); | ||
49 | + | ||
50 | dispc_enable_lcd_out(1); | ||
51 | |||
52 | if (dsi.use_te) | ||
53 | @@ -2678,6 +2680,8 @@ static void framedone_callback(void *data, u32 mask) | ||
54 | return; | ||
55 | } | ||
56 | |||
57 | + dispc_enable_sidle(); | ||
58 | + | ||
59 | dsi.framedone_scheduled = 1; | ||
60 | |||
61 | /* We get FRAMEDONE when DISPC has finished sending pixels and turns | ||
62 | diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h | ||
63 | index 0be42b6..d0917a8 100644 | ||
64 | --- a/drivers/video/omap2/dss/dss.h | ||
65 | +++ b/drivers/video/omap2/dss/dss.h | ||
66 | @@ -244,6 +244,9 @@ void dispc_fake_vsync_irq(void); | ||
67 | void dispc_save_context(void); | ||
68 | void dispc_restore_context(void); | ||
69 | |||
70 | +void dispc_enable_sidle(void); | ||
71 | +void dispc_disable_sidle(void); | ||
72 | + | ||
73 | void dispc_lcd_enable_signal_polarity(bool act_high); | ||
74 | void dispc_lcd_enable_signal(bool enable); | ||
75 | void dispc_pck_free_enable(bool enable); | ||
76 | -- | ||
77 | 1.5.6.5 | ||
78 | |||