diff options
-rw-r--r-- | drm/nouveau/nouveau_display.c | 29 | ||||
-rw-r--r-- | drm/nouveau/nouveau_display.h | 10 |
2 files changed, 39 insertions, 0 deletions
diff --git a/drm/nouveau/nouveau_display.c b/drm/nouveau/nouveau_display.c index 934159035..55a5ae71a 100644 --- a/drm/nouveau/nouveau_display.c +++ b/drm/nouveau/nouveau_display.c @@ -54,7 +54,11 @@ nouveau_display_vblank_handler(struct nvif_notify *notify) } int +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,5,0) nouveau_display_vblank_enable(struct drm_device *dev, unsigned int pipe) +#else +nouveau_display_vblank_enable(struct drm_device *dev, int pipe) +#endif { struct drm_crtc *crtc; list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { @@ -68,7 +72,11 @@ nouveau_display_vblank_enable(struct drm_device *dev, unsigned int pipe) } void +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,5,0) nouveau_display_vblank_disable(struct drm_device *dev, unsigned int pipe) +#else +nouveau_display_vblank_disable(struct drm_device *dev, int pipe) +#endif { struct drm_crtc *crtc; list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { @@ -106,7 +114,9 @@ nouveau_display_scanoutpos_head(struct drm_crtc *crtc, int *vpos, int *hpos, .base.head = nouveau_crtc(crtc)->index, }; struct nouveau_display *disp = nouveau_display(crtc->dev); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,5,0) struct drm_vblank_crtc *vblank = &crtc->dev->vblank[drm_crtc_index(crtc)]; +#endif int ret, retry = 1; do { @@ -120,7 +130,11 @@ nouveau_display_scanoutpos_head(struct drm_crtc *crtc, int *vpos, int *hpos, break; } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,5,0) if (retry) ndelay(vblank->linedur_ns); +#else + if (retry) ndelay(crtc->linedur_ns); +#endif } while (retry--); *hpos = args.scan.hline; @@ -135,10 +149,16 @@ nouveau_display_scanoutpos_head(struct drm_crtc *crtc, int *vpos, int *hpos, } int +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,5,0) nouveau_display_scanoutpos(struct drm_device *dev, unsigned int pipe, unsigned int flags, int *vpos, int *hpos, ktime_t *stime, ktime_t *etime, const struct drm_display_mode *mode) +#else +nouveau_display_scanoutpos(struct drm_device *dev, int pipe, + unsigned int flags, int *vpos, int *hpos, + ktime_t *stime, ktime_t *etime) +#endif { struct drm_crtc *crtc; @@ -153,15 +173,24 @@ nouveau_display_scanoutpos(struct drm_device *dev, unsigned int pipe, } int +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,5,0) nouveau_display_vblstamp(struct drm_device *dev, unsigned int pipe, int *max_error, struct timeval *time, unsigned flags) +#else +nouveau_display_vblstamp(struct drm_device *dev, int pipe, + int *max_error, struct timeval *time, unsigned flags) +#endif { struct drm_crtc *crtc; list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { if (nouveau_crtc(crtc)->index == pipe) { return drm_calc_vbltimestamp_from_scanoutpos(dev, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,5,0) pipe, max_error, time, flags, +#else + pipe, max_error, time, flags, crtc, +#endif &crtc->hwmode); } } diff --git a/drm/nouveau/nouveau_display.h b/drm/nouveau/nouveau_display.h index 81b7d3c09..3fd084f60 100644 --- a/drm/nouveau/nouveau_display.h +++ b/drm/nouveau/nouveau_display.h @@ -67,6 +67,7 @@ int nouveau_display_init(struct drm_device *dev); void nouveau_display_fini(struct drm_device *dev); int nouveau_display_suspend(struct drm_device *dev, bool runtime); void nouveau_display_resume(struct drm_device *dev, bool runtime); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,5,0) int nouveau_display_vblank_enable(struct drm_device *, unsigned int); void nouveau_display_vblank_disable(struct drm_device *, unsigned int); int nouveau_display_scanoutpos(struct drm_device *, unsigned int, @@ -74,6 +75,15 @@ int nouveau_display_scanoutpos(struct drm_device *, unsigned int, ktime_t *, const struct drm_display_mode *); int nouveau_display_vblstamp(struct drm_device *, unsigned int, int *, struct timeval *, unsigned); +#else +int nouveau_display_vblank_enable(struct drm_device *, int); +void nouveau_display_vblank_disable(struct drm_device *, int); +int nouveau_display_scanoutpos(struct drm_device *, int, + unsigned int, int *, int *, ktime_t *, + ktime_t *); +int nouveau_display_vblstamp(struct drm_device *, int, int *, + struct timeval *, unsigned); +#endif int nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb, struct drm_pending_vblank_event *event, |