On Thu, Sep 11, 2025 at 04:07:36PM +0300, Marius Vlad wrote:
> Initialize drm_brige with advertised colors formats straight on.
> 
> Drivers that make use of DRM helpers would check the
> drm_brige::supported_formats bit-field list and refuse to use the color
> format passed. Drivers that make use of drm_bridge can pass the
> supported color formats in the bridge as well as supported color format
> for the DRM color format property.

Your commit message doesn't match patch contents. You are pushing format
selection to the instance creating drm_bridge_connector, which
frequently has no idea about the other end of the chain - the bridges
which actually send pixel data to the monitor.

We have drm_bridge::ycbcr_420_allowed with clearly defined meaning. I
think it would be wise to start from that and to describe why such a
field doesn't fulfill your needs.

> 
> This includes a fallback to RGB when Auto has been selected.
> 
> Signed-off-by: Marius Vlad <marius.v...@collabora.com>
> ---
>  drivers/gpu/drm/bridge/adv7511/adv7511_drv.c      | 2 +-
>  drivers/gpu/drm/bridge/ite-it6263.c               | 2 +-
>  drivers/gpu/drm/bridge/ti-sn65dsi86.c             | 3 ++-
>  drivers/gpu/drm/display/drm_bridge_connector.c    | 4 ++--
>  drivers/gpu/drm/imx/dcss/dcss-kms.c               | 2 +-
>  drivers/gpu/drm/mediatek/mtk_dpi.c                | 2 +-
>  drivers/gpu/drm/mediatek/mtk_dsi.c                | 2 +-
>  drivers/gpu/drm/meson/meson_encoder_cvbs.c        | 3 ++-
>  drivers/gpu/drm/meson/meson_encoder_hdmi.c        | 4 ++--
>  drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c          | 2 +-
>  drivers/gpu/drm/msm/dp/dp_drm.c                   | 3 ++-
>  drivers/gpu/drm/msm/dsi/dsi_manager.c             | 2 +-
>  drivers/gpu/drm/msm/hdmi/hdmi.c                   | 2 +-
>  drivers/gpu/drm/renesas/rcar-du/rcar_du_encoder.c | 2 +-
>  drivers/gpu/drm/renesas/rz-du/rzg2l_du_encoder.c  | 2 +-
>  drivers/gpu/drm/rockchip/cdn-dp-core.c            | 2 +-
>  drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c    | 2 +-
>  drivers/gpu/drm/rockchip/rockchip_lvds.c          | 2 +-
>  drivers/gpu/drm/tegra/hdmi.c                      | 2 +-
>  drivers/gpu/drm/tegra/rgb.c                       | 2 +-
>  drivers/gpu/drm/tidss/tidss_encoder.c             | 2 +-
>  include/drm/drm_bridge_connector.h                | 3 ++-
>  22 files changed, 28 insertions(+), 24 deletions(-)
> 
> diff --git a/drivers/gpu/drm/msm/dp/dp_drm.c b/drivers/gpu/drm/msm/dp/dp_drm.c
> index 9a461ab2f32f..8d5299849be6 100644
> --- a/drivers/gpu/drm/msm/dp/dp_drm.c
> +++ b/drivers/gpu/drm/msm/dp/dp_drm.c
> @@ -368,7 +368,8 @@ struct drm_connector *msm_dp_drm_connector_init(struct 
> msm_dp *msm_dp_display,
>  {
>       struct drm_connector *connector = NULL;
>  
> -     connector = drm_bridge_connector_init(msm_dp_display->drm_dev, encoder);
> +     connector = drm_bridge_connector_init(msm_dp_display->drm_dev, encoder,
> +                                           BIT(HDMI_COLORSPACE_RGB));

Just to point out: this is wrong.

>       if (IS_ERR(connector))
>               return connector;
>  
> diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c 
> b/drivers/gpu/drm/msm/dsi/dsi_manager.c
> index ca400924d4ee..4b87f4f78d38 100644
> --- a/drivers/gpu/drm/msm/dsi/dsi_manager.c
> +++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c
> @@ -479,7 +479,7 @@ int msm_dsi_manager_connector_init(struct msm_dsi 
> *msm_dsi,
>       if (ret)
>               return ret;
>  
> -     connector = drm_bridge_connector_init(dev, encoder);
> +     connector = drm_bridge_connector_init(dev, encoder, 
> BIT(HDMI_COLORSPACE_RGB));

And this totally depends on the bridge chain. If we have a DSI-to-HDMI
bridge somewhere in the middle, we are able to output YUV data to the
HDMI connector.

>       if (IS_ERR(connector)) {
>               DRM_ERROR("Unable to create bridge connector\n");
>               return PTR_ERR(connector);

-- 
With best wishes
Dmitry

Reply via email to