Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d31faf65 authored by Ville Syrjälä's avatar Ville Syrjälä
Browse files

drm/i915: Fix scanoutpos calculations for interlaced modes



The scanline counter counts lines in the current field, not the entire
frame. But the crtc_ timings are the values for the entire frame. Divide
the vertical timings by 2 to make them match the scanline counter.

The rounding was carefully chosen to make it do the right thing wrt. the
observed scanline counter and ISR vblank bit behaviour.

Reviewed-by: default avatar <mario.kleiner.de@gmail.com>
Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
parent 3c184f69
Loading
Loading
Loading
Loading
+6 −0
Original line number Original line Diff line number Diff line
@@ -698,6 +698,12 @@ static int i915_get_crtc_scanoutpos(struct drm_device *dev, int pipe,
	vbl_start = mode->crtc_vblank_start;
	vbl_start = mode->crtc_vblank_start;
	vbl_end = mode->crtc_vblank_end;
	vbl_end = mode->crtc_vblank_end;


	if (mode->flags & DRM_MODE_FLAG_INTERLACE) {
		vbl_start = DIV_ROUND_UP(vbl_start, 2);
		vbl_end /= 2;
		vtotal /= 2;
	}

	ret |= DRM_SCANOUTPOS_VALID | DRM_SCANOUTPOS_ACCURATE;
	ret |= DRM_SCANOUTPOS_VALID | DRM_SCANOUTPOS_ACCURATE;


	/*
	/*