Loading drivers/video/msm/mdss/mdss_mdp_ctl.c +3 −10 Original line number Diff line number Diff line Loading @@ -4004,22 +4004,15 @@ int mdss_mdp_async_ctl_flush(struct msm_fb_data_type *mfd, { struct mdss_overlay_private *mdp5_data = mfd_to_mdp5_data(mfd); struct mdss_mdp_ctl *ctl = mdp5_data->ctl; struct mdss_mdp_ctl *sctl = NULL; struct mdss_mdp_ctl *sctl = mdss_mdp_get_split_ctl(ctl); int ret = 0; mutex_lock(&ctl->flush_lock); mdss_mdp_ctl_write(ctl, MDSS_MDP_REG_CTL_FLUSH, flush_bits); if ((!ctl->split_flush_en) && is_split_lm(mfd)) { sctl = mdss_mdp_get_split_ctl(ctl); if (!sctl) { pr_err("not able to get the other ctl\n"); ret = -EINVAL; goto end; } if ((!ctl->split_flush_en) && sctl) mdss_mdp_ctl_write(sctl, MDSS_MDP_REG_CTL_FLUSH, flush_bits); } end: mutex_unlock(&ctl->flush_lock); return ret; } Loading drivers/video/msm/mdss/mdss_mdp_overlay.c +29 −0 Original line number Diff line number Diff line Loading @@ -4368,6 +4368,33 @@ error: return ctl; } static void mdss_mdp_set_lm_flag(struct msm_fb_data_type *mfd) { u32 width; struct mdss_data_type *mdata; /* if lm_widths are set, the split_mode would have been set */ if (mfd->panel_info->lm_widths[0] && mfd->panel_info->lm_widths[1]) return; mdata = mdss_mdp_get_mdata(); width = mfd->fbi->var.xres; /* setting the appropriate split_mode for HDMI usecases */ if (mfd->split_mode == MDP_SPLIT_MODE_NONE && width > mdata->max_mixer_width) { width /= 2; mfd->split_mode = MDP_DUAL_LM_SINGLE_DISPLAY; mfd->split_fb_left = width; mfd->split_fb_right = width; } else if (mfd->split_mode == MDP_DUAL_LM_SINGLE_DISPLAY && width <= mdata->max_mixer_width) { mfd->split_mode = MDP_SPLIT_MODE_NONE; mfd->split_fb_left = 0; mfd->split_fb_right = 0; } } static int mdss_mdp_overlay_on(struct msm_fb_data_type *mfd) { int rc; Loading @@ -4384,6 +4411,8 @@ static int mdss_mdp_overlay_on(struct msm_fb_data_type *mfd) if (!mdp5_data) return -EINVAL; mdss_mdp_set_lm_flag(mfd); if (!mdp5_data->ctl) { ctl = __mdss_mdp_overlay_ctl_init(mfd); if (IS_ERR_OR_NULL(ctl)) Loading Loading
drivers/video/msm/mdss/mdss_mdp_ctl.c +3 −10 Original line number Diff line number Diff line Loading @@ -4004,22 +4004,15 @@ int mdss_mdp_async_ctl_flush(struct msm_fb_data_type *mfd, { struct mdss_overlay_private *mdp5_data = mfd_to_mdp5_data(mfd); struct mdss_mdp_ctl *ctl = mdp5_data->ctl; struct mdss_mdp_ctl *sctl = NULL; struct mdss_mdp_ctl *sctl = mdss_mdp_get_split_ctl(ctl); int ret = 0; mutex_lock(&ctl->flush_lock); mdss_mdp_ctl_write(ctl, MDSS_MDP_REG_CTL_FLUSH, flush_bits); if ((!ctl->split_flush_en) && is_split_lm(mfd)) { sctl = mdss_mdp_get_split_ctl(ctl); if (!sctl) { pr_err("not able to get the other ctl\n"); ret = -EINVAL; goto end; } if ((!ctl->split_flush_en) && sctl) mdss_mdp_ctl_write(sctl, MDSS_MDP_REG_CTL_FLUSH, flush_bits); } end: mutex_unlock(&ctl->flush_lock); return ret; } Loading
drivers/video/msm/mdss/mdss_mdp_overlay.c +29 −0 Original line number Diff line number Diff line Loading @@ -4368,6 +4368,33 @@ error: return ctl; } static void mdss_mdp_set_lm_flag(struct msm_fb_data_type *mfd) { u32 width; struct mdss_data_type *mdata; /* if lm_widths are set, the split_mode would have been set */ if (mfd->panel_info->lm_widths[0] && mfd->panel_info->lm_widths[1]) return; mdata = mdss_mdp_get_mdata(); width = mfd->fbi->var.xres; /* setting the appropriate split_mode for HDMI usecases */ if (mfd->split_mode == MDP_SPLIT_MODE_NONE && width > mdata->max_mixer_width) { width /= 2; mfd->split_mode = MDP_DUAL_LM_SINGLE_DISPLAY; mfd->split_fb_left = width; mfd->split_fb_right = width; } else if (mfd->split_mode == MDP_DUAL_LM_SINGLE_DISPLAY && width <= mdata->max_mixer_width) { mfd->split_mode = MDP_SPLIT_MODE_NONE; mfd->split_fb_left = 0; mfd->split_fb_right = 0; } } static int mdss_mdp_overlay_on(struct msm_fb_data_type *mfd) { int rc; Loading @@ -4384,6 +4411,8 @@ static int mdss_mdp_overlay_on(struct msm_fb_data_type *mfd) if (!mdp5_data) return -EINVAL; mdss_mdp_set_lm_flag(mfd); if (!mdp5_data->ctl) { ctl = __mdss_mdp_overlay_ctl_init(mfd); if (IS_ERR_OR_NULL(ctl)) Loading