]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/arm/hdlcd: Replace struct simplefb_format with custom type
authorThomas Zimmermann <tzimmermann@suse.de>
Tue, 10 Jun 2025 07:28:55 +0000 (09:28 +0200)
committerThomas Zimmermann <tzimmermann@suse.de>
Wed, 11 Jun 2025 07:29:47 +0000 (09:29 +0200)
Map DRM FourCC codes to pixel descriptions with an internal struct
type. Avoid simplefb's struct simplefb_format, which is for parsing
"simple-framebuffer" DT nodes. Drop the unsupported formats with
alpha channel from the list.

The HDLCD drivers uses struct simplefb_format and its default
initializer SIMPLEFB_FORMATS to map DRM_FORMAT_ constants to pixel
descriptions. The simplefb helpers are for parsing "simple-framebuffer"
DT nodes and should be avoided in other context. Therefore replace it
in hdlcd with a custom struct type and pixel descriptions from
PIXEL_FORMAT_ constants.

This change also removes including <linux/platform_data/simplefb.h>,
which includes several unrelated headers, such as <linux/fb.h>.

v2:
- drop unsupported alpha formats (Liviu)
- keep original sorting of formats (Javier)
- use anonymous type for supported_formats

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Reviewed-by: Liviu Dudau <liviu.dudau@arm.com>
Link: https://lore.kernel.org/r/20250610073027.322944-1-tzimmermann@suse.de
drivers/gpu/drm/arm/hdlcd_crtc.c

index 3cfefadc7c9d34b00ea15ef8eb28619ef2a265dd..806da0aaedf7959d7b4200088ebdbd9268780e91 100644 (file)
@@ -11,8 +11,8 @@
 
 #include <linux/clk.h>
 #include <linux/of_graph.h>
-#include <linux/platform_data/simplefb.h>
 
+#include <video/pixel_format.h>
 #include <video/videomode.h>
 
 #include <drm/drm_atomic.h>
@@ -73,7 +73,17 @@ static const struct drm_crtc_funcs hdlcd_crtc_funcs = {
        .disable_vblank = hdlcd_crtc_disable_vblank,
 };
 
-static struct simplefb_format supported_formats[] = SIMPLEFB_FORMATS;
+static const struct {
+       u32 fourcc;
+       struct pixel_format pixel;
+} supported_formats[] = {
+       { DRM_FORMAT_RGB565, PIXEL_FORMAT_RGB565 },
+       { DRM_FORMAT_XRGB1555, PIXEL_FORMAT_XRGB1555 },
+       { DRM_FORMAT_RGB888, PIXEL_FORMAT_RGB888 },
+       { DRM_FORMAT_XRGB8888, PIXEL_FORMAT_XRGB8888 },
+       { DRM_FORMAT_XBGR8888, PIXEL_FORMAT_XBGR8888 },
+       { DRM_FORMAT_XRGB2101010, PIXEL_FORMAT_XRGB2101010},
+};
 
 /*
  * Setup the HDLCD registers for decoding the pixels out of the framebuffer
@@ -83,15 +93,12 @@ static int hdlcd_set_pxl_fmt(struct drm_crtc *crtc)
        unsigned int btpp;
        struct hdlcd_drm_private *hdlcd = crtc_to_hdlcd_priv(crtc);
        const struct drm_framebuffer *fb = crtc->primary->state->fb;
-       uint32_t pixel_format;
-       struct simplefb_format *format = NULL;
+       const struct pixel_format *format = NULL;
        int i;
 
-       pixel_format = fb->format->format;
-
        for (i = 0; i < ARRAY_SIZE(supported_formats); i++) {
-               if (supported_formats[i].fourcc == pixel_format)
-                       format = &supported_formats[i];
+               if (supported_formats[i].fourcc == fb->format->format)
+                       format = &supported_formats[i].pixel;
        }
 
        if (WARN_ON(!format))