summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandre Courbot <acourbot@nvidia.com>2016-01-14 13:43:28 +0900
committerAlexandre Courbot <acourbot@nvidia.com>2016-01-15 14:32:53 +0900
commit60240bc795491e26e40fd7a2e06b4f50f2cacdd9 (patch)
tree6a2810d39e6e6c28e2fa0fcaaaa5e755405472f9
parenta9015f0cb152e989483f9aaa5dfef2e6e5f4e334 (diff)
downloadnouveau-60240bc795491e26e40fd7a2e06b4f50f2cacdd9.tar.gz
Allow compilation with kernel < 4.5
-rw-r--r--drm/nouveau/dispnv04/dac.c4
-rw-r--r--drm/nouveau/dispnv04/dfp.c4
-rw-r--r--drm/nouveau/dispnv04/tvnv04.c4
-rw-r--r--drm/nouveau/dispnv04/tvnv17.c6
-rw-r--r--drm/nouveau/nouveau_display.c16
-rw-r--r--drm/nouveau/nouveau_display.h2
-rw-r--r--drm/nouveau/nv50_display.c12
7 files changed, 48 insertions, 0 deletions
diff --git a/drm/nouveau/dispnv04/dac.c b/drm/nouveau/dispnv04/dac.c
index b48eec395..c02f8c864 100644
--- a/drm/nouveau/dispnv04/dac.c
+++ b/drm/nouveau/dispnv04/dac.c
@@ -549,8 +549,12 @@ nv04_dac_create(struct drm_connector *connector, struct dcb_output *entry)
else
helper = &nv04_dac_helper_funcs;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,5,0)
drm_encoder_init(dev, encoder, &nv04_dac_funcs, DRM_MODE_ENCODER_DAC,
NULL);
+#else
+ drm_encoder_init(dev, encoder, &nv04_dac_funcs, DRM_MODE_ENCODER_DAC);
+#endif
drm_encoder_helper_add(encoder, helper);
encoder->possible_crtcs = entry->heads;
diff --git a/drm/nouveau/dispnv04/dfp.c b/drm/nouveau/dispnv04/dfp.c
index 05bfd151d..3f88afa4e 100644
--- a/drm/nouveau/dispnv04/dfp.c
+++ b/drm/nouveau/dispnv04/dfp.c
@@ -705,7 +705,11 @@ nv04_dfp_create(struct drm_connector *connector, struct dcb_output *entry)
nv_encoder->dcb = entry;
nv_encoder->or = ffs(entry->or) - 1;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,5,0)
drm_encoder_init(connector->dev, encoder, &nv04_dfp_funcs, type, NULL);
+#else
+ drm_encoder_init(connector->dev, encoder, &nv04_dfp_funcs, type);
+#endif
drm_encoder_helper_add(encoder, helper);
encoder->possible_crtcs = entry->heads;
diff --git a/drm/nouveau/dispnv04/tvnv04.c b/drm/nouveau/dispnv04/tvnv04.c
index 54e9fb9eb..fd6768f9e 100644
--- a/drm/nouveau/dispnv04/tvnv04.c
+++ b/drm/nouveau/dispnv04/tvnv04.c
@@ -223,8 +223,12 @@ nv04_tv_create(struct drm_connector *connector, struct dcb_output *entry)
/* Initialize the common members */
encoder = to_drm_encoder(nv_encoder);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,5,0)
drm_encoder_init(dev, encoder, &nv04_tv_funcs, DRM_MODE_ENCODER_TVDAC,
NULL);
+#else
+ drm_encoder_init(dev, encoder, &nv04_tv_funcs, DRM_MODE_ENCODER_TVDAC);
+#endif
drm_encoder_helper_add(encoder, &nv04_tv_helper_funcs);
nv_encoder->enc_save = drm_i2c_encoder_save;
diff --git a/drm/nouveau/dispnv04/tvnv17.c b/drm/nouveau/dispnv04/tvnv17.c
index 4be69bcfa..31678682b 100644
--- a/drm/nouveau/dispnv04/tvnv17.c
+++ b/drm/nouveau/dispnv04/tvnv17.c
@@ -818,10 +818,16 @@ nv17_tv_create(struct drm_connector *connector, struct dcb_output *entry)
tv_enc->base.dcb = entry;
tv_enc->base.or = ffs(entry->or) - 1;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,5,0)
drm_encoder_init(dev, encoder, &nv17_tv_funcs, DRM_MODE_ENCODER_TVDAC,
NULL);
drm_encoder_helper_add(encoder, &nv17_tv_helper_funcs);
to_encoder_slave(encoder)->slave_funcs = &nv17_tv_slave_funcs;
+#else
+ drm_encoder_init(dev, encoder, &nv17_tv_funcs, DRM_MODE_ENCODER_TVDAC);
+ drm_encoder_helper_add(encoder, &nv17_tv_helper_funcs);
+ to_encoder_slave(encoder)->slave_funcs = (struct drm_encoder_slave_funcs *)&nv17_tv_slave_funcs;
+#endif
tv_enc->base.enc_save = nv17_tv_save;
tv_enc->base.enc_restore = nv17_tv_restore;
diff --git a/drm/nouveau/nouveau_display.c b/drm/nouveau/nouveau_display.c
index 0ab2663ef..5e6e355e7 100644
--- a/drm/nouveau/nouveau_display.c
+++ b/drm/nouveau/nouveau_display.c
@@ -42,6 +42,8 @@
#include <nvif/cl0046.h>
#include <nvif/event.h>
+#include <linux/version.h>
+
static int
nouveau_display_vblank_handler(struct nvif_notify *notify)
{
@@ -256,7 +258,11 @@ nouveau_framebuffer_init(struct drm_device *dev,
struct drm_framebuffer *fb = &nv_fb->base;
int ret;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,5,0)
drm_helper_mode_fill_fb_struct(fb, mode_cmd);
+#else
+ drm_helper_mode_fill_fb_struct(fb, (struct drm_mode_fb_cmd2 *)mode_cmd);
+#endif
nv_fb->nvbo = nvbo;
ret = drm_framebuffer_init(dev, fb, &nouveau_framebuffer_funcs);
@@ -275,7 +281,11 @@ nouveau_framebuffer_init(struct drm_device *dev,
static struct drm_framebuffer *
nouveau_user_framebuffer_create(struct drm_device *dev,
struct drm_file *file_priv,
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,5,0)
const struct drm_mode_fb_cmd2 *mode_cmd)
+#else
+ struct drm_mode_fb_cmd2 *mode_cmd)
+#endif
{
struct nouveau_framebuffer *nouveau_fb;
struct drm_gem_object *gem;
@@ -842,6 +852,7 @@ nouveau_finish_page_flip(struct nouveau_channel *chan,
}
s = list_first_entry(&fctx->flip, struct nouveau_page_flip_state, head);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,5,0)
if (s->event) {
if (drm->device.info.family < NV_DEVICE_INFO_V0_TESLA) {
drm_arm_vblank_event(dev, s->crtc, s->event);
@@ -856,6 +867,11 @@ nouveau_finish_page_flip(struct nouveau_channel *chan,
/* Give up ownership of vblank for page-flipped crtc */
drm_vblank_put(dev, s->crtc);
}
+#else
+ if (s->event)
+ drm_send_vblank_event(dev, s->crtc, s->event);
+ drm_vblank_put(dev, s->crtc);
+#endif
list_del(&s->head);
if (ps)
diff --git a/drm/nouveau/nouveau_display.h b/drm/nouveau/nouveau_display.h
index 5a57d8b47..81b7d3c09 100644
--- a/drm/nouveau/nouveau_display.h
+++ b/drm/nouveau/nouveau_display.h
@@ -5,6 +5,8 @@
#include "nouveau_drm.h"
+#include <linux/version.h>
+
struct nouveau_framebuffer {
struct drm_framebuffer base;
struct nouveau_bo *nvbo;
diff --git a/drm/nouveau/nv50_display.c b/drm/nouveau/nv50_display.c
index ea3921652..327532073 100644
--- a/drm/nouveau/nv50_display.c
+++ b/drm/nouveau/nv50_display.c
@@ -1724,7 +1724,11 @@ nv50_dac_create(struct drm_connector *connector, struct dcb_output *dcbe)
encoder = to_drm_encoder(nv_encoder);
encoder->possible_crtcs = dcbe->heads;
encoder->possible_clones = 0;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,5,0)
drm_encoder_init(connector->dev, encoder, &nv50_dac_func, type, NULL);
+#else
+ drm_encoder_init(connector->dev, encoder, &nv50_dac_func, type);
+#endif
drm_encoder_helper_add(encoder, &nv50_dac_hfunc);
drm_mode_connector_attach_encoder(connector, encoder);
@@ -2139,7 +2143,11 @@ nv50_sor_create(struct drm_connector *connector, struct dcb_output *dcbe)
encoder = to_drm_encoder(nv_encoder);
encoder->possible_crtcs = dcbe->heads;
encoder->possible_clones = 0;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,5,0)
drm_encoder_init(connector->dev, encoder, &nv50_sor_func, type, NULL);
+#else
+ drm_encoder_init(connector->dev, encoder, &nv50_sor_func, type);
+#endif
drm_encoder_helper_add(encoder, &nv50_sor_hfunc);
drm_mode_connector_attach_encoder(connector, encoder);
@@ -2319,7 +2327,11 @@ nv50_pior_create(struct drm_connector *connector, struct dcb_output *dcbe)
encoder = to_drm_encoder(nv_encoder);
encoder->possible_crtcs = dcbe->heads;
encoder->possible_clones = 0;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,5,0)
drm_encoder_init(connector->dev, encoder, &nv50_pior_func, type, NULL);
+#else
+ drm_encoder_init(connector->dev, encoder, &nv50_pior_func, type);
+#endif
drm_encoder_helper_add(encoder, &nv50_pior_hfunc);
drm_mode_connector_attach_encoder(connector, encoder);