summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZheng Yang <zhengyang@rock-chips.com>2017-12-05 16:14:19 +0800
committerTao Huang <huangtao@rock-chips.com>2017-12-11 15:17:24 +0800
commit773d508df724f1b19f728ff3b5df46467b89de67 (patch)
treeb907984280414440ea2a2aaf99d5424756d04ef4
parentd534e6ca7931f785adc9f756be68ddfe9f19daf8 (diff)
drm: introduce atomic_begin for connector
atomic_begin is used to prepare for update flush. Change-Id: I1d3a2afaea4022c065bda2b4c0746464cc0c1303 Signed-off-by: Zheng Yang <zhengyang@rock-chips.com>
-rw-r--r--drivers/gpu/drm/drm_atomic_helper.c20
-rw-r--r--include/drm/drm_crtc_helper.h2
2 files changed, 22 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index 8da8db6db5f1..9a513abd8a47 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -1558,6 +1558,26 @@ void drm_atomic_helper_commit_planes(struct drm_device *dev,
struct drm_connector_state *old_conn_state;
int i;
+ for_each_connector_in_state(old_state, connector, old_conn_state, i) {
+ const struct drm_connector_helper_funcs *funcs;
+
+ if (!connector->state->crtc)
+ continue;
+
+ if (!connector->state->crtc->state->active)
+ continue;
+
+ funcs = connector->helper_private;
+
+ if (!funcs || !funcs->atomic_begin)
+ continue;
+
+ DRM_DEBUG_ATOMIC("flush beginning [CONNECTOR:%d:%s]\n",
+ connector->base.id, connector->name);
+
+ funcs->atomic_begin(connector, old_conn_state);
+ }
+
for_each_crtc_in_state(old_state, crtc, old_crtc_state, i) {
const struct drm_crtc_helper_funcs *funcs;
diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h
index c110e07d437f..d8d2bc14ee5b 100644
--- a/include/drm/drm_crtc_helper.h
+++ b/include/drm/drm_crtc_helper.h
@@ -185,6 +185,8 @@ struct drm_connector_helper_funcs {
struct drm_encoder *(*best_encoder)(struct drm_connector *connector);
struct drm_encoder *(*atomic_best_encoder)(struct drm_connector *connector,
struct drm_connector_state *connector_state);
+ void (*atomic_begin)(struct drm_connector *connector,
+ struct drm_connector_state *conn_state);
void (*atomic_flush)(struct drm_connector *connector,
struct drm_connector_state *conn_state);
};