summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorGopikrishnaiah Anandan <agopik@codeaurora.org>2016-06-20 15:50:00 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2016-10-04 14:11:34 -0700
commit15c53debeb8a33fa875594f9217ac76fd5ead0f5 (patch)
tree04a8797255ed10e64e3f978faa30eb9ae9f4bc0c /drivers/gpu/drm
parent5b2d04b9029b2d17e7c3aa07cf9e221642adef71 (diff)
drm/msm: Suspend/Resume support for color processing features
Color processing features that are enabled by user-space clients need to be saved when crtc goes to suspend. Once crtc resumes, the following commit cycle will restore the features. Change-Id: I2f169a744a5a19fe6456ff4832208a0cbe78be95 Signed-off-by: Gopikrishnaiah Anandan <agopik@codeaurora.org>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/msm/sde/sde_color_processing.c32
-rw-r--r--drivers/gpu/drm/msm/sde/sde_color_processing.h12
-rw-r--r--drivers/gpu/drm/msm/sde/sde_crtc.c12
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 = {