aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video
diff options
context:
space:
mode:
authorArchit Taneja <archit@ti.com>2013-03-26 09:45:25 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2013-04-10 08:02:53 -0400
commitd0df9a2c8f856b290407dec1069eb320b4bbb705 (patch)
tree9688f820a5cc9775e491710d1869ae00a75ec0ec /drivers/video
parentc35eeb2e80a4dd3aa1a4ceac8f74f4c4e61f6463 (diff)
OMAPDSS: DISPC: Revert to older DISPC Smart Standby mechanism for OMAP5
DISPC on OMAP5 has a more optimised mechanism of asserting Mstandby to achieve more power savings when DISPC is configured in Smart Standby mode. This mechanism leads to underflows when multiple DISPC pipes are enabled. There is a register field which can let us revert to the older mechanism of asserting Mstandby. Configure this field to prevent underflows. Signed-off-by: Archit Taneja <archit@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'drivers/video')
-rw-r--r--drivers/video/omap2/dss/dispc.c7
-rw-r--r--drivers/video/omap2/dss/dispc.h1
2 files changed, 8 insertions, 0 deletions
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
index e7ed1f7bb302..ea9a8481059c 100644
--- a/drivers/video/omap2/dss/dispc.c
+++ b/drivers/video/omap2/dss/dispc.c
@@ -87,6 +87,9 @@ struct dispc_features {
87 87
88 /* no DISPC_IRQ_FRAMEDONETV on this SoC */ 88 /* no DISPC_IRQ_FRAMEDONETV on this SoC */
89 bool no_framedone_tv:1; 89 bool no_framedone_tv:1;
90
91 /* revert to the OMAP4 mechanism of DISPC Smart Standby operation */
92 bool mstandby_workaround:1;
90}; 93};
91 94
92#define DISPC_MAX_NR_FIFOS 5 95#define DISPC_MAX_NR_FIFOS 5
@@ -3490,6 +3493,9 @@ static void _omap_dispc_initial_config(void)
3490 dispc_configure_burst_sizes(); 3493 dispc_configure_burst_sizes();
3491 3494
3492 dispc_ovl_enable_zorder_planes(); 3495 dispc_ovl_enable_zorder_planes();
3496
3497 if (dispc.feat->mstandby_workaround)
3498 REG_FLD_MOD(DISPC_MSTANDBY_CTRL, 1, 0, 0);
3493} 3499}
3494 3500
3495static const struct dispc_features omap24xx_dispc_feats __initconst = { 3501static const struct dispc_features omap24xx_dispc_feats __initconst = {
@@ -3584,6 +3590,7 @@ static const struct dispc_features omap54xx_dispc_feats __initconst = {
3584 .calc_core_clk = calc_core_clk_44xx, 3590 .calc_core_clk = calc_core_clk_44xx,
3585 .num_fifos = 5, 3591 .num_fifos = 5,
3586 .gfx_fifo_workaround = true, 3592 .gfx_fifo_workaround = true,
3593 .mstandby_workaround = true,
3587}; 3594};
3588 3595
3589static int __init dispc_init_features(struct platform_device *pdev) 3596static int __init dispc_init_features(struct platform_device *pdev)
diff --git a/drivers/video/omap2/dss/dispc.h b/drivers/video/omap2/dss/dispc.h
index 222363c6e623..de4863d21ab7 100644
--- a/drivers/video/omap2/dss/dispc.h
+++ b/drivers/video/omap2/dss/dispc.h
@@ -39,6 +39,7 @@
39#define DISPC_GLOBAL_BUFFER 0x0800 39#define DISPC_GLOBAL_BUFFER 0x0800
40#define DISPC_CONTROL3 0x0848 40#define DISPC_CONTROL3 0x0848
41#define DISPC_CONFIG3 0x084C 41#define DISPC_CONFIG3 0x084C
42#define DISPC_MSTANDBY_CTRL 0x0858
42 43
43/* DISPC overlay registers */ 44/* DISPC overlay registers */
44#define DISPC_OVL_BA0(n) (DISPC_OVL_BASE(n) + \ 45#define DISPC_OVL_BA0(n) (DISPC_OVL_BASE(n) + \