Loading drivers/gpu/drm/msm/sde/sde_color_processing.c +32 −0 Original line number Diff line number Diff line Loading @@ -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", Loading Loading @@ -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 */ } drivers/gpu/drm/msm/sde/sde_color_processing.h +12 −0 Original line number Diff line number Diff line Loading @@ -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 */ drivers/gpu/drm/msm/sde/sde_crtc.c +12 −0 Original line number Diff line number Diff line Loading @@ -1150,6 +1150,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, Loading @@ -1160,6 +1170,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 = { Loading Loading
drivers/gpu/drm/msm/sde/sde_color_processing.c +32 −0 Original line number Diff line number Diff line Loading @@ -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", Loading Loading @@ -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 */ }
drivers/gpu/drm/msm/sde/sde_color_processing.h +12 −0 Original line number Diff line number Diff line Loading @@ -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 */
drivers/gpu/drm/msm/sde/sde_crtc.c +12 −0 Original line number Diff line number Diff line Loading @@ -1150,6 +1150,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, Loading @@ -1160,6 +1170,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 = { Loading