On Mon, Feb 16, 2026 at 02:01:17PM +0100, Nicolas Frattaroli wrote: > While the drm_color_format_enum enum and the hdmi_colorspace enum have > similar values, they're not identical, and HDMI's enum is defined as per > the HDMI standard. > > Meanwhile, each DRM_COLOR_FORMAT_* define has a corresponding > drm_color_format_enum, which allows conversion from the bitshifted > defines to the enum values. > > Implement conversion functions from DRM_COLOR_FORMAT bitshifted defines > to drm_color_format_enum, and from hdmi_colorspace enum values to > drm_color_format_enum enum values. > > In both conversions, an unexpected input results in a > DRM_COLOR_FORMAT_ENUM_INVALID result. The functions are kept inline > __pure to give the compiler maximum freedom to do as it pleases. > > Co-developed-by: Marius Vlad <[email protected]> > Signed-off-by: Marius Vlad <[email protected]> > Signed-off-by: Nicolas Frattaroli <[email protected]> > --- > include/drm/drm_connector.h | 53 > +++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 53 insertions(+) > > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h > index 18bd875b6918..886defdd069b 100644 > --- a/include/drm/drm_connector.h > +++ b/include/drm/drm_connector.h > @@ -2694,6 +2694,59 @@ int drm_connector_attach_color_format_property(struct > drm_connector *connector); > > const char *drm_get_color_format_name(enum drm_color_format_enum color_fmt); > > +/** > + * drm_color_format_to_enum - convert a single DRM_COLOR_FORMAT\_ to enum > + * @fmt: One of the possible DRM_COLOR_FORMAT\_ values > + * > + * Converts a single DRM_COLOR_FORMAT\_ value to a corresponding > + * &enum drm_color_format_enum value. Bitmasks of multiple DRM_COLOR_FORMAT\_ > + * values are not supported, as they would not map to a single enum value. > + * > + * Returns converted enum value on success, or > %DRM_COLOR_FORMAT_ENUM_INVALID on > + * failure. > + */ > +static inline enum drm_color_format_enum __pure > +drm_color_format_to_enum(u32 fmt) > +{ > + switch (fmt) { > + case DRM_COLOR_FORMAT_RGB444: > + return DRM_COLOR_FORMAT_ENUM_RGB444; > + case DRM_COLOR_FORMAT_YCBCR444: > + return DRM_COLOR_FORMAT_ENUM_YCBCR444; > + case DRM_COLOR_FORMAT_YCBCR422: > + return DRM_COLOR_FORMAT_ENUM_YCBCR422; > + case DRM_COLOR_FORMAT_YCBCR420: > + return DRM_COLOR_FORMAT_ENUM_YCBCR420; > + default: > + return DRM_COLOR_FORMAT_ENUM_INVALID; > + } > +} > + > +/** > + * drm_color_format_enum_from_hdmi_colorspace - convert hdmi_colorspace enum > to > + * drm_color_format_enum > + * @fmt: The &enum hdmi_colorspace to convert > + * > + * Returns the converted result on success, or > %DRM_COLOR_FORMAT_ENUM_INVALID on > + * failure. > + */ > +static inline enum drm_color_format_enum __pure > +drm_color_format_enum_from_hdmi_colorspace(enum hdmi_colorspace fmt) > +{ > + switch (fmt) { > + case HDMI_COLORSPACE_RGB: > + return DRM_COLOR_FORMAT_ENUM_RGB444; > + case HDMI_COLORSPACE_YUV444: > + return DRM_COLOR_FORMAT_ENUM_YCBCR444; > + case HDMI_COLORSPACE_YUV422: > + return DRM_COLOR_FORMAT_ENUM_YCBCR422; > + case HDMI_COLORSPACE_YUV420: > + return DRM_COLOR_FORMAT_ENUM_YCBCR420; > + default: > + return DRM_COLOR_FORMAT_ENUM_INVALID; > + } > +} > +
With my series, you probably don't need this anymore and we just need the drm_output_color_format -> hdmi_colorspace conversion in the infoframe generation code. Maxime
signature.asc
Description: PGP signature
