From: Quanyang Wang <quanyang.w...@windriver.com>

Since the function drm_gem_fbdev_fb_create has been removed in
commit 73415b4ea5b5 ("drm/fb: remove unused function: 
drm_gem_fbdev_fb_create()"),
add a new function xlnx_drm_framebuffer_init to create a drm_framebuffer 
structure.

Signed-off-by: Quanyang Wang <quanyang.w...@windriver.com>
---
 drivers/gpu/drm/xlnx/xlnx_fb.c | 40 ++++++++++++++++++++++++++++++++--
 1 file changed, 38 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/xlnx/xlnx_fb.c b/drivers/gpu/drm/xlnx/xlnx_fb.c
index dfe769d4788c..51ed23270d57 100644
--- a/drivers/gpu/drm/xlnx/xlnx_fb.c
+++ b/drivers/gpu/drm/xlnx/xlnx_fb.c
@@ -50,6 +50,36 @@ static struct drm_framebuffer_funcs xlnx_fb_funcs = {
        .create_handle  = drm_gem_fb_create_handle,
 };
 
+struct drm_framebuffer *
+xlnx_drm_framebuffer_init(struct drm_device *dev,
+                           const struct drm_mode_fb_cmd2 *mode_cmd,
+                           struct drm_gem_object *obj)
+{
+       struct drm_framebuffer *fb;
+       int ret;
+
+       fb = kzalloc(sizeof(*fb), GFP_KERNEL);
+       if (!fb)
+               return ERR_PTR(-ENOMEM);
+
+       fb->obj[0] = obj;
+
+       drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd);
+
+       ret = drm_framebuffer_init(dev, fb, &xlnx_fb_funcs);
+       if (ret < 0) {
+               DRM_DEV_ERROR(dev->dev,
+                             "failed to initialize framebuffer\n");
+               goto err;
+       }
+
+       return fb;
+
+err:
+       kfree(fb);
+       return ERR_PTR(ret);
+}
+
 static int
 xlnx_fb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
 {
@@ -111,12 +141,19 @@ static int xlnx_fbdev_create(struct drm_fb_helper 
*fb_helper,
        struct fb_info *fbi;
        u32 format;
        const struct drm_format_info *info;
+       struct drm_mode_fb_cmd2 mode_cmd = { 0 };
        size_t bytes;
        int ret;
 
        dev_dbg(drm->dev, "surface width(%d), height(%d) and bpp(%d)\n",
                size->surface_width, size->surface_height, size->surface_bpp);
 
+       mode_cmd.width = size->surface_width;
+       mode_cmd.height = size->surface_height;
+       mode_cmd.pitches[0] = size->surface_width * (size->surface_bpp >> 3);
+       mode_cmd.pixel_format = drm_mode_legacy_fb_format(size->surface_bpp,
+                                                         size->surface_depth);
+
        size->surface_height *= fbdev->vres_mult;
        bytes_per_pixel = DIV_ROUND_UP(size->surface_bpp, 8);
        bytes = ALIGN(size->surface_width * bytes_per_pixel, fbdev->align);
@@ -139,8 +176,7 @@ static int xlnx_fbdev_create(struct drm_fb_helper 
*fb_helper,
        if (size->surface_bpp == info->cpp[0] * 8)
                size->surface_depth = info->depth;
 
-       fbdev->fb = drm_gem_fbdev_fb_create(drm, size, fbdev->align, &obj->base,
-                                           &xlnx_fb_funcs);
+       fbdev->fb = xlnx_drm_framebuffer_init(drm, &mode_cmd, &obj->base);
        if (IS_ERR(fbdev->fb)) {
                dev_err(drm->dev, "Failed to allocate DRM framebuffer.\n");
                ret = PTR_ERR(fbdev->fb);
-- 
2.17.1

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#8168): 
https://lists.yoctoproject.org/g/linux-yocto/message/8168
Mute This Topic: https://lists.yoctoproject.org/mt/65696303/21656
Group Owner: linux-yocto+ow...@lists.yoctoproject.org
Unsubscribe: https://lists.yoctoproject.org/g/linux-yocto/unsub  
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to