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] -=-=-=-=-=-=-=-=-=-=-=-