summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorbjorn Svensson <torbjorn.x.svensson@stericsson.com>2012-01-13 15:55:34 +0100
committerPhilippe Langlais <philippe.langlais@stericsson.com>2012-05-22 11:04:27 +0200
commit640a92c3f6e24fff4a0f84c87da63957e371046d (patch)
tree84d0b328114713207ad73bde5679bc65cd2dc612
parent5ce10cd55898e8dba21d40cad3e911c8ffa52140 (diff)
video: mcde: optimized stripe calculation
This patch adds stripe calculation, based on the rotbufsize and display panel width. ST-Ericsson ID: 373680 ST-Ericsson FOSS-OUT ID: Trivial ST-Ericsson Linux next: NA Change-Id: I3e14d49a97cc635c244950cd40ceb9584588c736 Signed-off-by: Torbjorn Svensson <torbjorn.x.svensson@stericsson.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/45516 Reviewed-by: Per PERSSON <per.xb.persson@stericsson.com> Reviewed-by: QATOOLS Reviewed-by: QABUILD
-rw-r--r--drivers/video/mcde/mcde_hw.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/drivers/video/mcde/mcde_hw.c b/drivers/video/mcde/mcde_hw.c
index afa53e90712..7f86028dc49 100644
--- a/drivers/video/mcde/mcde_hw.c
+++ b/drivers/video/mcde/mcde_hw.c
@@ -2246,6 +2246,23 @@ void update_channel_registers(enum mcde_chnl chnl_id, struct chnl_regs *regs,
}
if (regs->roten) {
+ u32 stripwidth;
+ u32 stripwidth_val;
+
+ /* calc strip width, 32 bits used internally */
+ stripwidth = regs->rotbufsize / (video_mode->yres * 4);
+ if (stripwidth >= 32)
+ stripwidth_val = MCDE_ROTACONF_STRIP_WIDTH_32PIX;
+ else if (stripwidth >= 16)
+ stripwidth_val = MCDE_ROTACONF_STRIP_WIDTH_16PIX;
+ else if (stripwidth >= 8)
+ stripwidth_val = MCDE_ROTACONF_STRIP_WIDTH_8PIX;
+ else if (stripwidth >= 4)
+ stripwidth_val = MCDE_ROTACONF_STRIP_WIDTH_4PIX;
+ else
+ stripwidth_val = MCDE_ROTACONF_STRIP_WIDTH_2PIX;
+ dev_vdbg(&mcde_dev->dev, "%s stripwidth=%d\n", __func__,
+ 1 << (stripwidth_val + 1));
mcde_wreg(MCDE_ROTADD0A + chnl_id * MCDE_ROTADD0A_GROUPOFFSET,
regs->rotbuf1);
mcde_wreg(MCDE_ROTADD1A + chnl_id * MCDE_ROTADD1A_GROUPOFFSET,
@@ -2253,7 +2270,7 @@ void update_channel_registers(enum mcde_chnl chnl_id, struct chnl_regs *regs,
mcde_wreg(MCDE_ROTACONF + chnl_id * MCDE_ROTACONF_GROUPOFFSET,
MCDE_ROTACONF_ROTBURSTSIZE_ENUM(HW_8W) |
MCDE_ROTACONF_ROTDIR(regs->rotdir) |
- MCDE_ROTACONF_STRIP_WIDTH_ENUM(16PIX) |
+ MCDE_ROTACONF_STRIP_WIDTH(stripwidth_val) |
MCDE_ROTACONF_RD_MAXOUT_ENUM(4_REQ) |
MCDE_ROTACONF_WR_MAXOUT_ENUM(8_REQ));
}