diff options
| author | Sree Sesha Aravind Vadrevu <svadrevu@codeaurora.org> | 2013-03-07 10:31:11 -0800 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:15:10 -0700 |
| commit | d9bbab152d3d04007185b899e84495af1b7ee1c7 (patch) | |
| tree | 5992762825973acab2ce2cc4adc442db7292f587 | |
| parent | 156bdf7fe197bbf3ff34bba557636aab2590fc35 (diff) | |
msm: mdss: Change writeback CSC programming
Register programming for writeback post processing has to be
changed to support different versions of MDP
CRs-fixed: 459593
Change-Id: If6b47d9f05236ec3d8c4a71a774fdf2ffdb578dc
Signed-off-by: Sree Sesha Aravind Vadrevu <svadrevu@codeaurora.org>
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_pp.c | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp_pp.c b/drivers/video/fbdev/msm/mdss_mdp_pp.c index 59d760b3f893..aa223a176898 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_pp.c +++ b/drivers/video/fbdev/msm/mdss_mdp_pp.c @@ -193,17 +193,24 @@ int mdss_mdp_csc_setup_data(u32 block, u32 blk_idx, u32 tbl_idx, struct mdp_csc_cfg *data) { int i, ret = 0; - u32 *off, base, val = 0; + char __iomem *base, *off; + u32 val = 0; + struct mdss_data_type *mdata; + struct mdss_mdp_pipe *pipe; + struct mdss_mdp_ctl *ctl; + if (data == NULL) { pr_err("no csc matrix specified\n"); return -EINVAL; } + mdata = mdss_mdp_get_mdata(); switch (block) { case MDSS_MDP_BLOCK_SSPP: - if (blk_idx < MDSS_MDP_SSPP_RGB0) { - base = MDSS_MDP_REG_SSPP_OFFSET(blk_idx); + if (blk_idx < mdata->nvig_pipes) { + pipe = mdata->vig_pipes + blk_idx; + base = pipe->base; if (tbl_idx == 1) base += MDSS_MDP_REG_VIG_CSC_1_BASE; else @@ -213,9 +220,9 @@ int mdss_mdp_csc_setup_data(u32 block, u32 blk_idx, u32 tbl_idx, } break; case MDSS_MDP_BLOCK_WB: - if (blk_idx < MDSS_MDP_MAX_WRITEBACK) { - base = MDSS_MDP_REG_WB_OFFSET(blk_idx) + - MDSS_MDP_REG_WB_CSC_BASE; + if (blk_idx < mdata->nctl) { + ctl = mdata->ctl_off + blk_idx; + base = ctl->wb_base + MDSS_MDP_REG_WB_CSC_BASE; } else { ret = -EINVAL; } @@ -229,34 +236,33 @@ int mdss_mdp_csc_setup_data(u32 block, u32 blk_idx, u32 tbl_idx, return ret; } - off = (u32 *) (base + CSC_MV_OFF); + off = base + CSC_MV_OFF; for (i = 0; i < 9; i++) { if (i & 0x1) { val |= data->csc_mv[i] << 16; - MDSS_MDP_REG_WRITE(off, val); - off++; + writel_relaxed(val, off); + off += sizeof(u32 *); } else { val = data->csc_mv[i]; } } - MDSS_MDP_REG_WRITE(off, val); /* COEFF_33 */ + writel_relaxed(val, off); /* COEFF_33 */ - off = (u32 *) (base + CSC_BV_OFF); + off = base + CSC_BV_OFF; for (i = 0; i < 3; i++) { - MDSS_MDP_REG_WRITE(off, data->csc_pre_bv[i]); - MDSS_MDP_REG_WRITE((u32 *)(((u32)off) + CSC_POST_OFF), - data->csc_post_bv[i]); - off++; + writel_relaxed(data->csc_pre_bv[i], off); + writel_relaxed(data->csc_post_bv[i], off + CSC_POST_OFF); + off += sizeof(u32 *); } - off = (u32 *) (base + CSC_LV_OFF); + off = base + CSC_LV_OFF; for (i = 0; i < 6; i += 2) { val = (data->csc_pre_lv[i] << 8) | data->csc_pre_lv[i+1]; - MDSS_MDP_REG_WRITE(off, val); + writel_relaxed(val, off); val = (data->csc_post_lv[i] << 8) | data->csc_post_lv[i+1]; - MDSS_MDP_REG_WRITE((u32 *)(((u32)off) + CSC_POST_OFF), val); - off++; + writel_relaxed(val, off + CSC_POST_OFF); + off += sizeof(u32 *); } return ret; |
