diff --git a/msm/dp/dp_display.c b/msm/dp/dp_display.c index cbd748849c..365121bc93 100644 --- a/msm/dp/dp_display.c +++ b/msm/dp/dp_display.c @@ -3347,6 +3347,7 @@ static int dp_display_mst_connector_uninstall(struct dp_display *dp_display, struct sde_connector *sde_conn; struct dp_panel *dp_panel; struct dp_display_private *dp; + struct dp_audio *audio = NULL; if (!dp_display || !connector) { DP_ERR("invalid input\n"); @@ -3372,13 +3373,17 @@ static int dp_display_mst_connector_uninstall(struct dp_display *dp_display, } dp_panel = sde_conn->drv_panel; - dp_audio_put(dp_panel->audio); + + /* Make a copy of audio structure to call into dp_audio_put later */ + audio = dp_panel->audio; dp_panel_put(dp_panel); DP_MST_DEBUG("dp mst connector uninstalled. conn:%d\n", connector->base.id); mutex_unlock(&dp->session_lock); + + dp_audio_put(audio); SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_EXIT, dp->state); return rc;