The case of having an HDMI bridge in the pipeline which advertises
YUV420 capability via its ->supported_formats and a non-HDMI one that
didn't enable ->ycbcr_420_allowed, is incorrectly handled because
supported_formats is passed as is to the helper initializing the HDMI
connector.

Ensure HDMI_COLORSPACE_YUV420 is removed from the bitmask passed to
drmm_connector_hdmi_init() when connector's ->ycbcr_420_allowed flag
ends up not being set.

Fixes: 3ced1c687512 ("drm/display: bridge_connector: handle ycbcr_420_allowed")
Signed-off-by: Cristian Ciocaltea <[email protected]>
---
 drivers/gpu/drm/display/drm_bridge_connector.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/display/drm_bridge_connector.c 
b/drivers/gpu/drm/display/drm_bridge_connector.c
index 
512ced87ea18c74e182a558a686ddd83de891814..7d73bcee90f9a295ac8e6534ac0aa0bc46b1339c
 100644
--- a/drivers/gpu/drm/display/drm_bridge_connector.c
+++ b/drivers/gpu/drm/display/drm_bridge_connector.c
@@ -473,7 +473,10 @@ struct drm_connector *drm_bridge_connector_init(struct 
drm_device *drm,
        if (connector_type == DRM_MODE_CONNECTOR_Unknown)
                return ERR_PTR(-EINVAL);
 
-       if (bridge_connector->bridge_hdmi)
+       if (bridge_connector->bridge_hdmi) {
+               if (!connector->ycbcr_420_allowed)
+                       supported_formats &= ~BIT(HDMI_COLORSPACE_YUV420);
+
                ret = drmm_connector_hdmi_init(drm, connector,
                                               
bridge_connector->bridge_hdmi->vendor,
                                               
bridge_connector->bridge_hdmi->product,
@@ -482,10 +485,11 @@ struct drm_connector *drm_bridge_connector_init(struct 
drm_device *drm,
                                               connector_type, ddc,
                                               supported_formats,
                                               max_bpc);
-       else
+       } else {
                ret = drmm_connector_init(drm, connector,
                                          &drm_bridge_connector_funcs,
                                          connector_type, ddc);
+       }
        if (ret)
                return ERR_PTR(ret);
 

-- 
2.47.0

Reply via email to