return AMDGPU_CRTC_IRQ_NONE;
        }
 }
+
+bool amdgpu_crtc_get_scanout_position(struct drm_crtc *crtc,
+                       bool in_vblank_irq, int *vpos,
+                       int *hpos, ktime_t *stime, ktime_t *etime,
+                       const struct drm_display_mode *mode)
+{
+       struct drm_device *dev = crtc->dev;
+       unsigned int pipe = crtc->index;
+
+       return amdgpu_display_get_crtc_scanoutpos(dev, pipe, 0, vpos, hpos,
+                                                 stime, etime, mode);
+}
 
        return 0;
 }
 
-static bool
-amdgpu_get_crtc_scanout_position(struct drm_device *dev, unsigned int pipe,
-                                bool in_vblank_irq, int *vpos, int *hpos,
-                                ktime_t *stime, ktime_t *etime,
-                                const struct drm_display_mode *mode)
-{
-       return amdgpu_display_get_crtc_scanoutpos(dev, pipe, 0, vpos, hpos,
-                                                 stime, etime, mode);
-}
-
 static struct drm_driver kms_driver = {
        .driver_features =
            DRIVER_USE_AGP | DRIVER_ATOMIC |
        .enable_vblank = amdgpu_enable_vblank_kms,
        .disable_vblank = amdgpu_disable_vblank_kms,
        .get_vblank_timestamp = drm_calc_vbltimestamp_from_scanoutpos,
-       .get_scanout_position = amdgpu_get_crtc_scanout_position,
        .irq_handler = amdgpu_irq_handler,
        .ioctls = amdgpu_ioctls_kms,
        .gem_free_object_unlocked = amdgpu_gem_object_free,
 
                             struct drm_display_mode *adjusted_mode);
 int amdgpu_display_crtc_idx_to_irq_type(struct amdgpu_device *adev, int crtc);
 
+bool amdgpu_crtc_get_scanout_position(struct drm_crtc *crtc,
+                       bool in_vblank_irq, int *vpos,
+                       int *hpos, ktime_t *stime, ktime_t *etime,
+                       const struct drm_display_mode *mode);
+
 /* fbdev layer */
 int amdgpu_fbdev_init(struct amdgpu_device *adev);
 void amdgpu_fbdev_fini(struct amdgpu_device *adev);
 
        .prepare = dce_v10_0_crtc_prepare,
        .commit = dce_v10_0_crtc_commit,
        .disable = dce_v10_0_crtc_disable,
+       .get_scanout_position = amdgpu_crtc_get_scanout_position,
 };
 
 static int dce_v10_0_crtc_init(struct amdgpu_device *adev, int index)
 
        .prepare = dce_v11_0_crtc_prepare,
        .commit = dce_v11_0_crtc_commit,
        .disable = dce_v11_0_crtc_disable,
+       .get_scanout_position = amdgpu_crtc_get_scanout_position,
 };
 
 static int dce_v11_0_crtc_init(struct amdgpu_device *adev, int index)
 
        .prepare = dce_v6_0_crtc_prepare,
        .commit = dce_v6_0_crtc_commit,
        .disable = dce_v6_0_crtc_disable,
+       .get_scanout_position = amdgpu_crtc_get_scanout_position,
 };
 
 static int dce_v6_0_crtc_init(struct amdgpu_device *adev, int index)
 
        .prepare = dce_v8_0_crtc_prepare,
        .commit = dce_v8_0_crtc_commit,
        .disable = dce_v8_0_crtc_disable,
+       .get_scanout_position = amdgpu_crtc_get_scanout_position,
 };
 
 static int dce_v8_0_crtc_init(struct amdgpu_device *adev, int index)
 
        .prepare = dce_virtual_crtc_prepare,
        .commit = dce_virtual_crtc_commit,
        .disable = dce_virtual_crtc_disable,
+       .get_scanout_position = amdgpu_crtc_get_scanout_position,
 };
 
 static int dce_virtual_crtc_init(struct amdgpu_device *adev, int index)
 
 static const struct drm_crtc_helper_funcs amdgpu_dm_crtc_helper_funcs = {
        .disable = dm_crtc_helper_disable,
        .atomic_check = dm_crtc_helper_atomic_check,
-       .mode_fixup = dm_crtc_helper_mode_fixup
+       .mode_fixup = dm_crtc_helper_mode_fixup,
+       .get_scanout_position = amdgpu_crtc_get_scanout_position,
 };
 
 static void dm_encoder_helper_disable(struct drm_encoder *encoder)