aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/rockchip/analogix_dp-rockchip.c')
-rw-r--r--drivers/gpu/drm/rockchip/analogix_dp-rockchip.c14
1 files changed, 3 insertions, 11 deletions
diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
index d8fa7a9c9240..1bccd827d2e4 100644
--- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
+++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
@@ -104,26 +104,18 @@ static void analogix_dp_psr_work(struct work_struct *work)
104{ 104{
105 struct rockchip_dp_device *dp = 105 struct rockchip_dp_device *dp =
106 container_of(work, typeof(*dp), psr_work); 106 container_of(work, typeof(*dp), psr_work);
107 struct drm_crtc *crtc = dp->encoder.crtc;
108 int psr_state = dp->psr_state;
109 int vact_end;
110 int ret; 107 int ret;
111 unsigned long flags; 108 unsigned long flags;
112 109
113 if (!crtc) 110 ret = rockchip_drm_wait_vact_end(dp->encoder.crtc,
114 return; 111 PSR_WAIT_LINE_FLAG_TIMEOUT_MS);
115
116 vact_end = crtc->mode.vtotal - crtc->mode.vsync_start + crtc->mode.vdisplay;
117
118 ret = rockchip_drm_wait_line_flag(dp->encoder.crtc, vact_end,
119 PSR_WAIT_LINE_FLAG_TIMEOUT_MS);
120 if (ret) { 112 if (ret) {
121 dev_err(dp->dev, "line flag interrupt did not arrive\n"); 113 dev_err(dp->dev, "line flag interrupt did not arrive\n");
122 return; 114 return;
123 } 115 }
124 116
125 spin_lock_irqsave(&dp->psr_lock, flags); 117 spin_lock_irqsave(&dp->psr_lock, flags);
126 if (psr_state == EDP_VSC_PSR_STATE_ACTIVE) 118 if (dp->psr_state == EDP_VSC_PSR_STATE_ACTIVE)
127 analogix_dp_enable_psr(dp->dev); 119 analogix_dp_enable_psr(dp->dev);
128 else 120 else
129 analogix_dp_disable_psr(dp->dev); 121 analogix_dp_disable_psr(dp->dev);