On Wed, Apr 23, 2025 at 07:04:16PM -0700, Abhinav Kumar wrote: > > > On 2/26/2025 6:25 PM, Dmitry Baryshkov wrote: > > LVDS support in MDP4 driver makes use of drm_connector directly. However > > LCDC encoder and LVDS connector are wrappers around drm_panel. Switch > > them to use drm_panel_bridge/drm_bridge_connector. This allows using > > standard interface for the drm_panel and also inserting additional > > bridges between encoder and panel. > > > > Signed-off-by: Dmitry Baryshkov <dmitry.barysh...@linaro.org> > > --- > > drivers/gpu/drm/msm/Makefile | 1 - > > drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c | 34 +++++-- > > drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.h | 6 +- > > drivers/gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c | 20 +---- > > .../gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c | 100 > > --------------------- > > 5 files changed, 28 insertions(+), 133 deletions(-) > > > > @@ -199,27 +201,43 @@ static int mdp4_modeset_init_intf(struct mdp4_kms > > *mdp4_kms, > > * bail out early if there is no panel node (no need to > > * initialize LCDC encoder and LVDS connector) > > */ > > - panel_node = of_graph_get_remote_node(dev->dev->of_node, 0, 0); > > - if (!panel_node) > > - return 0; > > + next_bridge = devm_drm_of_get_bridge(dev->dev, > > dev->dev->of_node, 0, 0); > > + if (IS_ERR(next_bridge)) { > > + ret = PTR_ERR(next_bridge); > > + if (ret == -ENODEV) > > + return 0; > > + return ret; > > + } > > - encoder = mdp4_lcdc_encoder_init(dev, panel_node); > > + encoder = mdp4_lcdc_encoder_init(dev); > > if (IS_ERR(encoder)) { > > DRM_DEV_ERROR(dev->dev, "failed to construct LCDC > > encoder\n"); > > - of_node_put(panel_node); > > return PTR_ERR(encoder); > > } > > /* LCDC can be hooked to DMA_P (TODO: Add DMA_S later?) */ > > encoder->possible_crtcs = 1 << DMA_P; > > - connector = mdp4_lvds_connector_init(dev, panel_node, encoder); > > + ret = drm_bridge_attach(encoder, next_bridge, NULL, > > DRM_BRIDGE_ATTACH_NO_CONNECTOR); > > + if (ret) { > > + DRM_DEV_ERROR(dev->dev, "failed to attach LVDS > > panel/bridge: %d\n", ret); > > + > > + return ret; > > + } > > Can you pls point me to the lvds bridge used with this apq8064 board? I was > unable to find it. Just wanted to compare that against this while reviewing.
It's the panel bridge, wrapping one of the LVDS panels. > > + > > + connector = drm_bridge_connector_init(dev, encoder); > > if (IS_ERR(connector)) { > > DRM_DEV_ERROR(dev->dev, "failed to initialize LVDS > > connector\n"); > > - of_node_put(panel_node); > > return PTR_ERR(connector); > > } > > + ret = drm_connector_attach_encoder(connector, encoder); > > + if (ret) { > > + DRM_DEV_ERROR(dev->dev, "failed to attach LVDS > > connector: %d\n", ret); > > + > > + return ret; > > + } > > + > > break; > > case DRM_MODE_ENCODER_TMDS: > > encoder = mdp4_dtv_encoder_init(dev); -- With best wishes Dmitry