drm/bridge: Add a drm_bridge_state object
One of the last remaining objects to not have its atomic state. This is being motivated by our attempt to support runtime bus-format negotiation between elements of the bridge chain. This patch just paves the road for such a feature by adding a new drm_bridge_state object inheriting from drm_private_obj so we can re-use some of the existing state initialization/tracking logic. v10: * Add changelog to the commit message v9: * Clarify the fact that the bridge->atomic_reset() and {connector,plane,crtc,...}->reset() semantics are different * Move the drm_atomic_private_obj_init() call back to drm_bridge_attach() * Check the presence of ->atomic_duplicate_state instead of ->atomic_reset in drm_atomic_add_encoder_bridges() * Fix copy&paste errors in the atomic bridge state helpers doc * Add A-b/R-b tags v8: * Move bridge state helpers out of the CONFIG_DEBUGFS section v7: * Move helpers, struct-defs, ... to atomic helper files to avoid the drm -> drm_kms_helper -> drm circular dep * Stop providing default implementation for atomic state reset, duplicate and destroy hooks (has to do with the helper/core split) * Drop all R-b/T-b as helpers have now be moved to other places v6: * Made helpers private, removed doc and moved them to satisfy dependencies * Renamed helpers to _default_ v5: * Re-introduced the helpers from v4 v4: * Fix the doc * Kill default helpers (inlined) * Fix drm_atomic_get_bridge_state() to check for an ERR_PTR() * Add Neil's R-b v3: * No changes v2: * Use drm_for_each_bridge_in_chain() * Rename helpers to be more consistent with the rest of the DRM API * Improve/fix the doc Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> Reviewed-by: Neil Armstrong <narmstrong@baylibre.com> Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: https://patchwork.freedesktop.org/patch/msgid/20200128135514.108171-2-boris.brezillon@collabora.com
This commit is contained in:
@@ -669,6 +669,9 @@ __drm_atomic_get_current_plane_state(struct drm_atomic_state *state,
|
||||
return plane->state;
|
||||
}
|
||||
|
||||
int __must_check
|
||||
drm_atomic_add_encoder_bridges(struct drm_atomic_state *state,
|
||||
struct drm_encoder *encoder);
|
||||
int __must_check
|
||||
drm_atomic_add_affected_connectors(struct drm_atomic_state *state,
|
||||
struct drm_crtc *crtc);
|
||||
@@ -992,4 +995,35 @@ drm_atomic_crtc_effectively_active(const struct drm_crtc_state *state)
|
||||
return state->active || state->self_refresh_active;
|
||||
}
|
||||
|
||||
/**
|
||||
* struct drm_bridge_state - Atomic bridge state object
|
||||
*/
|
||||
struct drm_bridge_state {
|
||||
/**
|
||||
* @base: inherit from &drm_private_state
|
||||
*/
|
||||
struct drm_private_state base;
|
||||
|
||||
/**
|
||||
* @bridge: the bridge this state refers to
|
||||
*/
|
||||
struct drm_bridge *bridge;
|
||||
};
|
||||
|
||||
static inline struct drm_bridge_state *
|
||||
drm_priv_to_bridge_state(struct drm_private_state *priv)
|
||||
{
|
||||
return container_of(priv, struct drm_bridge_state, base);
|
||||
}
|
||||
|
||||
struct drm_bridge_state *
|
||||
drm_atomic_get_bridge_state(struct drm_atomic_state *state,
|
||||
struct drm_bridge *bridge);
|
||||
struct drm_bridge_state *
|
||||
drm_atomic_get_old_bridge_state(struct drm_atomic_state *state,
|
||||
struct drm_bridge *bridge);
|
||||
struct drm_bridge_state *
|
||||
drm_atomic_get_new_bridge_state(struct drm_atomic_state *state,
|
||||
struct drm_bridge *bridge);
|
||||
|
||||
#endif /* DRM_ATOMIC_H_ */
|
||||
|
Reference in New Issue
Block a user