disp: msm: Add support for seamless panel operating mode switch
DSI display may support video mode and command mode both and it may support transition between these two modes. This change adds seamless transition between these two modes for DSI display by avoiding crtc enable/disable and panel power on/off during modeset. Change-Id: Id7ddaef7d1f0f7cc7d52283755bad53a246adec6 Signed-off-by: Lei Chen <chenlei@codeaurora.org>
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

vanhempi
e6933ff2dc
commit
21edecd3b1
@@ -1795,8 +1795,8 @@ int sde_crtc_get_secure_transition_ops(struct drm_crtc *crtc,
|
||||
*/
|
||||
drm_for_each_encoder_mask(encoder, crtc->dev,
|
||||
crtc->state->encoder_mask) {
|
||||
post_commit |= sde_encoder_check_mode(encoder,
|
||||
MSM_DISPLAY_CAP_VID_MODE);
|
||||
post_commit |= sde_encoder_check_curr_mode(encoder,
|
||||
MSM_DISPLAY_VIDEO_MODE);
|
||||
}
|
||||
|
||||
SDE_DEBUG("crtc%d: secure_level %d old_valid_fb %d post_commit %d\n",
|
||||
@@ -3136,8 +3136,8 @@ static void sde_crtc_atomic_begin(struct drm_crtc *crtc,
|
||||
_sde_crtc_dest_scaler_setup(crtc);
|
||||
|
||||
/* cancel the idle notify delayed work */
|
||||
if (sde_encoder_check_mode(sde_crtc->mixers[0].encoder,
|
||||
MSM_DISPLAY_CAP_VID_MODE) &&
|
||||
if (sde_encoder_check_curr_mode(sde_crtc->mixers[0].encoder,
|
||||
MSM_DISPLAY_VIDEO_MODE) &&
|
||||
kthread_cancel_delayed_work_sync(&sde_crtc->idle_notify_work))
|
||||
SDE_DEBUG("idle notify work cancelled\n");
|
||||
|
||||
@@ -3253,8 +3253,9 @@ static void sde_crtc_atomic_flush(struct drm_crtc *crtc,
|
||||
_sde_crtc_wait_for_fences(crtc);
|
||||
|
||||
/* schedule the idle notify delayed work */
|
||||
if (idle_time && sde_encoder_check_mode(sde_crtc->mixers[0].encoder,
|
||||
MSM_DISPLAY_CAP_VID_MODE)) {
|
||||
if (idle_time && sde_encoder_check_curr_mode(
|
||||
sde_crtc->mixers[0].encoder,
|
||||
MSM_DISPLAY_VIDEO_MODE)) {
|
||||
kthread_queue_delayed_work(&event_thread->worker,
|
||||
&sde_crtc->idle_notify_work,
|
||||
msecs_to_jiffies(idle_time));
|
||||
@@ -4322,8 +4323,8 @@ static int _sde_crtc_check_secure_state_smmu_translation(struct drm_crtc *crtc,
|
||||
|
||||
drm_for_each_encoder_mask(encoder, crtc->dev,
|
||||
crtc->state->encoder_mask) {
|
||||
is_video_mode |= sde_encoder_check_mode(encoder,
|
||||
MSM_DISPLAY_CAP_VID_MODE);
|
||||
is_video_mode |= sde_encoder_check_curr_mode(encoder,
|
||||
MSM_DISPLAY_VIDEO_MODE);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -5007,8 +5008,9 @@ static int _sde_crtc_get_output_fence(struct drm_crtc *crtc,
|
||||
cstate = to_sde_crtc_state(state);
|
||||
|
||||
drm_for_each_encoder_mask(encoder, crtc->dev, state->encoder_mask) {
|
||||
is_vid |= sde_encoder_check_mode(encoder,
|
||||
MSM_DISPLAY_CAP_VID_MODE);
|
||||
if (sde_encoder_check_curr_mode(encoder,
|
||||
MSM_DISPLAY_VIDEO_MODE))
|
||||
is_vid = true;
|
||||
if (is_vid)
|
||||
break;
|
||||
}
|
||||
|
Viittaa uudesa ongelmassa
Block a user