[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <sze7kbefltaduma5x2ch2zmz7lvrcsddjdbehjjh66y2xoodem@cky22gnkqvxe>
Date: Sat, 26 Apr 2025 01:05:34 +0300
From: Dmitry Baryshkov <dmitry.baryshkov@....qualcomm.com>
To: Abhinav Kumar <quic_abhinavk@...cinc.com>
Cc: Dmitry Baryshkov <dmitry.baryshkov@...aro.org>,
Rob Clark <robdclark@...il.com>, Sean Paul <sean@...rly.run>,
Marijn Suijten <marijn.suijten@...ainline.org>,
Maarten Lankhorst <maarten.lankhorst@...ux.intel.com>,
Maxime Ripard <mripard@...nel.org>,
Thomas Zimmermann <tzimmermann@...e.de>,
David Airlie <airlied@...il.com>, Simona Vetter <simona@...ll.ch>,
Rob Herring <robh@...nel.org>,
Krzysztof Kozlowski <krzk+dt@...nel.org>,
Conor Dooley <conor+dt@...nel.org>,
Bjorn Andersson <andersson@...nel.org>,
Konrad Dybcio <konradybcio@...nel.org>, linux-arm-msm@...r.kernel.org,
dri-devel@...ts.freedesktop.org, freedreno@...ts.freedesktop.org,
devicetree@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v3 6/7] drm/msm/mdp4: switch LVDS to use
drm_bridge/_connector
On Fri, Apr 25, 2025 at 01:01:10PM -0700, Abhinav Kumar wrote:
>
>
> On 4/25/2025 2:27 AM, Dmitry Baryshkov wrote:
> > On Fri, 25 Apr 2025 at 00:00, Abhinav Kumar <quic_abhinavk@...cinc.com> wrote:
> > >
> > >
> > >
> > > On 4/24/2025 3:23 AM, Dmitry Baryshkov wrote:
> > > > 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.baryshkov@...aro.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.
> > > >
> > >
> > > Yes but what I wanted to check was which LVDS panel was being used so
> > > far. Looks like for arm32 the dts is missing? As I couldnt find the lvds
> > > out endpoint. So can you pls point me to the lvds panel you verified
> > > this with?
> >
> > I used the AUO b101xtn01 panel connected to the LVDS connector on the
> > IFC6410. I'm not posting DT bits since the panel is not a part of the
> > kit.
> >
>
> Ok, so at this point of time, this is just the driver piece which does not
> have a real HW in the tree to be verified with.
More or less so. Srini tried to push the panel in 2015 ([1]). PR was
rejected and then nobody ever implemented EDID-based selection for LVDS
panels. I simply soldered the LVDS cable and used more or less the same
patch (I can post it separately if necessary). To verify the pipeline
you can use any LVDS panel defined in the DT, it should be enough to
verify it.
[1] https://lore.kernel.org/linux-arm-msm/1438088076-17606-1-git-send-email-srinivas.kandagatla@linaro.org/
>
>
> > >
> > >
> > > > > > +
> > > > > > + 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
Powered by blists - more mailing lists