提交 e01e9f75 编写于 作者: M Maarten Lankhorst 提交者: Daniel Vetter

drm/atomic: add drm_atomic_add_affected_planes

This is a convenience function to add all planes for a crtc,
similar to add_affected_connectors. This will be used in
drm_atomic_helper_check_modeset, but drivers can call it too
when they need to recalculate all state.
Signed-off-by: NMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
[danvet: Amend kerneldoc a bit.]
Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
上级 de28d021
...@@ -955,6 +955,45 @@ drm_atomic_add_affected_connectors(struct drm_atomic_state *state, ...@@ -955,6 +955,45 @@ drm_atomic_add_affected_connectors(struct drm_atomic_state *state,
} }
EXPORT_SYMBOL(drm_atomic_add_affected_connectors); EXPORT_SYMBOL(drm_atomic_add_affected_connectors);
/**
* drm_atomic_add_affected_planes - add planes for crtc
* @state: atomic state
* @crtc: DRM crtc
*
* This function walks the current configuration and adds all planes
* currently used by @crtc to the atomic configuration @state. This is useful
* when an atomic commit also needs to check all currently enabled plane on
* @crtc, e.g. when changing the mode. It's also useful when re-enabling a CRTC
* to avoid special code to force-enable all planes.
*
* Since acquiring a plane state will always also acquire the w/w mutex of the
* current CRTC for that plane (if there is any) adding all the plane states for
* a CRTC will not reduce parallism of atomic updates.
*
* Returns:
* 0 on success or can fail with -EDEADLK or -ENOMEM. When the error is EDEADLK
* then the w/w mutex code has detected a deadlock and the entire atomic
* sequence must be restarted. All other errors are fatal.
*/
int
drm_atomic_add_affected_planes(struct drm_atomic_state *state,
struct drm_crtc *crtc)
{
struct drm_plane *plane;
WARN_ON(!drm_atomic_get_existing_crtc_state(state, crtc));
drm_for_each_plane_mask(plane, state->dev, crtc->state->plane_mask) {
struct drm_plane_state *plane_state =
drm_atomic_get_plane_state(state, plane);
if (IS_ERR(plane_state))
return PTR_ERR(plane_state);
}
return 0;
}
EXPORT_SYMBOL(drm_atomic_add_affected_planes);
/** /**
* drm_atomic_connectors_for_crtc - count number of connected outputs * drm_atomic_connectors_for_crtc - count number of connected outputs
* @state: atomic state * @state: atomic state
......
...@@ -120,6 +120,10 @@ drm_atomic_set_crtc_for_connector(struct drm_connector_state *conn_state, ...@@ -120,6 +120,10 @@ drm_atomic_set_crtc_for_connector(struct drm_connector_state *conn_state,
int __must_check int __must_check
drm_atomic_add_affected_connectors(struct drm_atomic_state *state, drm_atomic_add_affected_connectors(struct drm_atomic_state *state,
struct drm_crtc *crtc); struct drm_crtc *crtc);
int __must_check
drm_atomic_add_affected_planes(struct drm_atomic_state *state,
struct drm_crtc *crtc);
int int
drm_atomic_connectors_for_crtc(struct drm_atomic_state *state, drm_atomic_connectors_for_crtc(struct drm_atomic_state *state,
struct drm_crtc *crtc); struct drm_crtc *crtc);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册