|
@@ -274,24 +274,35 @@ int i915_get_crtc_scanoutpos(struct drm_device *dev, int pipe,
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-int i915_get_vblank_timestamp(struct drm_device *dev, int crtc,
|
|
|
+int i915_get_vblank_timestamp(struct drm_device *dev, int pipe,
|
|
|
int *max_error,
|
|
|
struct timeval *vblank_time,
|
|
|
unsigned flags)
|
|
|
{
|
|
|
- struct drm_crtc *drmcrtc;
|
|
|
+ struct drm_i915_private *dev_priv = dev->dev_private;
|
|
|
+ struct drm_crtc *crtc;
|
|
|
|
|
|
- if (crtc < 0 || crtc >= dev->num_crtcs) {
|
|
|
- DRM_ERROR("Invalid crtc %d\n", crtc);
|
|
|
+ if (pipe < 0 || pipe >= dev_priv->num_pipe) {
|
|
|
+ DRM_ERROR("Invalid crtc %d\n", pipe);
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
/* Get drm_crtc to timestamp: */
|
|
|
- drmcrtc = intel_get_crtc_for_pipe(dev, crtc);
|
|
|
+ crtc = intel_get_crtc_for_pipe(dev, pipe);
|
|
|
+ if (crtc == NULL) {
|
|
|
+ DRM_ERROR("Invalid crtc %d\n", pipe);
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!crtc->enabled) {
|
|
|
+ DRM_DEBUG_KMS("crtc %d is disabled\n", pipe);
|
|
|
+ return -EBUSY;
|
|
|
+ }
|
|
|
|
|
|
/* Helper routine in DRM core does all the work: */
|
|
|
- return drm_calc_vbltimestamp_from_scanoutpos(dev, crtc, max_error,
|
|
|
- vblank_time, flags, drmcrtc);
|
|
|
+ return drm_calc_vbltimestamp_from_scanoutpos(dev, pipe, max_error,
|
|
|
+ vblank_time, flags,
|
|
|
+ crtc);
|
|
|
}
|
|
|
|
|
|
/*
|