]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/connector: hdmi: Use YUV420 output format as an RGB fallback
authorCristian Ciocaltea <cristian.ciocaltea@collabora.com>
Tue, 27 May 2025 12:11:14 +0000 (15:11 +0300)
committerMaxime Ripard <mripard@kernel.org>
Mon, 2 Jun 2025 09:02:33 +0000 (11:02 +0200)
Try to make use of YUV420 when computing the best output format and
RGB cannot be supported for any of the available color depths.

Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
Reviewed-by: Maxime Ripard <mripard@kernel.org>
Link: https://lore.kernel.org/r/20250527-hdmi-conn-yuv-v5-6-74c9c4a8ac0c@collabora.com
Signed-off-by: Maxime Ripard <mripard@kernel.org>
drivers/gpu/drm/display/drm_hdmi_state_helper.c

index a9733a2e1b632e02f535c5ece64762f8ed9e4af2..2c641add743466841cb2e777a07633dc5686ccd8 100644 (file)
@@ -649,12 +649,22 @@ hdmi_compute_config(const struct drm_connector *connector,
                                       8, connector->max_bpc);
        int ret;
 
-       /*
-        * TODO: Add support for YCbCr420 output for HDMI 2.0 capable
-        * devices, for modes that only support YCbCr420.
-        */
        ret = hdmi_compute_format_bpc(connector, conn_state, mode, max_bpc,
                                      HDMI_COLORSPACE_RGB);
+       if (ret) {
+               if (connector->ycbcr_420_allowed) {
+                       ret = hdmi_compute_format_bpc(connector, conn_state,
+                                                     mode, max_bpc,
+                                                     HDMI_COLORSPACE_YUV420);
+                       if (ret)
+                               drm_dbg_kms(connector->dev,
+                                           "YUV420 output format doesn't work.\n");
+               } else {
+                       drm_dbg_kms(connector->dev,
+                                   "YUV420 output format not allowed for connector.\n");
+                       ret = -EINVAL;
+               }
+       }
 
        return ret;
 }