On Fri, Oct 18, 2024 at 02:48:13PM +0800, Liu Ying wrote:
> Initialize a connector by calling drm_bridge_connector_init() for
> each encoder so that down stream bridge drivers don't need to create
> connectors any more.
> 
> Signed-off-by: Liu Ying <victor....@nxp.com>
> ---
>  drivers/gpu/drm/mxsfb/Kconfig     |  1 +
>  drivers/gpu/drm/mxsfb/lcdif_drv.c | 17 ++++++++++++++++-
>  2 files changed, 17 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/mxsfb/Kconfig b/drivers/gpu/drm/mxsfb/Kconfig
> index 264e74f45554..06c95e556380 100644
> --- a/drivers/gpu/drm/mxsfb/Kconfig
> +++ b/drivers/gpu/drm/mxsfb/Kconfig
> @@ -27,6 +27,7 @@ config DRM_IMX_LCDIF
>       depends on DRM && OF
>       depends on COMMON_CLK
>       depends on ARCH_MXC || COMPILE_TEST
> +     select DRM_BRIDGE_CONNECTOR
>       select DRM_CLIENT_SELECTION

Missing `select DRM_DISPLAY_HELPER`. LGTM otherwise.

>       select DRM_MXS
>       select DRM_KMS_HELPER
> diff --git a/drivers/gpu/drm/mxsfb/lcdif_drv.c 
> b/drivers/gpu/drm/mxsfb/lcdif_drv.c
> index 58ccad9c425d..d4521da6675e 100644
> --- a/drivers/gpu/drm/mxsfb/lcdif_drv.c
> +++ b/drivers/gpu/drm/mxsfb/lcdif_drv.c
> @@ -16,7 +16,9 @@
>  
>  #include <drm/drm_atomic_helper.h>
>  #include <drm/drm_bridge.h>
> +#include <drm/drm_bridge_connector.h>
>  #include <drm/drm_client_setup.h>
> +#include <drm/drm_connector.h>
>  #include <drm/drm_drv.h>
>  #include <drm/drm_encoder.h>
>  #include <drm/drm_fbdev_dma.h>
> @@ -56,6 +58,7 @@ static int lcdif_attach_bridge(struct lcdif_drm_private 
> *lcdif)
>               struct device_node *remote;
>               struct of_endpoint of_ep;
>               struct drm_encoder *encoder;
> +             struct drm_connector *connector;
>  
>               remote = of_graph_get_remote_port_parent(ep);
>               if (!of_device_is_available(remote)) {
> @@ -97,13 +100,25 @@ static int lcdif_attach_bridge(struct lcdif_drm_private 
> *lcdif)
>                       return ret;
>               }
>  
> -             ret = drm_bridge_attach(encoder, bridge, NULL, 0);
> +             ret = drm_bridge_attach(encoder, bridge, NULL,
> +                                     DRM_BRIDGE_ATTACH_NO_CONNECTOR);
>               if (ret) {
>                       of_node_put(ep);
>                       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);
> +             if (IS_ERR(connector)) {
> +                     ret = PTR_ERR(connector);
> +                     dev_err(dev, "Failed to initialize bridge connector: 
> %d\n",
> +                             ret);
> +                     of_node_put(ep);
> +                     return ret;
> +             }
> +
> +             drm_connector_attach_encoder(connector, encoder);
>       }
>  
>       return 0;
> -- 
> 2.34.1
> 

-- 
With best wishes
Dmitry

Reply via email to