OSDN Git Service

drm/mgag200: Use simple-display data structures
authorThomas Zimmermann <tzimmermann@suse.de>
Fri, 15 May 2020 08:32:31 +0000 (10:32 +0200)
committerThomas Zimmermann <tzimmermann@suse.de>
Tue, 19 May 2020 07:41:34 +0000 (09:41 +0200)
The MGA CRTC data structure struct mga_crtc contains unused additional
fields; so it can removed. The standard DRM CRTC and encoder structures
are embedded now in struct drm_simple_display_pipe. Done in preparation
of converting mgag200 to simple KMS helpers.

v3:
* remove now-unused define MGAG200FB_CONN_LIMIT
* remove unused define MATROX_DPMS_CLEARED

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Tested-by: John Donnelly <John.p.donnelly@oracle.com>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Acked-by: Emil Velikov <emil.velikov@collabora.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200515083233.32036-14-tzimmermann@suse.de
drivers/gpu/drm/mgag200/mgag200_drv.h
drivers/gpu/drm/mgag200/mgag200_mode.c

index 0cf498d..d929ca3 100644 (file)
@@ -19,6 +19,7 @@
 #include <drm/drm_fb_helper.h>
 #include <drm/drm_gem.h>
 #include <drm/drm_gem_vram_helper.h>
+#include <drm/drm_simple_kms_helper.h>
 
 #include "mgag200_reg.h"
 
@@ -32,8 +33,6 @@
 #define DRIVER_MINOR           0
 #define DRIVER_PATCHLEVEL      0
 
-#define MGAG200FB_CONN_LIMIT 1
-
 #define RREG8(reg) ioread8(((void __iomem *)mdev->rmmio) + (reg))
 #define WREG8(reg, v) iowrite8(v, ((void __iomem *)mdev->rmmio) + (reg))
 #define RREG32(reg) ioread32(((void __iomem *)mdev->rmmio) + (reg))
 #define MGAG200_MAX_FB_HEIGHT 4096
 #define MGAG200_MAX_FB_WIDTH 4096
 
-#define MATROX_DPMS_CLEARED (-1)
-
-#define to_mga_crtc(x) container_of(x, struct mga_crtc, base)
 #define to_mga_connector(x) container_of(x, struct mga_connector, base)
 
-struct mga_crtc {
-       struct drm_crtc base;
-       u8 lut_r[256], lut_g[256], lut_b[256];
-       int last_dpms;
-       bool enabled;
-};
-
 struct mga_i2c_chan {
        struct i2c_adapter adapter;
        struct drm_device *dev;
@@ -175,7 +164,7 @@ struct mga_device {
        u32 unique_rev_id;
 
        struct mga_connector connector;
-       struct drm_encoder encoder;
+       struct drm_simple_display_pipe display_pipe;
 };
 
 static inline struct mga_device *to_mga_device(struct drm_device *dev)
index d6f9763..00bbc1f 100644 (file)
@@ -1475,15 +1475,6 @@ static int mga_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
        return 0;
 }
 
-/* Simple cleanup function */
-static void mga_crtc_destroy(struct drm_crtc *crtc)
-{
-       struct mga_crtc *mga_crtc = to_mga_crtc(crtc);
-
-       drm_crtc_cleanup(crtc);
-       kfree(mga_crtc);
-}
-
 static void mga_crtc_disable(struct drm_crtc *crtc)
 {
        DRM_DEBUG_KMS("\n");
@@ -1501,7 +1492,7 @@ static void mga_crtc_disable(struct drm_crtc *crtc)
 static const struct drm_crtc_funcs mga_crtc_funcs = {
        .gamma_set = mga_crtc_gamma_set,
        .set_config = drm_crtc_helper_set_config,
-       .destroy = mga_crtc_destroy,
+       .destroy = drm_crtc_cleanup,
 };
 
 static const struct drm_crtc_helper_funcs mga_helper_funcs = {
@@ -1517,20 +1508,13 @@ static const struct drm_crtc_helper_funcs mga_helper_funcs = {
 static void mga_crtc_init(struct mga_device *mdev)
 {
        struct drm_device *dev = mdev->dev;
-       struct mga_crtc *mga_crtc;
-
-       mga_crtc = kzalloc(sizeof(struct mga_crtc) +
-                             (MGAG200FB_CONN_LIMIT * sizeof(struct drm_connector *)),
-                             GFP_KERNEL);
-
-       if (mga_crtc == NULL)
-               return;
+       struct drm_crtc *crtc = &mdev->display_pipe.crtc;
 
-       drm_crtc_init(dev, &mga_crtc->base, &mga_crtc_funcs);
+       drm_crtc_init(dev, crtc, &mga_crtc_funcs);
 
-       drm_mode_crtc_set_gamma_size(&mga_crtc->base, MGAG200_LUT_SIZE);
+       drm_mode_crtc_set_gamma_size(crtc, MGAG200_LUT_SIZE);
 
-       drm_crtc_helper_add(&mga_crtc->base, &mga_helper_funcs);
+       drm_crtc_helper_add(crtc, &mga_helper_funcs);
 }
 
 /*
@@ -1718,7 +1702,7 @@ static unsigned int mgag200_preferred_depth(struct mga_device *mdev)
 int mgag200_modeset_init(struct mga_device *mdev)
 {
        struct drm_device *dev = mdev->dev;
-       struct drm_encoder *encoder = &mdev->encoder;
+       struct drm_encoder *encoder = &mdev->display_pipe.encoder;
        struct drm_connector *connector = &mdev->connector.base;
        int ret;