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.liu@xxxxxxx> > --- > 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