diff options
author | Jimmy Rubin <jimmy.rubin@stericsson.com> | 2011-09-22 15:25:43 +0200 |
---|---|---|
committer | Robert Marklund <robert.marklund@stericsson.com> | 2011-10-05 12:59:26 +0200 |
commit | f253c03720421211c8bbbdc9710cd78505a7fc86 (patch) | |
tree | a289e6c02b242b27355b01ad4e98ea16d0f7042a | |
parent | 347573f49beebc4f4b6480369bb3a337592f8f74 (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.c | 33 |
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) { |