diff options
author | Torbjorn Svensson <torbjorn.x.svensson@stericsson.com> | 2012-01-13 15:55:34 +0100 |
---|---|---|
committer | Philippe Langlais <philippe.langlais@stericsson.com> | 2012-05-22 11:04:27 +0200 |
commit | 640a92c3f6e24fff4a0f84c87da63957e371046d (patch) | |
tree | 84d0b328114713207ad73bde5679bc65cd2dc612 | |
parent | 5ce10cd55898e8dba21d40cad3e911c8ffa52140 (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.c | 19 |
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)); } |