Loading drivers/gpu/drm/msm/dsi-staging/dsi_drm.c +8 −1 Original line number Diff line number Diff line Loading @@ -632,10 +632,17 @@ int dsi_conn_post_kickoff(struct drm_connector *connector) struct dsi_display_ctrl *m_ctrl, *ctrl; int i, rc = 0; if (!connector || !connector->state->best_encoder) if (!connector || !connector->state) { pr_err("invalid connector or connector state"); return -EINVAL; } encoder = connector->state->best_encoder; if (!encoder) { pr_debug("best encoder is not available"); return 0; } c_bridge = to_dsi_bridge(encoder->bridge); adj_mode = c_bridge->dsi_mode; display = c_bridge->display; Loading drivers/gpu/drm/msm/msm_atomic.c +6 −2 Original line number Diff line number Diff line Loading @@ -555,6 +555,11 @@ int msm_atomic_commit(struct drm_device *dev, struct drm_plane_state *plane_state; int i, ret; if (!priv || priv->shutdown_in_progress) { DRM_ERROR("priv is null or shutdwon is in-progress\n"); return -EINVAL; } SDE_ATRACE_BEGIN("atomic_commit"); ret = drm_atomic_helper_prepare_planes(dev, state); if (ret) { Loading Loading @@ -610,8 +615,7 @@ int msm_atomic_commit(struct drm_device *dev, * are dispatched to work queues, so that the fence preparation is * finished before the .atomic_commit returns. */ if (priv && priv->kms && priv->kms->funcs && priv->kms->funcs->prepare_fence) if (priv->kms && priv->kms->funcs && priv->kms->funcs->prepare_fence) priv->kms->funcs->prepare_fence(priv->kms, state); /* Loading drivers/gpu/drm/msm/msm_drv.c +23 −0 Original line number Diff line number Diff line Loading @@ -1928,6 +1928,28 @@ static int msm_pdev_remove(struct platform_device *pdev) return 0; } static void msm_pdev_shutdown(struct platform_device *pdev) { struct drm_device *ddev = platform_get_drvdata(pdev); struct msm_drm_private *priv = NULL; if (!ddev) { DRM_ERROR("invalid drm device node\n"); return; } priv = ddev->dev_private; if (!priv) { DRM_ERROR("invalid msm drm private node\n"); return; } msm_lastclose(ddev); /* set this after lastclose to allow kickoff from lastclose */ priv->shutdown_in_progress = true; } static const struct of_device_id dt_match[] = { { .compatible = "qcom,mdp4", .data = (void *)4 }, /* MDP4 */ { .compatible = "qcom,mdss", .data = (void *)5 }, /* MDP5 MDSS */ Loading @@ -1939,6 +1961,7 @@ MODULE_DEVICE_TABLE(of, dt_match); static struct platform_driver msm_platform_driver = { .probe = msm_pdev_probe, .remove = msm_pdev_remove, .shutdown = msm_pdev_shutdown, .driver = { .name = "msm_drm", .of_match_table = dt_match, Loading drivers/gpu/drm/msm/msm_drv.h +3 −0 Original line number Diff line number Diff line Loading @@ -615,6 +615,9 @@ struct msm_drm_private { /* msm drv debug root node */ struct dentry *debug_root; /* update the flag when msm driver receives shutdown notification */ bool shutdown_in_progress; }; /* get struct msm_kms * from drm_device * */ Loading Loading
drivers/gpu/drm/msm/dsi-staging/dsi_drm.c +8 −1 Original line number Diff line number Diff line Loading @@ -632,10 +632,17 @@ int dsi_conn_post_kickoff(struct drm_connector *connector) struct dsi_display_ctrl *m_ctrl, *ctrl; int i, rc = 0; if (!connector || !connector->state->best_encoder) if (!connector || !connector->state) { pr_err("invalid connector or connector state"); return -EINVAL; } encoder = connector->state->best_encoder; if (!encoder) { pr_debug("best encoder is not available"); return 0; } c_bridge = to_dsi_bridge(encoder->bridge); adj_mode = c_bridge->dsi_mode; display = c_bridge->display; Loading
drivers/gpu/drm/msm/msm_atomic.c +6 −2 Original line number Diff line number Diff line Loading @@ -555,6 +555,11 @@ int msm_atomic_commit(struct drm_device *dev, struct drm_plane_state *plane_state; int i, ret; if (!priv || priv->shutdown_in_progress) { DRM_ERROR("priv is null or shutdwon is in-progress\n"); return -EINVAL; } SDE_ATRACE_BEGIN("atomic_commit"); ret = drm_atomic_helper_prepare_planes(dev, state); if (ret) { Loading Loading @@ -610,8 +615,7 @@ int msm_atomic_commit(struct drm_device *dev, * are dispatched to work queues, so that the fence preparation is * finished before the .atomic_commit returns. */ if (priv && priv->kms && priv->kms->funcs && priv->kms->funcs->prepare_fence) if (priv->kms && priv->kms->funcs && priv->kms->funcs->prepare_fence) priv->kms->funcs->prepare_fence(priv->kms, state); /* Loading
drivers/gpu/drm/msm/msm_drv.c +23 −0 Original line number Diff line number Diff line Loading @@ -1928,6 +1928,28 @@ static int msm_pdev_remove(struct platform_device *pdev) return 0; } static void msm_pdev_shutdown(struct platform_device *pdev) { struct drm_device *ddev = platform_get_drvdata(pdev); struct msm_drm_private *priv = NULL; if (!ddev) { DRM_ERROR("invalid drm device node\n"); return; } priv = ddev->dev_private; if (!priv) { DRM_ERROR("invalid msm drm private node\n"); return; } msm_lastclose(ddev); /* set this after lastclose to allow kickoff from lastclose */ priv->shutdown_in_progress = true; } static const struct of_device_id dt_match[] = { { .compatible = "qcom,mdp4", .data = (void *)4 }, /* MDP4 */ { .compatible = "qcom,mdss", .data = (void *)5 }, /* MDP5 MDSS */ Loading @@ -1939,6 +1961,7 @@ MODULE_DEVICE_TABLE(of, dt_match); static struct platform_driver msm_platform_driver = { .probe = msm_pdev_probe, .remove = msm_pdev_remove, .shutdown = msm_pdev_shutdown, .driver = { .name = "msm_drm", .of_match_table = dt_match, Loading
drivers/gpu/drm/msm/msm_drv.h +3 −0 Original line number Diff line number Diff line Loading @@ -615,6 +615,9 @@ struct msm_drm_private { /* msm drv debug root node */ struct dentry *debug_root; /* update the flag when msm driver receives shutdown notification */ bool shutdown_in_progress; }; /* get struct msm_kms * from drm_device * */ Loading