Hi Luca,

On Mon, Mar 30, 2026 at 09:25:51PM +0200, Luca Ceresoli wrote:
> Convert this driver to DRM_BRIDGE_ATTACH_NO_CONNECTOR and to the
> drm_bridge_connector framework which is the current DRM bridge best
> practice.
> 
> Tested-by: Martyn Welch <[email protected]>
> Tested-by: Alexander Stein <[email protected]> # 
> TQMa8MPxL/MBa8MPxL
> Signed-off-by: Luca Ceresoli <[email protected]>
> 
> ---
> 
> Changes in v2:
> - Added missing select DRM_DISPLAY_HELPER in Kconfig
> - Rebased on previous patch changes
> ---
>  drivers/gpu/drm/mxsfb/Kconfig     |  2 ++
>  drivers/gpu/drm/mxsfb/lcdif_drv.c | 16 +++++++++++++++-
>  2 files changed, 17 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/mxsfb/Kconfig b/drivers/gpu/drm/mxsfb/Kconfig
> index 264e74f45554..31db7a824a93 100644
> --- a/drivers/gpu/drm/mxsfb/Kconfig
> +++ b/drivers/gpu/drm/mxsfb/Kconfig
> @@ -33,6 +33,8 @@ config DRM_IMX_LCDIF
>       select DRM_GEM_DMA_HELPER
>       select DRM_PANEL
>       select DRM_PANEL_BRIDGE
> +     select DRM_DISPLAY_HELPER
> +     select DRM_BRIDGE_CONNECTOR
>       help
>         Choose this option if you have an LCDIFv3 LCD controller.
>         Those devices are found in various i.MX SoC (i.MX8MP,
> diff --git a/drivers/gpu/drm/mxsfb/lcdif_drv.c 
> b/drivers/gpu/drm/mxsfb/lcdif_drv.c
> index c8ba8f9b1da8..7f07ae24e0dc 100644
> --- a/drivers/gpu/drm/mxsfb/lcdif_drv.c
> +++ b/drivers/gpu/drm/mxsfb/lcdif_drv.c
> @@ -18,6 +18,7 @@
>  #include <drm/clients/drm_client_setup.h>
>  #include <drm/drm_atomic_helper.h>
>  #include <drm/drm_bridge.h>
> +#include <drm/drm_bridge_connector.h>
>  #include <drm/drm_drv.h>
>  #include <drm/drm_encoder.h>
>  #include <drm/drm_fbdev_dma.h>
> @@ -57,6 +58,7 @@ static int lcdif_attach_bridge(struct lcdif_drm_private 
> *lcdif)
>               struct of_endpoint of_ep;
>               struct drm_bridge *bridge;
>               struct drm_encoder *encoder;
> +             struct drm_connector *connector;
>               int ret;
>  
>               if (!of_device_is_available(remote))
> @@ -86,11 +88,23 @@ static int lcdif_attach_bridge(struct lcdif_drm_private 
> *lcdif)
>                                            "Failed to initialize encoder for 
> endpoint%u\n",
>                                            of_ep.id);
>  
> -             ret = drm_bridge_attach(encoder, bridge, NULL, 0);
> +             ret = drm_bridge_attach(encoder, bridge, NULL, 
> DRM_BRIDGE_ATTACH_NO_CONNECTOR);

It seems that only analogix-anx6345.c, analogix-anx78xx.c and analogix_dp_core.c
don't allow DRM_BRIDGE_ATTACH_NO_CONNECTOR, since they error out when attaching
the bridge with the flag:

if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) {
         DRM_ERROR("Fix bridge driver to make connector optional!");
         return -EINVAL;
}

Looks like i.MX8MP platforms don't use these drivers.
But, are we completely safe here by adding the flag?  You also mentioned
"pitfalls" in commit mesg, which makes me a bit more worried.

Sorry for not bringing this up in v1.

>               if (ret)
>                       return dev_err_probe(dev, ret,
>                                            "Failed to attach bridge for 
> endpoint%u\n",
>                                            of_ep.id);
> +
> +             connector = drm_bridge_connector_init(lcdif->drm, encoder);

Also, kernel doc of drm_bridge_connector.c says:

 * To make use of this helper, all bridges in the chain shall report bridge
 * operation flags (&drm_bridge->ops) and bridge output type
 * (&drm_bridge->type), as well as the DRM_BRIDGE_ATTACH_NO_CONNECTOR attach
 * flag (none of the bridges shall create a DRM connector directly).

Are you sure that we are safe to use this helper?

> +             if (IS_ERR(connector))
> +                     return dev_err_probe(dev, PTR_ERR(connector),
> +                                          "Failed to init bridge_connector 
> for endpoint%u\n",
> +                                          of_ep.id);
> +
> +             ret = drm_connector_attach_encoder(connector, encoder);
> +             if (ret)
> +                     return dev_err_probe(dev, ret,
> +                                          "Failed to attach connector for 
> endpoint%u\n",
> +                                          of_ep.id);
>       }
>  
>       return 0;
> 

-- 
Regards,
Liu Ying

Reply via email to