drm/msm/dsi: Move dsi panel init into modeset init path
authorSean Paul <seanpaul@chromium.org>
Mon, 17 Jun 2019 20:12:57 +0000 (16:12 -0400)
committerSean Paul <seanpaul@chromium.org>
Thu, 20 Jun 2019 18:42:17 +0000 (14:42 -0400)
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
drivers/gpu/drm/msm/dsi/dsi_manager.c

index a48a54005f508a81b4087e09854f29c9ec4ce6b2..630af00bbe9ac66ebb5fbd44b31983f8e0b81a01 100644 (file)
@@ -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)