drm/ast: Use simple encoder
authorThomas Zimmermann <tzimmermann@suse.de>
Fri, 28 Feb 2020 08:18:26 +0000 (09:18 +0100)
committerThomas Zimmermann <tzimmermann@suse.de>
Mon, 2 Mar 2020 08:22:43 +0000 (09:22 +0100)
The ast driver uses an empty implementation for its encoder. Replace
the code with the generic simple encoder.

v2:
* rebase onto new simple-encoder interface

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20200228081828.18463-3-tzimmermann@suse.de
drivers/gpu/drm/ast/ast_drv.h
drivers/gpu/drm/ast/ast_mode.c

index f5d8780776ae9ee3331c07d23755d6df94930fc1..656d591b154b320b2884c16c3c7ff6c8e32d4f39 100644 (file)
@@ -121,6 +121,7 @@ struct ast_private {
                unsigned int next_index;
        } cursor;
 
+       struct drm_encoder encoder;
        struct drm_plane primary_plane;
        struct drm_plane cursor_plane;
 
@@ -238,13 +239,8 @@ struct ast_crtc {
        u8 offset_x, offset_y;
 };
 
-struct ast_encoder {
-       struct drm_encoder base;
-};
-
 #define to_ast_crtc(x) container_of(x, struct ast_crtc, base)
 #define to_ast_connector(x) container_of(x, struct ast_connector, base)
-#define to_ast_encoder(x) container_of(x, struct ast_encoder, base)
 
 struct ast_vbios_stdtable {
        u8 misc;
index 7810a84e7e9ead9382848a2273bf32c1ad9c42b7..cdd6c46d6557d529d473cee8540f29e2d4cae603 100644 (file)
@@ -40,6 +40,7 @@
 #include <drm/drm_gem_vram_helper.h>
 #include <drm/drm_plane_helper.h>
 #include <drm/drm_probe_helper.h>
+#include <drm/drm_simple_kms_helper.h>
 
 #include "ast_drv.h"
 #include "ast_tables.h"
@@ -957,28 +958,18 @@ err_kfree:
  * Encoder
  */
 
-static void ast_encoder_destroy(struct drm_encoder *encoder)
-{
-       drm_encoder_cleanup(encoder);
-       kfree(encoder);
-}
-
-static const struct drm_encoder_funcs ast_enc_funcs = {
-       .destroy = ast_encoder_destroy,
-};
-
 static int ast_encoder_init(struct drm_device *dev)
 {
-       struct ast_encoder *ast_encoder;
+       struct ast_private *ast = dev->dev_private;
+       struct drm_encoder *encoder = &ast->encoder;
+       int ret;
 
-       ast_encoder = kzalloc(sizeof(struct ast_encoder), GFP_KERNEL);
-       if (!ast_encoder)
-               return -ENOMEM;
+       ret = drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_DAC);
+       if (ret)
+               return ret;
 
-       drm_encoder_init(dev, &ast_encoder->base, &ast_enc_funcs,
-                        DRM_MODE_ENCODER_DAC, NULL);
+       encoder->possible_crtcs = 1;
 
-       ast_encoder->base.possible_crtcs = 1;
        return 0;
 }