Use the newly created wrapper drm_fb_helper functions instead of calling
core fbdev functions directly. They also simplify the fb_info creation.

COMPILE TESTED ONLY.

Cc: Daniel Vetter <daniel.vetter at ffwll.ch>
Cc: David Airlie <airlied at linux.ie>
Cc: Alex Deucher <alexander.deucher at amd.com>

Signed-off-by: Archit Taneja <architt at codeaurora.org>
---
 drivers/gpu/drm/mgag200/mgag200_drv.c  |  3 ++-
 drivers/gpu/drm/mgag200/mgag200_fb.c   | 39 +++++++---------------------------
 drivers/gpu/drm/mgag200/mgag200_main.c |  2 +-
 3 files changed, 11 insertions(+), 33 deletions(-)

diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.c 
b/drivers/gpu/drm/mgag200/mgag200_drv.c
index 9774599..38363f8 100644
--- a/drivers/gpu/drm/mgag200/mgag200_drv.c
+++ b/drivers/gpu/drm/mgag200/mgag200_drv.c
@@ -55,7 +55,8 @@ static void mgag200_kick_out_firmware_fb(struct pci_dev *pdev)
 #ifdef CONFIG_X86
        primary = pdev->resource[PCI_ROM_RESOURCE].flags & 
IORESOURCE_ROM_SHADOW;
 #endif
-       remove_conflicting_framebuffers(ap, "mgag200drmfb", primary);
+       drm_fb_helper_remove_conflicting_framebuffers(ap, "mgag200drmfb",
+               primary);
        kfree(ap);
 }

diff --git a/drivers/gpu/drm/mgag200/mgag200_fb.c 
b/drivers/gpu/drm/mgag200/mgag200_fb.c
index c36b830..dc06f8b 100644
--- a/drivers/gpu/drm/mgag200/mgag200_fb.c
+++ b/drivers/gpu/drm/mgag200/mgag200_fb.c
@@ -101,7 +101,7 @@ static void mga_fillrect(struct fb_info *info,
                         const struct fb_fillrect *rect)
 {
        struct mga_fbdev *mfbdev = info->par;
-       sys_fillrect(info, rect);
+       drm_fb_helper_sys_fillrect(info, rect);
        mga_dirty_update(mfbdev, rect->dx, rect->dy, rect->width,
                         rect->height);
 }
@@ -110,7 +110,7 @@ static void mga_copyarea(struct fb_info *info,
                         const struct fb_copyarea *area)
 {
        struct mga_fbdev *mfbdev = info->par;
-       sys_copyarea(info, area);
+       drm_fb_helper_sys_copyarea(info, area);
        mga_dirty_update(mfbdev, area->dx, area->dy, area->width,
                         area->height);
 }
@@ -119,7 +119,7 @@ static void mga_imageblit(struct fb_info *info,
                          const struct fb_image *image)
 {
        struct mga_fbdev *mfbdev = info->par;
-       sys_imageblit(info, image);
+       drm_fb_helper_sys_imageblit(info, image);
        mga_dirty_update(mfbdev, image->dx, image->dy, image->width,
                         image->height);
 }
@@ -166,7 +166,6 @@ static int mgag200fb_create(struct drm_fb_helper *helper,
        struct fb_info *info;
        struct drm_framebuffer *fb;
        struct drm_gem_object *gobj = NULL;
-       struct device *device = &dev->pdev->dev;
        struct mgag200_bo *bo;
        int ret;
        void *sysram;
@@ -191,9 +190,9 @@ static int mgag200fb_create(struct drm_fb_helper *helper,
        if (!sysram)
                return -ENOMEM;

-       info = framebuffer_alloc(0, device);
-       if (info == NULL)
-               return -ENOMEM;
+       info = drm_fb_helper_alloc_fbi(helper);
+       if (IS_ERR(info))
+               return PTR_ERR(info);

        info->par = mfbdev;

@@ -208,14 +207,6 @@ static int mgag200fb_create(struct drm_fb_helper *helper,

        /* setup helper */
        mfbdev->helper.fb = fb;
-       mfbdev->helper.fbdev = info;
-
-       ret = fb_alloc_cmap(&info->cmap, 256, 0);
-       if (ret) {
-               DRM_ERROR("%s: can't allocate color map\n", info->fix.id);
-               ret = -ENOMEM;
-               goto out;
-       }

        strcpy(info->fix.id, "mgadrmfb");

@@ -223,11 +214,6 @@ static int mgag200fb_create(struct drm_fb_helper *helper,
        info->fbops = &mgag200fb_ops;

        /* setup aperture base/size for vesafb takeover */
-       info->apertures = alloc_apertures(1);
-       if (!info->apertures) {
-               ret = -ENOMEM;
-               goto out;
-       }
        info->apertures->ranges[0].base = mdev->dev->mode_config.fb_base;
        info->apertures->ranges[0].size = mdev->mc.vram_size;

@@ -242,24 +228,15 @@ static int mgag200fb_create(struct drm_fb_helper *helper,
        DRM_DEBUG_KMS("allocated %dx%d\n",
                      fb->width, fb->height);
        return 0;
-out:
-       return ret;
 }

 static int mga_fbdev_destroy(struct drm_device *dev,
                                struct mga_fbdev *mfbdev)
 {
-       struct fb_info *info;
        struct mga_framebuffer *mfb = &mfbdev->mfb;

-       if (mfbdev->helper.fbdev) {
-               info = mfbdev->helper.fbdev;
-
-               unregister_framebuffer(info);
-               if (info->cmap.len)
-                       fb_dealloc_cmap(&info->cmap);
-               framebuffer_release(info);
-       }
+       drm_fb_helper_unregister_fbi(&mfbdev->helper);
+       drm_fb_helper_release_fbi(&mfbdev->helper);

        if (mfb->obj) {
                drm_gem_object_unreference_unlocked(mfb->obj);
diff --git a/drivers/gpu/drm/mgag200/mgag200_main.c 
b/drivers/gpu/drm/mgag200/mgag200_main.c
index f6b283b..b435d3c 100644
--- a/drivers/gpu/drm/mgag200/mgag200_main.c
+++ b/drivers/gpu/drm/mgag200/mgag200_main.c
@@ -128,7 +128,7 @@ static int mga_vram_init(struct mga_device *mdev)
        aper->ranges[0].base = mdev->mc.vram_base;
        aper->ranges[0].size = mdev->mc.vram_window;

-       remove_conflicting_framebuffers(aper, "mgafb", true);
+       drm_fb_helper_remove_conflicting_framebuffers(aper, "mgafb", true);
        kfree(aper);

        if (!devm_request_mem_region(mdev->dev->dev, mdev->mc.vram_base, 
mdev->mc.vram_window,
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
hosted by The Linux Foundation

Reply via email to