summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorMaxime Ripard <mripard@kernel.org>2026-03-05 10:04:53 +0100
committerMaxime Ripard <mripard@kernel.org>2026-03-24 13:54:28 +0100
commitf3934e12f20c552f764e6488aaa1ab76cdc20343 (patch)
tree0a75d8b809e3089d3758ad2201dc4a0fc419d5e9 /include
parentd994acc526c70d40ec9029cfe03d08ee411083c5 (diff)
drm/connector: Introduce drm_output_color_format enum
The EDID parsing code initially introduced the DRM_COLOR_FORMAT_* defines to represent the sink capabilities. Since a given sink could support multiple formats, it was first defined as a bitmask. However, the core and drivers have since leveraged those defines to represent both the supported formats but also the current format being used. Considering the latter case, the more natural, and consistent, thing to do would be to create an enum of all the possible formats, and then list the supported formats using a bitmask of the individual enum values. Let's create a new enum following that pattern, drm_output_color_format, while maintaining the DRM_COLOR_FORMAT_* compatibility to make the transition easier. Acked-by: Jani Nikula <jani.nikula@intel.com> Reviewed-by: Liviu Dudau <liviu.dudau@arm.com> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> Link: https://lore.kernel.org/r/20260305-drm-rework-color-formats-v3-1-f3935f6db579@kernel.org Signed-off-by: Maxime Ripard <mripard@kernel.org>
Diffstat (limited to 'include')
-rw-r--r--include/drm/drm_connector.h42
1 files changed, 34 insertions, 8 deletions
diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
index c18be8c19de0..227f61904386 100644
--- a/include/drm/drm_connector.h
+++ b/include/drm/drm_connector.h
@@ -557,6 +557,31 @@ enum drm_colorspace {
};
/**
+ * enum drm_output_color_format - Output Color Format
+ *
+ * This enum is a consolidated color format list supported by
+ * connectors. It's only ever really been used for HDMI and DP so far,
+ * so it's not exhaustive and can be extended to represent other formats
+ * in the future.
+ *
+ *
+ * @DRM_OUTPUT_COLOR_FORMAT_RGB444:
+ * RGB output format
+ * @DRM_OUTPUT_COLOR_FORMAT_YCBCR444:
+ * YCbCr 4:4:4 output format (ie. not subsampled)
+ * @DRM_OUTPUT_COLOR_FORMAT_YCBCR422:
+ * YCbCr 4:2:2 output format (ie. with horizontal subsampling)
+ * @DRM_OUTPUT_COLOR_FORMAT_YCBCR420:
+ * YCbCr 4:2:0 output format (ie. with horizontal and vertical subsampling)
+ */
+enum drm_output_color_format {
+ DRM_OUTPUT_COLOR_FORMAT_RGB444 = 0,
+ DRM_OUTPUT_COLOR_FORMAT_YCBCR444,
+ DRM_OUTPUT_COLOR_FORMAT_YCBCR422,
+ DRM_OUTPUT_COLOR_FORMAT_YCBCR420,
+};
+
+/**
* enum drm_bus_flags - bus_flags info for &drm_display_info
*
* This enum defines signal polarities and clock edge information for signals on
@@ -699,10 +724,10 @@ struct drm_display_info {
*/
enum subpixel_order subpixel_order;
-#define DRM_COLOR_FORMAT_RGB444 (1<<0)
-#define DRM_COLOR_FORMAT_YCBCR444 (1<<1)
-#define DRM_COLOR_FORMAT_YCBCR422 (1<<2)
-#define DRM_COLOR_FORMAT_YCBCR420 (1<<3)
+#define DRM_COLOR_FORMAT_RGB444 (1 << DRM_OUTPUT_COLOR_FORMAT_RGB444)
+#define DRM_COLOR_FORMAT_YCBCR444 (1 << DRM_OUTPUT_COLOR_FORMAT_YCBCR444)
+#define DRM_COLOR_FORMAT_YCBCR422 (1 << DRM_OUTPUT_COLOR_FORMAT_YCBCR422)
+#define DRM_COLOR_FORMAT_YCBCR420 (1 << DRM_OUTPUT_COLOR_FORMAT_YCBCR420)
/**
* @panel_orientation: Read only connector property for built-in panels,
@@ -714,10 +739,11 @@ struct drm_display_info {
int panel_orientation;
/**
- * @color_formats: HDMI Color formats, selects between RGB and YCrCb
- * modes. Used DRM_COLOR_FORMAT\_ defines, which are _not_ the same ones
- * as used to describe the pixel format in framebuffers, and also don't
- * match the formats in @bus_formats which are shared with v4l.
+ * @color_formats: HDMI Color formats, selects between RGB and
+ * YCbCr modes. Uses a bitmask of DRM_OUTPUT_COLOR_FORMAT\_
+ * defines, which are _not_ the same ones as used to describe
+ * the pixel format in framebuffers, and also don't match the
+ * formats in @bus_formats which are shared with v4l.
*/
u32 color_formats;