diff options
Diffstat (limited to 'drivers/gpu/drm/drm_irq.c')
| -rw-r--r-- | drivers/gpu/drm/drm_irq.c | 14 | 
1 files changed, 6 insertions, 8 deletions
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c index 22f3bf5ecbd..53120a72a48 100644 --- a/drivers/gpu/drm/drm_irq.c +++ b/drivers/gpu/drm/drm_irq.c @@ -493,6 +493,12 @@ void drm_calc_timestamping_constants(struct drm_crtc *crtc)  	/* Dot clock in Hz: */  	dotclock = (u64) crtc->hwmode.clock * 1000; +	/* Fields of interlaced scanout modes are only halve a frame duration. +	 * Double the dotclock to get halve the frame-/line-/pixelduration. +	 */ +	if (crtc->hwmode.flags & DRM_MODE_FLAG_INTERLACE) +		dotclock *= 2; +  	/* Valid dotclock? */  	if (dotclock > 0) {  		/* Convert scanline length in pixels and video dot clock to @@ -605,14 +611,6 @@ int drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev, int crtc,  		return -EAGAIN;  	} -	/* Don't know yet how to handle interlaced or -	 * double scan modes. Just no-op for now. -	 */ -	if (mode->flags & (DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLSCAN)) { -		DRM_DEBUG("crtc %d: Noop due to unsupported mode.\n", crtc); -		return -ENOTSUPP; -	} -  	/* Get current scanout position with system timestamp.  	 * Repeat query up to DRM_TIMESTAMP_MAXRETRIES times  	 * if single query takes longer than max_error nanoseconds.  |