diff --git a/drivers/video/fbdev/msm/mdss_dsi_panel.c b/drivers/video/fbdev/msm/mdss_dsi_panel.c index a009314f87f4..514ee605b574 100644 --- a/drivers/video/fbdev/msm/mdss_dsi_panel.c +++ b/drivers/video/fbdev/msm/mdss_dsi_panel.c @@ -380,12 +380,10 @@ static struct dsi_cmd_desc set_col_page_addr_cmd[] = { }; static void mdss_dsi_send_col_page_addr(struct mdss_dsi_ctrl_pdata *ctrl, - struct mdss_rect *roi) + struct mdss_rect *roi, int unicast) { struct dcs_cmd_req cmdreq; - roi = &ctrl->roi; - caset[1] = (((roi->x) & 0xFF00) >> 8); caset[2] = (((roi->x) & 0xFF)); caset[3] = (((roi->x - 1 + roi->w) & 0xFF00) >> 8); @@ -400,7 +398,9 @@ static void mdss_dsi_send_col_page_addr(struct mdss_dsi_ctrl_pdata *ctrl, memset(&cmdreq, 0, sizeof(cmdreq)); cmdreq.cmds_cnt = 2; - cmdreq.flags = CMD_REQ_COMMIT | CMD_CLK_CTRL | CMD_REQ_UNICAST; + cmdreq.flags = CMD_REQ_COMMIT | CMD_CLK_CTRL; + if (unicast) + cmdreq.flags |= CMD_REQ_UNICAST; cmdreq.rlen = 0; cmdreq.cb = NULL; @@ -411,7 +411,7 @@ static void mdss_dsi_send_col_page_addr(struct mdss_dsi_ctrl_pdata *ctrl, static int mdss_dsi_set_col_page_addr(struct mdss_panel_data *pdata) { struct mdss_panel_info *pinfo; - struct mdss_rect roi; + struct mdss_rect roi = {0}; struct mdss_rect *p_roi; struct mdss_rect *c_roi; struct mdss_dsi_ctrl_pdata *ctrl = NULL; @@ -471,7 +471,7 @@ static int mdss_dsi_set_col_page_addr(struct mdss_panel_data *pdata) if (pinfo->dcs_cmd_by_left) ctrl = mdss_dsi_get_ctrl_by_index( DSI_CTRL_LEFT); - mdss_dsi_send_col_page_addr(ctrl, &roi); + mdss_dsi_send_col_page_addr(ctrl, &roi, 0); } else { /* * when sync_wait_broadcast enabled, @@ -483,11 +483,33 @@ static int mdss_dsi_set_col_page_addr(struct mdss_panel_data *pdata) goto end; if (mdss_dsi_is_left_ctrl(ctrl)) { - mdss_dsi_send_col_page_addr(ctrl, &ctrl->roi); - mdss_dsi_send_col_page_addr(other, &other->roi); + if (pinfo->partial_update_roi_merge) { + /* + * roi is the one after merged + * to dsi-1 only + */ + mdss_dsi_send_col_page_addr(other, + &roi, 0); + } else { + mdss_dsi_send_col_page_addr(ctrl, + &ctrl->roi, 1); + mdss_dsi_send_col_page_addr(other, + &other->roi, 1); + } } else { - mdss_dsi_send_col_page_addr(other, &other->roi); - mdss_dsi_send_col_page_addr(ctrl, &ctrl->roi); + if (pinfo->partial_update_roi_merge) { + /* + * roi is the one after merged + * to dsi-1 only + */ + mdss_dsi_send_col_page_addr(ctrl, + &roi, 0); + } else { + mdss_dsi_send_col_page_addr(other, + &other->roi, 1); + mdss_dsi_send_col_page_addr(ctrl, + &ctrl->roi, 1); + } } } }