Merge tag 'drm-next-2019-09-18' of git://anongit.freedesktop.org/drm/drm
[sfrench/cifs-2.6.git] / drivers / gpu / drm / ast / ast_mode.c
index a1cb020e07e502197428bc0fca447c650c381110..d349c721501c6cb5ee890b5c2906479e0b865daf 100644 (file)
 /*
  * Authors: Dave Airlie <airlied@redhat.com>
  */
+
 #include <linux/export.h>
-#include <drm/drmP.h>
+#include <linux/pci.h>
+
 #include <drm/drm_crtc.h>
 #include <drm/drm_crtc_helper.h>
+#include <drm/drm_fourcc.h>
+#include <drm/drm_gem_vram_helper.h>
 #include <drm/drm_plane_helper.h>
 #include <drm/drm_probe_helper.h>
-#include "ast_drv.h"
 
+#include "ast_drv.h"
 #include "ast_tables.h"
 
 static struct ast_i2c_chan *ast_i2c_create(struct drm_device *dev);
@@ -525,28 +529,16 @@ static int ast_crtc_do_set_base(struct drm_crtc *crtc,
                                struct drm_framebuffer *fb,
                                int x, int y, int atomic)
 {
-       struct ast_private *ast = crtc->dev->dev_private;
-       struct drm_gem_object *obj;
-       struct ast_framebuffer *ast_fb;
        struct drm_gem_vram_object *gbo;
        int ret;
        s64 gpu_addr;
-       void *base;
 
        if (!atomic && fb) {
-               ast_fb = to_ast_framebuffer(fb);
-               obj = ast_fb->obj;
-               gbo = drm_gem_vram_of_gem(obj);
-
-               /* unmap if console */
-               if (&ast->fbdev->afb == ast_fb)
-                       drm_gem_vram_kunmap(gbo);
+               gbo = drm_gem_vram_of_gem(fb->obj[0]);
                drm_gem_vram_unpin(gbo);
        }
 
-       ast_fb = to_ast_framebuffer(crtc->primary->fb);
-       obj = ast_fb->obj;
-       gbo = drm_gem_vram_of_gem(obj);
+       gbo = drm_gem_vram_of_gem(crtc->primary->fb->obj[0]);
 
        ret = drm_gem_vram_pin(gbo, DRM_GEM_VRAM_PL_FLAG_VRAM);
        if (ret)
@@ -557,17 +549,6 @@ static int ast_crtc_do_set_base(struct drm_crtc *crtc,
                goto err_drm_gem_vram_unpin;
        }
 
-       if (&ast->fbdev->afb == ast_fb) {
-               /* if pushing console in kmap it */
-               base = drm_gem_vram_kmap(gbo, true, NULL);
-               if (IS_ERR(base)) {
-                       ret = PTR_ERR(base);
-                       DRM_ERROR("failed to kmap fbcon\n");
-               } else {
-                       ast_fbdev_set_base(ast, gpu_addr);
-               }
-       }
-
        ast_set_offset_reg(crtc);
        ast_set_start_address_crt1(crtc, (u32)gpu_addr);
 
@@ -624,14 +605,10 @@ static void ast_crtc_disable(struct drm_crtc *crtc)
        DRM_DEBUG_KMS("\n");
        ast_crtc_dpms(crtc, DRM_MODE_DPMS_OFF);
        if (crtc->primary->fb) {
-               struct ast_private *ast = crtc->dev->dev_private;
-               struct ast_framebuffer *ast_fb = to_ast_framebuffer(crtc->primary->fb);
-               struct drm_gem_object *obj = ast_fb->obj;
-               struct drm_gem_vram_object *gbo = drm_gem_vram_of_gem(obj);
-
-               /* unmap if console */
-               if (&ast->fbdev->afb == ast_fb)
-                       drm_gem_vram_kunmap(gbo);
+               struct drm_framebuffer *fb = crtc->primary->fb;
+               struct drm_gem_vram_object *gbo =
+                       drm_gem_vram_of_gem(fb->obj[0]);
+
                drm_gem_vram_unpin(gbo);
        }
        crtc->primary->fb = NULL;
@@ -890,7 +867,14 @@ static int ast_connector_init(struct drm_device *dev)
                return -ENOMEM;
 
        connector = &ast_connector->base;
-       drm_connector_init(dev, connector, &ast_connector_funcs, DRM_MODE_CONNECTOR_VGA);
+       ast_connector->i2c = ast_i2c_create(dev);
+       if (!ast_connector->i2c)
+               DRM_ERROR("failed to add ddc bus for connector\n");
+
+       drm_connector_init_with_ddc(dev, connector,
+                                   &ast_connector_funcs,
+                                   DRM_MODE_CONNECTOR_VGA,
+                                   &ast_connector->i2c->adapter);
 
        drm_connector_helper_add(connector, &ast_connector_helper_funcs);
 
@@ -904,10 +888,6 @@ static int ast_connector_init(struct drm_device *dev)
        encoder = list_first_entry(&dev->mode_config.encoder_list, struct drm_encoder, head);
        drm_connector_attach_encoder(connector, encoder);
 
-       ast_connector->i2c = ast_i2c_create(dev);
-       if (!ast_connector->i2c)
-               DRM_ERROR("failed to add ddc bus for connector\n");
-
        return 0;
 }