I want to remove the core ones since with atomic drivers system
suspend/resume is solved much differently. And there's only 2 drivers
(gma500 besides nouveau) really using them.

v2: Fixup bugs Ilia spotted.

Cc: Ben Skeggs <bske...@redhat.com>
Cc: Ilia Mirkin <imir...@alum.mit.edu>
Signed-off-by: Daniel Vetter <daniel.vet...@intel.com>
---
 drivers/gpu/drm/nouveau/dispnv04/crtc.c |  5 +++--
 drivers/gpu/drm/nouveau/dispnv04/disp.c | 11 ++++++-----
 drivers/gpu/drm/nouveau/nouveau_crtc.h  |  3 +++
 3 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/dispnv04/crtc.c 
b/drivers/gpu/drm/nouveau/dispnv04/crtc.c
index dab24066fa21..bb9e9cb14b9d 100644
--- a/drivers/gpu/drm/nouveau/dispnv04/crtc.c
+++ b/drivers/gpu/drm/nouveau/dispnv04/crtc.c
@@ -1081,8 +1081,6 @@ nouveau_crtc_set_config(struct drm_mode_set *set)
 }
 
 static const struct drm_crtc_funcs nv04_crtc_funcs = {
-       .save = nv_crtc_save,
-       .restore = nv_crtc_restore,
        .cursor_set = nv04_crtc_cursor_set,
        .cursor_move = nv04_crtc_cursor_move,
        .gamma_set = nv_crtc_gamma_set,
@@ -1123,6 +1121,9 @@ nv04_crtc_create(struct drm_device *dev, int crtc_num)
        nv_crtc->index = crtc_num;
        nv_crtc->last_dpms = NV_DPMS_CLEARED;
 
+       nv_crtc->save = nv_crtc_save;
+       nv_crtc->restore = nv_crtc_restore;
+
        drm_crtc_init(dev, &nv_crtc->base, &nv04_crtc_funcs);
        drm_crtc_helper_add(&nv_crtc->base, &nv04_crtc_helper_funcs);
        drm_mode_crtc_set_gamma_size(&nv_crtc->base, 256);
diff --git a/drivers/gpu/drm/nouveau/dispnv04/disp.c 
b/drivers/gpu/drm/nouveau/dispnv04/disp.c
index 9e650081c357..59242ff767ea 100644
--- a/drivers/gpu/drm/nouveau/dispnv04/disp.c
+++ b/drivers/gpu/drm/nouveau/dispnv04/disp.c
@@ -39,7 +39,7 @@ nv04_display_create(struct drm_device *dev)
        struct dcb_table *dcb = &drm->vbios.dcb;
        struct drm_connector *connector, *ct;
        struct drm_encoder *encoder;
-       struct drm_crtc *crtc;
+       struct nouveau_crtc *crtc;
        struct nv04_display *disp;
        int i, ret;
 
@@ -107,8 +107,8 @@ nv04_display_create(struct drm_device *dev)
        }
 
        /* Save previous state */
-       list_for_each_entry(crtc, &dev->mode_config.crtc_list, head)
-               crtc->funcs->save(crtc);
+       list_for_each_entry(crtc, &dev->mode_config.crtc_list, base.head)
+               crtc->save(&crtc->base);
 
        list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
                const struct drm_encoder_helper_funcs *func = 
encoder->helper_private;
@@ -128,6 +128,7 @@ nv04_display_destroy(struct drm_device *dev)
        struct nouveau_drm *drm = nouveau_drm(dev);
        struct drm_encoder *encoder;
        struct drm_crtc *crtc;
+       struct nouveau_crtc *nv_crtc;
 
        /* Turn every CRTC off. */
        list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
@@ -145,8 +146,8 @@ nv04_display_destroy(struct drm_device *dev)
                func->restore(encoder);
        }
 
-       list_for_each_entry(crtc, &dev->mode_config.crtc_list, head)
-               crtc->funcs->restore(crtc);
+       list_for_each_entry(nv_crtc, &dev->mode_config.crtc_list, base.head)
+               nv_crtc->restore(&nv_crtc->base);
 
        nouveau_hw_save_vga_fonts(dev, 0);
 
diff --git a/drivers/gpu/drm/nouveau/nouveau_crtc.h 
b/drivers/gpu/drm/nouveau/nouveau_crtc.h
index f19cb1c5fc5a..863f10b8d818 100644
--- a/drivers/gpu/drm/nouveau/nouveau_crtc.h
+++ b/drivers/gpu/drm/nouveau/nouveau_crtc.h
@@ -73,6 +73,9 @@ struct nouveau_crtc {
        int (*set_dither)(struct nouveau_crtc *crtc, bool update);
        int (*set_scale)(struct nouveau_crtc *crtc, bool update);
        int (*set_color_vibrance)(struct nouveau_crtc *crtc, bool update);
+
+       void (*save)(struct drm_crtc *crtc);
+       void (*restore)(struct drm_crtc *crtc);
 };
 
 static inline struct nouveau_crtc *nouveau_crtc(struct drm_crtc *crtc)
-- 
2.5.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to