drm: gma500: Replace drm_fb_get_bpp_depth() with drm_format_info()
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Mon, 17 Oct 2016 22:41:16 +0000 (01:41 +0300)
committerArchit Taneja <architt@codeaurora.org>
Tue, 18 Oct 2016 09:52:38 +0000 (15:22 +0530)
The driver uses drm_fb_get_bpp_depth() to check whether it can support
the format requested by userspace when creating a framebuffer. This
isn't the right API, as it doesn't differentiate between RGB formats
other than on a depth and bpp basis.

Fixing this requires non trivial changes to the drivers internals. As a
first step, replace usage of the drm_fb_get_bpp_depth() function with an
equivalent check based on drm_format_info(). This is part of a wider
effort to remove usage of the drm_fb_get_bpp_depth() function in
drivers.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Archit Taneja <architt@codeaurora.org>
Link: http://patchwork.freedesktop.org/patch/msgid/1476744081-24485-9-git-send-email-laurent.pinchart@ideasonboard.com
drivers/gpu/drm/gma500/framebuffer.c

index aee2f9733457d25aeb963d8a37c2139b299ac0b9..97daf23f3fef70bb8c6eb05f341bfbcc41d1ce77 100644 (file)
@@ -236,22 +236,20 @@ static int psb_framebuffer_init(struct drm_device *dev,
                                        const struct drm_mode_fb_cmd2 *mode_cmd,
                                        struct gtt_range *gt)
 {
-       u32 bpp, depth;
+       const struct drm_format_info *info;
        int ret;
 
-       drm_fb_get_bpp_depth(mode_cmd->pixel_format, &depth, &bpp);
+       /*
+        * Reject unknown formats, YUV formats, and formats with more than
+        * 4 bytes per pixel.
+        */
+       info = drm_format_info(mode_cmd->pixel_format);
+       if (!info || !info->depth || info->cpp[0] > 4)
+               return -EINVAL;
 
        if (mode_cmd->pitches[0] & 63)
                return -EINVAL;
-       switch (bpp) {
-       case 8:
-       case 16:
-       case 24:
-       case 32:
-               break;
-       default:
-               return -EINVAL;
-       }
+
        drm_helper_mode_fill_fb_struct(&fb->base, mode_cmd);
        fb->gtt = gt;
        ret = drm_framebuffer_init(dev, &fb->base, &psb_fb_funcs);