On 4/25/2025 2:51 AM, Dmitry Baryshkov wrote:
From: Dmitry Baryshkov <dmitry.barysh...@linaro.org>

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(-)

diff --git a/drivers/gpu/drm/msm/Makefile b/drivers/gpu/drm/msm/Makefile
index 
5df20cbeafb8bf07c825a1fd72719d5a56c38613..7a2ada6e2d74a902879e4f12a78ed475e5209ec2
 100644
--- a/drivers/gpu/drm/msm/Makefile
+++ b/drivers/gpu/drm/msm/Makefile
@@ -48,7 +48,6 @@ msm-display-$(CONFIG_DRM_MSM_MDP4) += \
        disp/mdp4/mdp4_dsi_encoder.o \
        disp/mdp4/mdp4_dtv_encoder.o \
        disp/mdp4/mdp4_lcdc_encoder.o \
-       disp/mdp4/mdp4_lvds_connector.o \
        disp/mdp4/mdp4_lvds_pll.o \
        disp/mdp4/mdp4_irq.o \
        disp/mdp4/mdp4_kms.o \
diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c 
b/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c
index 
689e210660a5218ed1e2d116073723215af5a187..93c9411eb422bc67b7fedb5ffce4c330310b520f
 100644
--- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c
+++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c
@@ -6,6 +6,8 @@
#include <linux/delay.h> +#include <drm/drm_bridge.h>
+#include <drm/drm_bridge_connector.h>
  #include <drm/drm_vblank.h>
#include "msm_drv.h"
@@ -189,7 +191,7 @@ static int mdp4_modeset_init_intf(struct mdp4_kms *mdp4_kms,
        struct msm_drm_private *priv = dev->dev_private;
        struct drm_encoder *encoder;
        struct drm_connector *connector;
-       struct device_node *panel_node;
+       struct drm_bridge *next_bridge;
        int dsi_id;
        int ret;
@@ -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;
+               }

Alright, I think this will protect us against the fact that there is no panel in the DT currently like before, hence

Reviewed-by: Abhinav Kumar <quic_abhin...@quicinc.com>

Reply via email to