[PATCH v2] drm/arm/hdlcd: Replace struct simplefb_format with custom type

Liviu Dudau liviu.dudau at arm.com
Tue Jun 10 16:42:51 UTC 2025


On Tue, Jun 10, 2025 at 09:28:55AM +0200, Thomas Zimmermann wrote:
> 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 at suse.de>
> Reviewed-by: Javier Martinez Canillas <javierm at redhat.com>

Reviewed-by: Liviu Dudau <liviu.dudau at arm.com>

Are you happy to merge this yourself?

Best regards,
Liviu

> ---
>  drivers/gpu/drm/arm/hdlcd_crtc.c | 23 +++++++++++++++--------
>  1 file changed, 15 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c
> index 3cfefadc7c9d..806da0aaedf7 100644
> --- a/drivers/gpu/drm/arm/hdlcd_crtc.c
> +++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
> @@ -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))
> -- 
> 2.49.0
> 

-- 
====================
| I would like to |
| fix the world,  |
| but they're not |
| giving me the   |
 \ source code!  /
  ---------------
    ¯\_(ツ)_/¯


More information about the dri-devel mailing list