diff options
| author | Dhaval Patel <pdhaval@quicinc.com> | 2016-10-04 18:48:34 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-10-04 18:48:34 -0700 |
| commit | 484dde2e5373529d61879d00c6c15a6ff56c7f27 (patch) | |
| tree | 638102cd0ff6858b00de70a145ea94462b2d357f /drivers/gpu | |
| parent | e3ac7949f46418d804994679615a08678f37a18f (diff) | |
| parent | 15c53debeb8a33fa875594f9217ac76fd5ead0f5 (diff) | |
Merge "drm/msm: Suspend/Resume support for color processing features" into dev/msm-4.4-drm_kms
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/msm/sde/sde_color_processing.c | 32 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/sde/sde_color_processing.h | 12 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/sde/sde_crtc.c | 12 |
3 files changed, 56 insertions, 0 deletions
diff --git a/drivers/gpu/drm/msm/sde/sde_color_processing.c b/drivers/gpu/drm/msm/sde/sde_color_processing.c index ec7d282eb24e..db9801a5afbb 100644 --- a/drivers/gpu/drm/msm/sde/sde_color_processing.c +++ b/drivers/gpu/drm/msm/sde/sde_color_processing.c @@ -430,6 +430,11 @@ void sde_cp_crtc_install_properties(struct drm_crtc *crtc) } sde_crtc = to_sde_crtc(crtc); + if (!sde_crtc) { + DRM_ERROR("sde_crtc %pK\n", sde_crtc); + return; + } + kms = get_kms(crtc); if (!kms || !kms->catalog || !sde_crtc) { DRM_ERROR("invalid sde kms %pK catalog %pK sde_crtc %pK\n", @@ -638,3 +643,30 @@ void sde_cp_crtc_destroy_properties(struct drm_crtc *crtc) INIT_LIST_HEAD(&sde_crtc->dirty_list); INIT_LIST_HEAD(&sde_crtc->feature_list); } + +void sde_cp_crtc_suspend(struct drm_crtc *crtc) +{ + struct sde_crtc *sde_crtc = NULL; + struct sde_color_process_node *prop_node = NULL, *n = NULL; + + if (!crtc) { + DRM_ERROR("crtc %pK\n", crtc); + return; + } + sde_crtc = to_sde_crtc(crtc); + if (!sde_crtc) { + DRM_ERROR("sde_crtc %pK\n", sde_crtc); + return; + } + + list_for_each_entry_safe(prop_node, n, &sde_crtc->active_list, + active_list) { + list_add_tail(&prop_node->dirty_list, &sde_crtc->dirty_list); + list_del_init(&prop_node->active_list); + } +} + +void sde_cp_crtc_resume(struct drm_crtc *crtc) +{ + /* placeholder for operations needed during resume */ +} diff --git a/drivers/gpu/drm/msm/sde/sde_color_processing.h b/drivers/gpu/drm/msm/sde/sde_color_processing.h index d677c82ec931..1471130514f7 100644 --- a/drivers/gpu/drm/msm/sde/sde_color_processing.h +++ b/drivers/gpu/drm/msm/sde/sde_color_processing.h @@ -69,4 +69,16 @@ void sde_cp_crtc_apply_properties(struct drm_crtc *crtc); */ int sde_cp_crtc_get_property(struct drm_crtc *crtc, struct drm_property *property, uint64_t *val); + +/** + * sde_cp_crtc_suspend: Suspend the crtc features + * @crtc: Pointer to crtc. + */ +void sde_cp_crtc_suspend(struct drm_crtc *crtc); + +/** + * sde_cp_crtc_resume: Resume the crtc features + * @crtc: Pointer to crtc. + */ +void sde_cp_crtc_resume(struct drm_crtc *crtc); #endif /*_SDE_COLOR_PROCESSING_H */ diff --git a/drivers/gpu/drm/msm/sde/sde_crtc.c b/drivers/gpu/drm/msm/sde/sde_crtc.c index 366c97e9c5c8..2a3c61c0ddeb 100644 --- a/drivers/gpu/drm/msm/sde/sde_crtc.c +++ b/drivers/gpu/drm/msm/sde/sde_crtc.c @@ -1149,6 +1149,16 @@ static int _sde_debugfs_mixer_open(struct inode *inode, struct file *file) return single_open(file, _sde_debugfs_mixer_read, inode->i_private); } +static void sde_crtc_suspend(struct drm_crtc *crtc) +{ + sde_cp_crtc_suspend(crtc); +} + +static void sde_crtc_resume(struct drm_crtc *crtc) +{ + sde_cp_crtc_resume(crtc); +} + static const struct drm_crtc_funcs sde_crtc_funcs = { .set_config = drm_atomic_helper_set_config, .destroy = sde_crtc_destroy, @@ -1159,6 +1169,8 @@ static const struct drm_crtc_funcs sde_crtc_funcs = { .reset = sde_crtc_reset, .atomic_duplicate_state = sde_crtc_duplicate_state, .atomic_destroy_state = sde_crtc_destroy_state, + .save = sde_crtc_suspend, + .restore = sde_crtc_resume, }; static const struct drm_crtc_helper_funcs sde_crtc_helper_funcs = { |
