drm/msm/dsi: Move dsi panel init into modeset init path [Linux 5.3]

This Linux kernel change "drm/msm/dsi: Move dsi panel init into modeset init path" is included in the Linux 5.3 release. This change is authored by Sean Paul <seanpaul [at] chromium.org> on Mon Jun 17 16:12:57 2019 -0400. The commit for this change in Linux stable tree is 6d5e784 (patch).

drm/msm/dsi: Move dsi panel init into modeset init path

Since deferred probe from the modeset init path now works, we can move
the panel initialization from detect() into connector init. This
avoids doing work in detect() and hopefully will result in a more
deterministic boot sequence between devices with a dsi panel, and those
with an external bridge.

Reviewed-by: Rob Clark <robdclark@chromium.org>
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20190617201301.133275-9-sean@poorly.run

There are 17 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 drivers/gpu/drm/msm/dsi/dsi_manager.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/dsi/dsi_manager.c
index a48a540..630af00 100644
--- a/drivers/gpu/drm/msm/dsi/dsi_manager.c
+++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c
@@ -312,13 +312,6 @@ static enum drm_connector_status dsi_mgr_connector_detect(
    int id = dsi_mgr_connector_get_id(connector);
    struct msm_dsi *msm_dsi = dsi_mgr_get_dsi(id);

-   DBG("id=%d", id);
-   if (!msm_dsi->panel) {
-       int ret = msm_dsi_manager_panel_init(connector, id);
-       if (ret)
-           return connector_status_disconnected;
-   }
-
    return msm_dsi->panel ? connector_status_connected :
        connector_status_disconnected;
 }
@@ -631,7 +624,17 @@ struct drm_connector *msm_dsi_manager_connector_init(u8 id)

    drm_connector_attach_encoder(connector, msm_dsi->encoder);

+   ret = msm_dsi_manager_panel_init(connector, id);
+   if (ret) {
+       DRM_DEV_ERROR(msm_dsi->dev->dev, "init panel failed %d\n", ret);
+       goto fail;
+   }
+
    return connector;
+
+fail:
+   connector->funcs->destroy(msm_dsi->connector);
+   return ERR_PTR(ret);
 }

 bool msm_dsi_manager_validate_current_config(u8 id)

Leave a Reply

Your email address will not be published. Required fields are marked *