diff options
author | Zheng Yang <zhengyang@rock-chips.com> | 2017-12-05 16:14:19 +0800 |
---|---|---|
committer | Tao Huang <huangtao@rock-chips.com> | 2017-12-11 15:17:24 +0800 |
commit | 773d508df724f1b19f728ff3b5df46467b89de67 (patch) | |
tree | b907984280414440ea2a2aaf99d5424756d04ef4 | |
parent | d534e6ca7931f785adc9f756be68ddfe9f19daf8 (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.c | 20 | ||||
-rw-r--r-- | include/drm/drm_crtc_helper.h | 2 |
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); }; |