summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJimmy Rubin <jimmy.rubin@stericsson.com>2011-09-22 15:25:43 +0200
committerRobert Marklund <robert.marklund@stericsson.com>2011-10-05 12:59:26 +0200
commitf253c03720421211c8bbbdc9710cd78505a7fc86 (patch)
treea289e6c02b242b27355b01ad4e98ea16d0f7042a
parent347573f49beebc4f4b6480369bb3a337592f8f74 (diff)
video: mcde: Change timing for DPI formatter
Uses ACTIVE_VIDEO as frame interrupt generation event instead of VSYNC ST-Ericsson ID: 359538 ST-Ericsson Linux next: NA ST-Ericsson FOSS-OUT ID: Trivial Signed-off-by: Jimmy Rubin <jimmy.rubin@stericsson.com> Change-Id: I629651172bcbf7094141674c9ccf1655d54939ba Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/31973 Tested-by: Jimmy RUBIN <jimmy.rubin@stericsson.com> Reviewed-by: Marcus LORENTZON <marcus.xm.lorentzon@stericsson.com> Reviewed-by: Fabien DESSENNE <fabien.dessenne@stericsson.com> Reviewed-by: Per PERSSON <per.xb.persson@stericsson.com> Reviewed-by: Jonas ABERG <jonas.aberg@stericsson.com>
-rw-r--r--drivers/video/mcde/mcde_hw.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/drivers/video/mcde/mcde_hw.c b/drivers/video/mcde/mcde_hw.c
index 320b53f51c9..c85bee1872f 100644
--- a/drivers/video/mcde/mcde_hw.c
+++ b/drivers/video/mcde/mcde_hw.c
@@ -1618,6 +1618,7 @@ static void disable_flow(struct mcde_chnl_state *chnl)
static void stop_channel(struct mcde_chnl_state *chnl)
{
const struct mcde_port *port = &chnl->port;
+ bool dpi_lcd_mode;
dev_vdbg(&mcde_dev->dev, "%s\n", __func__);
@@ -1639,9 +1640,13 @@ static void stop_channel(struct mcde_chnl_state *chnl)
disable_flow(chnl);
/*
* Needs to manually trigger VCOMP after the channel is
- * disabled for video mode.
+ * disabled. For all channels using video mode
+ * except for dpi lcd.
*/
- if (chnl->port.update_auto_trig)
+ dpi_lcd_mode = (port->type == MCDE_PORTTYPE_DPI &&
+ !chnl->port.phy.dpi.tv_mode);
+
+ if (chnl->port.update_auto_trig && !dpi_lcd_mode)
mcde_wreg(MCDE_SISPP, 1 << chnl->id);
}
@@ -1984,6 +1989,30 @@ void update_channel_registers(enum mcde_chnl chnl_id, struct chnl_regs *regs,
fidx * MCDE_DSIVID0DELAY1_GROUPOFFSET,
MCDE_DSIVID0DELAY1_TEREQDEL(0) |
MCDE_DSIVID0DELAY1_FRAMESTARTDEL(0));
+ } else if (port->type == MCDE_PORTTYPE_DPI &&
+ !port->phy.dpi.tv_mode) {
+ /* DPI LCD Mode */
+ if (chnl_id == MCDE_CHNL_A) {
+ mcde_wreg(MCDE_SYNCHCONFA,
+ MCDE_SYNCHCONFA_HWREQVEVENT_ENUM(
+ ACTIVE_VIDEO) |
+ MCDE_SYNCHCONFA_HWREQVCNT(
+ video_mode->yres - 1) |
+ MCDE_SYNCHCONFA_SWINTVEVENT_ENUM(
+ ACTIVE_VIDEO) |
+ MCDE_SYNCHCONFA_SWINTVCNT(
+ video_mode->yres - 1));
+ } else if (chnl_id == MCDE_CHNL_B) {
+ mcde_wreg(MCDE_SYNCHCONFB,
+ MCDE_SYNCHCONFB_HWREQVEVENT_ENUM(
+ ACTIVE_VIDEO) |
+ MCDE_SYNCHCONFB_HWREQVCNT(
+ video_mode->yres - 1) |
+ MCDE_SYNCHCONFB_SWINTVEVENT_ENUM(
+ ACTIVE_VIDEO) |
+ MCDE_SYNCHCONFB_SWINTVCNT(
+ video_mode->yres - 1));
+ }
}
if (regs->roten) {