diff options
| author | Shalabh Jain <shalabhj@codeaurora.org> | 2013-06-10 13:40:58 -0700 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:18:34 -0700 |
| commit | 4da22d56c13dcd4e6ea25fb7352eaa2b21907b2e (patch) | |
| tree | 6a508897c72ac987e2859872f73e5326c1a045d8 | |
| parent | 792357638708f9096f4947dbd7679b7703dd1f4a (diff) | |
msm: mdss: Add support for additional pipes of apq8084 MDSS
APQ8084 MDSS has 2 extra pipes compare to MDSS of msm8974. This change
adds support for programming these new pipes and corresponding mixer and
control pipeline changes.
Change-Id: I1406263de703719661789d2f8c6f7c06fc810919
Signed-off-by: Shalabh Jain <shalabhj@codeaurora.org>
Signed-off-by: Ujwal Patel <ujwalp@codeaurora.org>
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp.c | 116 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp.h | 5 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_ctl.c | 18 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_hwio.h | 42 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_pipe.c | 41 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_util.c | 8 |
6 files changed, 140 insertions, 90 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp.c b/drivers/video/fbdev/msm/mdss_mdp.c index 0086a3556182..f2a0e6a7dba6 100644 --- a/drivers/video/fbdev/msm/mdss_mdp.c +++ b/drivers/video/fbdev/msm/mdss_mdp.c @@ -68,6 +68,10 @@ struct msm_mdp_interface mdp5 = { .fb_stride = mdss_mdp_fb_stride, }; +#define DEFAULT_TOTAL_RGB_PIPES 3 +#define DEFAULT_TOTAL_VIG_PIPES 3 +#define DEFAULT_TOTAL_DMA_PIPES 2 + #define IB_QUOTA 800000000 #define AB_QUOTA 800000000 @@ -1149,9 +1153,9 @@ static int mdss_mdp_parse_dt(struct platform_device *pdev) static int mdss_mdp_parse_dt_pipe(struct platform_device *pdev) { - u32 npipes, off; + u32 npipes, dma_off; int rc = 0; - u32 nids = 0; + u32 nids = 0, setup_cnt = 0, len; u32 *offsets = NULL, *ftch_id = NULL; struct mdss_data_type *mdata = platform_get_drvdata(pdev); @@ -1179,17 +1183,41 @@ static int mdss_mdp_parse_dt_pipe(struct platform_device *pdev) offsets = kzalloc(sizeof(u32) * npipes, GFP_KERNEL); if (!offsets) { - pr_err("no mem assigned: kzalloc fail\n"); + pr_err("no mem assigned for offsets: kzalloc fail\n"); return -ENOMEM; } ftch_id = kzalloc(sizeof(u32) * nids, GFP_KERNEL); if (!ftch_id) { - pr_err("no mem assigned: kzalloc fail\n"); + pr_err("no mem assigned for ftch_id: kzalloc fail\n"); rc = -ENOMEM; goto ftch_alloc_fail; } + mdata->vig_pipes = devm_kzalloc(&mdata->pdev->dev, + sizeof(struct mdss_mdp_pipe) * mdata->nvig_pipes, GFP_KERNEL); + if (!mdata->vig_pipes) { + pr_err("no mem for vig_pipes: kzalloc fail\n"); + rc = -ENOMEM; + goto vig_alloc_fail; + } + + mdata->rgb_pipes = devm_kzalloc(&mdata->pdev->dev, + sizeof(struct mdss_mdp_pipe) * mdata->nrgb_pipes, GFP_KERNEL); + if (!mdata->rgb_pipes) { + pr_err("no mem for rgb_pipes: kzalloc fail\n"); + rc = -ENOMEM; + goto rgb_alloc_fail; + } + + mdata->dma_pipes = devm_kzalloc(&mdata->pdev->dev, + sizeof(struct mdss_mdp_pipe) * mdata->ndma_pipes, GFP_KERNEL); + if (!mdata->dma_pipes) { + pr_err("no mem for dma_pipes: kzalloc fail\n"); + rc = -ENOMEM; + goto dma_alloc_fail; + } + rc = mdss_mdp_parse_dt_handler(pdev, "qcom,mdss-pipe-vig-fetch-id", ftch_id, mdata->nvig_pipes); if (rc) @@ -1198,47 +1226,91 @@ static int mdss_mdp_parse_dt_pipe(struct platform_device *pdev) rc = mdss_mdp_parse_dt_handler(pdev, "qcom,mdss-pipe-vig-off", offsets, mdata->nvig_pipes); if (rc) - goto parse_done; + goto parse_fail; - rc = mdss_mdp_pipe_addr_setup(mdata, offsets, ftch_id, - MDSS_MDP_PIPE_TYPE_VIG, MDSS_MDP_SSPP_VIG0, mdata->nvig_pipes); + len = min_t(int, DEFAULT_TOTAL_VIG_PIPES, (int)mdata->nvig_pipes); + rc = mdss_mdp_pipe_addr_setup(mdata, mdata->vig_pipes, offsets, ftch_id, + MDSS_MDP_PIPE_TYPE_VIG, MDSS_MDP_SSPP_VIG0, len); if (rc) - goto parse_done; + goto parse_fail; + + setup_cnt += len; rc = mdss_mdp_parse_dt_handler(pdev, "qcom,mdss-pipe-rgb-fetch-id", ftch_id + mdata->nvig_pipes, mdata->nrgb_pipes); if (rc) - goto parse_done; + goto parse_fail; rc = mdss_mdp_parse_dt_handler(pdev, "qcom,mdss-pipe-rgb-off", offsets + mdata->nvig_pipes, mdata->nrgb_pipes); if (rc) - goto parse_done; + goto parse_fail; - rc = mdss_mdp_pipe_addr_setup(mdata, offsets + mdata->nvig_pipes, - ftch_id + mdata->nvig_pipes, MDSS_MDP_PIPE_TYPE_RGB, - MDSS_MDP_SSPP_RGB0, mdata->nrgb_pipes); + len = min_t(int, DEFAULT_TOTAL_RGB_PIPES, (int)mdata->nrgb_pipes); + rc = mdss_mdp_pipe_addr_setup(mdata, mdata->rgb_pipes, + offsets + mdata->nvig_pipes, ftch_id + mdata->nvig_pipes, + MDSS_MDP_PIPE_TYPE_RGB, MDSS_MDP_SSPP_RGB0, len); if (rc) - goto parse_done; + goto parse_fail; - off = mdata->nvig_pipes + mdata->nrgb_pipes; + setup_cnt += len; + dma_off = mdata->nvig_pipes + mdata->nrgb_pipes; rc = mdss_mdp_parse_dt_handler(pdev, "qcom,mdss-pipe-dma-fetch-id", - ftch_id + off, mdata->ndma_pipes); + ftch_id + dma_off, mdata->ndma_pipes); if (rc) - goto parse_done; + goto parse_fail; rc = mdss_mdp_parse_dt_handler(pdev, "qcom,mdss-pipe-dma-off", - offsets + off, mdata->ndma_pipes); + offsets + dma_off, mdata->ndma_pipes); if (rc) - goto parse_done; + goto parse_fail; - rc = mdss_mdp_pipe_addr_setup(mdata, offsets + off, ftch_id + off, - MDSS_MDP_PIPE_TYPE_DMA, MDSS_MDP_SSPP_DMA0, mdata->ndma_pipes); + len = mdata->ndma_pipes; + rc = mdss_mdp_pipe_addr_setup(mdata, mdata->dma_pipes, + offsets + dma_off, ftch_id + dma_off, MDSS_MDP_PIPE_TYPE_DMA, + MDSS_MDP_SSPP_DMA0, len); if (rc) - goto parse_done; + goto parse_fail; + setup_cnt += len; + + if (mdata->nvig_pipes > DEFAULT_TOTAL_VIG_PIPES) { + rc = mdss_mdp_pipe_addr_setup(mdata, + mdata->vig_pipes + DEFAULT_TOTAL_VIG_PIPES, + offsets + DEFAULT_TOTAL_VIG_PIPES, + ftch_id + DEFAULT_TOTAL_VIG_PIPES, + MDSS_MDP_PIPE_TYPE_VIG, setup_cnt, + mdata->nvig_pipes - DEFAULT_TOTAL_VIG_PIPES); + if (rc) + goto parse_fail; + + setup_cnt += mdata->nvig_pipes - DEFAULT_TOTAL_VIG_PIPES; + } + + if (mdata->nrgb_pipes > DEFAULT_TOTAL_RGB_PIPES) { + rc = mdss_mdp_pipe_addr_setup(mdata, + mdata->rgb_pipes + DEFAULT_TOTAL_RGB_PIPES, + offsets + mdata->nvig_pipes + DEFAULT_TOTAL_RGB_PIPES, + ftch_id + mdata->nvig_pipes + DEFAULT_TOTAL_RGB_PIPES, + MDSS_MDP_PIPE_TYPE_RGB, setup_cnt, + mdata->nrgb_pipes - DEFAULT_TOTAL_RGB_PIPES); + if (rc) + goto parse_fail; + + setup_cnt += mdata->nrgb_pipes - DEFAULT_TOTAL_RGB_PIPES; + } + + goto parse_done; + +parse_fail: + kfree(mdata->dma_pipes); +dma_alloc_fail: + kfree(mdata->rgb_pipes); +rgb_alloc_fail: + kfree(mdata->vig_pipes); parse_done: +vig_alloc_fail: kfree(ftch_id); ftch_alloc_fail: kfree(offsets); diff --git a/drivers/video/fbdev/msm/mdss_mdp.h b/drivers/video/fbdev/msm/mdss_mdp.h index 7cae18ca812d..240ba52ff928 100644 --- a/drivers/video/fbdev/msm/mdss_mdp.h +++ b/drivers/video/fbdev/msm/mdss_mdp.h @@ -525,8 +525,9 @@ int mdss_mdp_smp_reserve(struct mdss_mdp_pipe *pipe); void mdss_mdp_smp_unreserve(struct mdss_mdp_pipe *pipe); void mdss_mdp_smp_release(struct mdss_mdp_pipe *pipe); -int mdss_mdp_pipe_addr_setup(struct mdss_data_type *mdata, u32 *offsets, - u32 *ftch_y_id, u32 type, u32 num_base, u32 len); +int mdss_mdp_pipe_addr_setup(struct mdss_data_type *mdata, + struct mdss_mdp_pipe *head, u32 *offsets, u32 *ftch_y_id, u32 type, + u32 num_base, u32 len); int mdss_mdp_mixer_addr_setup(struct mdss_data_type *mdata, u32 *mixer_offsets, u32 *dspp_offsets, u32 *pingpong_offsets, u32 type, u32 len); int mdss_mdp_ctl_addr_setup(struct mdss_data_type *mdata, u32 *ctl_offsets, diff --git a/drivers/video/fbdev/msm/mdss_mdp_ctl.c b/drivers/video/fbdev/msm/mdss_mdp_ctl.c index 86f632c6a92c..fe76b4b9e2d1 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_ctl.c +++ b/drivers/video/fbdev/msm/mdss_mdp_ctl.c @@ -1119,7 +1119,13 @@ static int mdss_mdp_mixer_setup(struct mdss_mdp_ctl *ctl, if (pipe == NULL) { mixercfg = MDSS_MDP_LM_BORDER_COLOR; } else { - mixercfg = 1 << (3 * pipe->num); + if (pipe->num == MDSS_MDP_SSPP_VIG3 || + pipe->num == MDSS_MDP_SSPP_RGB3) { + /* Add 2 to account for Cursor & Border bits */ + mixercfg = 1 << ((3 * pipe->num)+2); + } else { + mixercfg = 1 << (3 * pipe->num); + } if (pipe->src_fmt->alpha_enable) bgalpha = 1; secure = pipe->flags & MDP_SECURE_OVERLAY_SESSION; @@ -1187,7 +1193,10 @@ static int mdss_mdp_mixer_setup(struct mdss_mdp_ctl *ctl, pr_debug("mixer=%d mixer_cfg=%x\n", mixer->num, mixercfg); - ctl->flush_bits |= BIT(6) << mixer->num; /* LAYER_MIXER */ + if (mixer->num == MDSS_MDP_INTF_LAYERMIXER3) + ctl->flush_bits |= BIT(20); + else + ctl->flush_bits |= BIT(6) << mixer->num; mdp_mixer_write(mixer, MDSS_MDP_REG_LM_OP_MODE, blend_color_out); off = __mdss_mdp_ctl_get_mixer_off(mixer); @@ -1349,7 +1358,10 @@ int mdss_mdp_mixer_pipe_update(struct mdss_mdp_pipe *pipe, int params_changed) if (pipe->type == MDSS_MDP_PIPE_TYPE_DMA) ctl->flush_bits |= BIT(pipe->num) << 5; - else /* RGB/VIG pipe */ + else if (pipe->num == MDSS_MDP_SSPP_VIG3 || + pipe->num == MDSS_MDP_SSPP_RGB3) + ctl->flush_bits |= BIT(pipe->num) << 10; + else /* RGB/VIG 0-2 pipes */ ctl->flush_bits |= BIT(pipe->num); mutex_unlock(&ctl->lock); diff --git a/drivers/video/fbdev/msm/mdss_mdp_hwio.h b/drivers/video/fbdev/msm/mdss_mdp_hwio.h index 4779d20f41c1..8e5534d61a28 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_hwio.h +++ b/drivers/video/fbdev/msm/mdss_mdp_hwio.h @@ -23,6 +23,7 @@ #define MDSS_MDP_HW_REV_100 0x10000000 #define MDSS_MDP_HW_REV_102 0x10020000 +#define MDSS_MDP_HW_REV_103 0x10030000 #define MDSS_REG_HW_VERSION 0x0 #define MDSS_REG_HW_INTR_STATUS 0x10 @@ -57,15 +58,19 @@ #define MDSS_MDP_INTR_PING_PONG_0_DONE BIT(8) #define MDSS_MDP_INTR_PING_PONG_1_DONE BIT(9) #define MDSS_MDP_INTR_PING_PONG_2_DONE BIT(10) +#define MDSS_MDP_INTR_PING_PONG_3_DONE BIT(11) #define MDSS_MDP_INTR_PING_PONG_0_RD_PTR BIT(12) #define MDSS_MDP_INTR_PING_PONG_1_RD_PTR BIT(13) #define MDSS_MDP_INTR_PING_PONG_2_RD_PTR BIT(14) +#define MDSS_MDP_INTR_PING_PONG_3_RD_PTR BIT(15) #define MDSS_MDP_INTR_PING_PONG_0_WR_PTR BIT(16) #define MDSS_MDP_INTR_PING_PONG_1_WR_PTR BIT(17) #define MDSS_MDP_INTR_PING_PONG_2_WR_PTR BIT(18) +#define MDSS_MDP_INTR_PING_PONG_3_WR_PTR BIT(19) #define MDSS_MDP_INTR_PING_PONG_0_AUTOREFRESH_DONE BIT(20) #define MDSS_MDP_INTR_PING_PONG_1_AUTOREFRESH_DONE BIT(21) #define MDSS_MDP_INTR_PING_PONG_2_AUTOREFRESH_DONE BIT(22) +#define MDSS_MDP_INTR_PING_PONG_3_AUTOREFRESH_DONE BIT(23) #define MDSS_MDP_INTR_INTF_0_UNDERRUN BIT(24) #define MDSS_MDP_INTR_INTF_0_VSYNC BIT(25) #define MDSS_MDP_INTR_INTF_1_UNDERRUN BIT(26) @@ -97,6 +102,7 @@ enum mdss_mdp_ctl_index { MDSS_MDP_CTL2, MDSS_MDP_CTL3, MDSS_MDP_CTL4, + MDSS_MDP_CTL5, MDSS_MDP_MAX_CTL }; @@ -132,6 +138,8 @@ enum mdss_mdp_sspp_index { MDSS_MDP_SSPP_RGB2, MDSS_MDP_SSPP_DMA0, MDSS_MDP_SSPP_DMA1, + MDSS_MDP_SSPP_VIG3, + MDSS_MDP_SSPP_RGB3, MDSS_MDP_MAX_SSPP }; @@ -232,6 +240,7 @@ enum mdss_mdp_mixer_intf_index { MDSS_MDP_INTF_LAYERMIXER0, MDSS_MDP_INTF_LAYERMIXER1, MDSS_MDP_INTF_LAYERMIXER2, + MDSS_MDP_INTF_LAYERMIXER3, MDSS_MDP_INTF_MAX_LAYERMIXER, }; @@ -248,17 +257,10 @@ enum mdss_mdp_stage_index { MDSS_MDP_STAGE_1, MDSS_MDP_STAGE_2, MDSS_MDP_STAGE_3, + MDSS_MDP_STAGE_4, MDSS_MDP_MAX_STAGE }; -enum mdss_mdp_blend_index { - MDSS_MDP_BLEND_STAGE0, - MDSS_MDP_BLEND_STAGE1, - MDSS_MDP_BLEND_STAGE2, - MDSS_MDP_BLEND_STAGE3, - MDSS_MDP_MAX_BLEND_STAGE, -}; - #define MDSS_MDP_REG_LM_OFFSET(lm) (0x03200 + ((lm) * 0x400)) #define MDSS_MDP_REG_LM_OP_MODE 0x000 @@ -391,6 +393,7 @@ enum mdss_mdp_dspp_index { MDSS_MDP_DSPP0, MDSS_MDP_DSPP1, MDSS_MDP_DSPP2, + MDSS_MDP_DSPP3, MDSS_MDP_MAX_DSPP }; @@ -468,6 +471,7 @@ enum mdss_mdp_pingpong_index { MDSS_MDP_PINGPONG0, MDSS_MDP_PINGPONG1, MDSS_MDP_PINGPONG2, + MDSS_MDP_PINGPONG3, MDSS_MDP_MAX_PINGPONG }; @@ -494,28 +498,6 @@ enum mdss_mdp_pingpong_index { #define MDSS_MDP_SMP_MMB_BLOCKS 22 -enum mdss_mdp_smp_client_index { - MDSS_MDP_SMP_CLIENT_UNUSED, - MDSS_MDP_SMP_CLIENT_VIG0_FETCH_Y, - MDSS_MDP_SMP_CLIENT_VIG0_FETCH_CR, - MDSS_MDP_SMP_CLIENT_VIG0_FETCH_CB, - MDSS_MDP_SMP_CLIENT_VIG1_FETCH_Y, - MDSS_MDP_SMP_CLIENT_VIG1_FETCH_CR, - MDSS_MDP_SMP_CLIENT_VIG1_FETCH_CB, - MDSS_MDP_SMP_CLIENT_VIG2_FETCH_Y, - MDSS_MDP_SMP_CLIENT_VIG2_FETCH_CR, - MDSS_MDP_SMP_CLIENT_VIG2_FETCH_CB, - MDSS_MDP_SMP_CLIENT_DMA0_FETCH_Y, - MDSS_MDP_SMP_CLIENT_DMA0_FETCH_CR, - MDSS_MDP_SMP_CLIENT_DMA0_FETCH_CB, - MDSS_MDP_SMP_CLIENT_DMA1_FETCH_Y, - MDSS_MDP_SMP_CLIENT_DMA1_FETCH_CR, - MDSS_MDP_SMP_CLIENT_DMA1_FETCH_CB, - MDSS_MDP_SMP_CLIENT_RGB0_FETCH, - MDSS_MDP_SMP_CLIENT_RGB1_FETCH, - MDSS_MDP_SMP_CLIENT_RGB2_FETCH, -}; - #define MDSS_MDP_LP_MISR_SEL 0x450 #define MDSS_MDP_LP_MISR_CTRL_MDP 0x454 #define MDSS_MDP_LP_MISR_CTRL_HDMI 0x458 diff --git a/drivers/video/fbdev/msm/mdss_mdp_pipe.c b/drivers/video/fbdev/msm/mdss_mdp_pipe.c index 3b91ced058eb..c8f0f27e2321 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_pipe.c +++ b/drivers/video/fbdev/msm/mdss_mdp_pipe.c @@ -87,7 +87,7 @@ static void mdss_mdp_smp_mmb_free(unsigned long *smp, bool write) { if (!bitmap_empty(smp, SMP_MB_CNT)) { if (write) - mdss_mdp_smp_mmb_set(MDSS_MDP_SMP_CLIENT_UNUSED, smp); + mdss_mdp_smp_mmb_set(0, smp); bitmap_andnot(mdss_mdp_smp_mmb_pool, mdss_mdp_smp_mmb_pool, smp, SMP_MB_CNT); bitmap_zero(smp, SMP_MB_CNT); @@ -552,20 +552,15 @@ static int mdss_mdp_format_setup(struct mdss_mdp_pipe *pipe) return 0; } -int mdss_mdp_pipe_addr_setup(struct mdss_data_type *mdata, u32 *offsets, - u32 *ftch_id, u32 type, u32 num_base, u32 len) +int mdss_mdp_pipe_addr_setup(struct mdss_data_type *mdata, + struct mdss_mdp_pipe *head, u32 *offsets, u32 *ftch_id, u32 type, + u32 num_base, u32 len) { - struct mdss_mdp_pipe *head; u32 i; - int rc = 0; - head = devm_kzalloc(&mdata->pdev->dev, sizeof(struct mdss_mdp_pipe) * - len, GFP_KERNEL); - - if (!head) { - pr_err("unable to setup pipe type=%d :devm_kzalloc fail\n", - type); - return -ENOMEM; + if (!head || !mdata) { + pr_err("unable to setup pipe type=%d: invalid input\n", type); + return -EINVAL; } for (i = 0; i < len; i++) { @@ -576,27 +571,7 @@ int mdss_mdp_pipe_addr_setup(struct mdss_data_type *mdata, u32 *offsets, head[i].base = mdata->mdp_base + offsets[i]; } - switch (type) { - - case MDSS_MDP_PIPE_TYPE_VIG: - mdata->vig_pipes = head; - break; - - case MDSS_MDP_PIPE_TYPE_RGB: - mdata->rgb_pipes = head; - break; - - case MDSS_MDP_PIPE_TYPE_DMA: - mdata->dma_pipes = head; - break; - - default: - pr_err("Invalid pipe type=%d\n", type); - rc = -EINVAL; - break; - } - - return rc; + return 0; } static int mdss_mdp_src_addr_setup(struct mdss_mdp_pipe *pipe, diff --git a/drivers/video/fbdev/msm/mdss_mdp_util.c b/drivers/video/fbdev/msm/mdss_mdp_util.c index 8fa081d59c8c..788511b3ef53 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_util.c +++ b/drivers/video/fbdev/msm/mdss_mdp_util.c @@ -42,9 +42,11 @@ enum { MDP_INTR_PING_PONG_0, MDP_INTR_PING_PONG_1, MDP_INTR_PING_PONG_2, + MDP_INTR_PING_PONG_3, MDP_INTR_PING_PONG_0_RD_PTR, MDP_INTR_PING_PONG_1_RD_PTR, MDP_INTR_PING_PONG_2_RD_PTR, + MDP_INTR_PING_PONG_3_RD_PTR, MDP_INTR_WB_0, MDP_INTR_WB_1, MDP_INTR_WB_2, @@ -164,6 +166,9 @@ irqreturn_t mdss_mdp_isr(int irq, void *ptr) if (isr & MDSS_MDP_INTR_PING_PONG_2_DONE) mdss_mdp_intr_done(MDP_INTR_PING_PONG_2); + if (isr & MDSS_MDP_INTR_PING_PONG_3_DONE) + mdss_mdp_intr_done(MDP_INTR_PING_PONG_3); + if (isr & MDSS_MDP_INTR_PING_PONG_0_RD_PTR) mdss_mdp_intr_done(MDP_INTR_PING_PONG_0_RD_PTR); @@ -173,6 +178,9 @@ irqreturn_t mdss_mdp_isr(int irq, void *ptr) if (isr & MDSS_MDP_INTR_PING_PONG_2_RD_PTR) mdss_mdp_intr_done(MDP_INTR_PING_PONG_2_RD_PTR); + if (isr & MDSS_MDP_INTR_PING_PONG_3_RD_PTR) + mdss_mdp_intr_done(MDP_INTR_PING_PONG_3_RD_PTR); + if (isr & MDSS_MDP_INTR_INTF_0_VSYNC) { mdss_mdp_intr_done(MDP_INTR_VSYNC_INTF_0); mdss_misr_crc_collect(mdata, DISPLAY_MISR_EDP); |
