summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorDhaval Patel <pdhaval@quicinc.com>2016-10-04 18:48:34 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2016-10-04 18:48:34 -0700
commit484dde2e5373529d61879d00c6c15a6ff56c7f27 (patch)
tree638102cd0ff6858b00de70a145ea94462b2d357f /drivers/gpu
parente3ac7949f46418d804994679615a08678f37a18f (diff)
parent15c53debeb8a33fa875594f9217ac76fd5ead0f5 (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.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 = {