summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/sysfb/drm_sysfb.c
diff options
context:
space:
mode:
authorThomas Zimmermann <tzimmermann@suse.de>2026-02-17 16:56:20 +0100
committerThomas Zimmermann <tzimmermann@suse.de>2026-02-20 14:38:23 +0100
commitb3728905dca29ea4e00c0587f27c3a637b13b2d8 (patch)
treebc24a11dc730e101e8b362c5de26f8a5fce0102f /drivers/gpu/drm/sysfb/drm_sysfb.c
parent27fc52b5505a3acca96b884a4bf1345344e5a566 (diff)
drm/sysfb: Generalize pixel-format matching
Provide drm_sysfb_get_format(), a helper that finds a specific DRM format from a list of pixel formats. The new function builds upon drm_sysfb_get_format_si(), which finds the DRM format from a given instance of struct screen_info. Now get the screen_info's pixel format in the caller. Allows for matching pixel formats in drivers without screen_info. Convert the callers in efidrm and vesadrm to the new interface. Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Reviewed-by: Javier Martinez Canillas <javierm@redhat.com> Acked-by: Julius Werner <jwerner@chromium.org> Link: https://patch.msgid.link/20260217155836.96267-11-tzimmermann@suse.de
Diffstat (limited to 'drivers/gpu/drm/sysfb/drm_sysfb.c')
-rw-r--r--drivers/gpu/drm/sysfb/drm_sysfb.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/gpu/drm/sysfb/drm_sysfb.c b/drivers/gpu/drm/sysfb/drm_sysfb.c
index 308f82153b15..fbfb37d0fae1 100644
--- a/drivers/gpu/drm/sysfb/drm_sysfb.c
+++ b/drivers/gpu/drm/sysfb/drm_sysfb.c
@@ -31,5 +31,29 @@ int drm_sysfb_get_validated_int0(struct drm_device *dev, const char *name,
}
EXPORT_SYMBOL(drm_sysfb_get_validated_int0);
+const struct drm_format_info *drm_sysfb_get_format(struct drm_device *dev,
+ const struct drm_sysfb_format *formats,
+ size_t nformats,
+ const struct pixel_format *pixel)
+{
+ const struct drm_format_info *format = NULL;
+ size_t i;
+
+ for (i = 0; i < nformats; ++i) {
+ const struct drm_sysfb_format *f = &formats[i];
+
+ if (pixel_format_equal(pixel, &f->pixel)) {
+ format = drm_format_info(f->fourcc);
+ break;
+ }
+ }
+
+ if (!format)
+ drm_warn(dev, "No compatible color format found\n");
+
+ return format;
+}
+EXPORT_SYMBOL(drm_sysfb_get_format);
+
MODULE_DESCRIPTION("Helpers for DRM sysfb drivers");
MODULE_LICENSE("GPL");