소스 검색

Merge "disp: msm: sde: turn off/on vblank callbacks as per crtc"

qctecmdr 6 년 전
부모
커밋
8205140d9c
2개의 변경된 파일9개의 추가작업 그리고 0개의 파일을 삭제
  1. 4 0
      msm/msm_drv.c
  2. 5 0
      msm/sde/sde_crtc.c

+ 4 - 0
msm/msm_drv.c

@@ -699,6 +699,7 @@ static int msm_drm_init(struct device *dev, struct drm_driver *drv)
 	struct msm_kms *kms = NULL;
 	int ret;
 	struct sched_param param = { 0 };
+	struct drm_crtc *crtc;
 
 	ddev = drm_dev_alloc(drv, dev);
 	if (!ddev) {
@@ -770,6 +771,9 @@ static int msm_drm_init(struct device *dev, struct drm_driver *drv)
 		goto fail;
 	}
 
+	drm_for_each_crtc(crtc, ddev)
+		drm_crtc_vblank_reset(crtc);
+
 	if (kms) {
 		pm_runtime_get_sync(dev);
 		ret = drm_irq_install(ddev, platform_get_irq(pdev, 0));

+ 5 - 0
msm/sde/sde_crtc.c

@@ -3812,6 +3812,7 @@ static void sde_crtc_reset(struct drm_crtc *crtc)
 
 	cstate->base.crtc = crtc;
 	crtc->state = &cstate->base;
+	drm_crtc_vblank_reset(crtc);
 }
 
 static void sde_crtc_handle_power_event(u32 event_type, void *arg)
@@ -3972,6 +3973,8 @@ static void sde_crtc_disable(struct drm_crtc *crtc)
 
 	SDE_DEBUG("crtc%d\n", crtc->base.id);
 
+	drm_crtc_vblank_off(crtc);
+
 	if (sde_kms_is_suspend_state(crtc->dev))
 		_sde_crtc_set_suspend(crtc, true);
 
@@ -4110,6 +4113,8 @@ static void sde_crtc_enable(struct drm_crtc *crtc,
 	SDE_EVT32_VERBOSE(DRMID(crtc));
 	sde_crtc = to_sde_crtc(crtc);
 
+	drm_crtc_vblank_on(crtc);
+
 	mutex_lock(&sde_crtc->crtc_lock);
 	SDE_EVT32(DRMID(crtc), sde_crtc->enabled, sde_crtc->suspend,
 			sde_crtc->vblank_requested);