[PATCH v2 3/7] drm/bridge: Add drm_atomic_get_new_crtc_for_bridge() helper
Sam Ravnborg
sam at ravnborg.org
Wed Oct 20 11:18:57 PDT 2021
drm_atomic_get_new_crtc_for_bridge() will be used by bridge
drivers to provide easy access to the mode from the
drm_bridge_funcs operations.
The helper will be useful in the conversion to the atomic
operations of struct drm_bridge_funcs.
v2:
- Renamed to drm_atomic_get_new_crtc_for_bridge (Maxime)
- Use atomic_state, not bridge_State (Maxime)
- Drop WARN on crtc_state as it is a valid case (Maxime)
- Added small code snip to help readers
- Updated description, fixed kernel-doc and exported the symbol
Signed-off-by: Sam Ravnborg <sam at ravnborg.org>
Suggested-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Cc: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Cc: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
Cc: Maxime Ripard <mripard at kernel.org>
Cc: Thomas Zimmermann <tzimmermann at suse.de>
Cc: Andrzej Hajda <a.hajda at samsung.com>
Cc: Neil Armstrong <narmstrong at baylibre.com>
Cc: Robert Foss <robert.foss at linaro.org>
Cc: Daniel Vetter <daniel at ffwll.ch>
---
drivers/gpu/drm/drm_atomic.c | 42 ++++++++++++++++++++++++++++++++++++
include/drm/drm_atomic.h | 3 +++
2 files changed, 45 insertions(+)
diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
index ff1416cd609a..8b107194b157 100644
--- a/drivers/gpu/drm/drm_atomic.c
+++ b/drivers/gpu/drm/drm_atomic.c
@@ -1134,6 +1134,48 @@ drm_atomic_get_new_bridge_state(struct drm_atomic_state *state,
}
EXPORT_SYMBOL(drm_atomic_get_new_bridge_state);
+/**
+ * drm_atomic_get_new_crtc_for_bridge - get new crtc_state for the bridge
+ * @state: state of the bridge
+ * @bridge: bridge object
+ *
+ * This function is often used in the &struct drm_bridge_funcs operations
+ * to provide easy access to the mode like this:
+ *
+ * .. code-block:: c
+ *
+ * crtc_state = drm_atomic_get_new_crtc_for_bridge(old_bridge_state->base.state,
+ * bridge);
+ * if (crtc_state) {
+ * mode = &crtc_state->mode;
+ * ...
+ *
+ * If no connector can be looked up or if no connector state is available
+ * then this will be logged using WARN().
+ *
+ * Returns:
+ * The &struct drm_crtc_state for the given bridge/state, or NULL
+ * if no crtc_state could be looked up.
+ */
+const struct drm_crtc_state *
+drm_atomic_get_new_crtc_for_bridge(struct drm_atomic_state *state,
+ struct drm_bridge *bridge)
+{
+ const struct drm_connector_state *conn_state;
+ struct drm_connector *connector;
+
+ connector = drm_atomic_get_new_connector_for_encoder(state, bridge->encoder);
+ if (WARN_ON(!connector))
+ return NULL;
+
+ conn_state = drm_atomic_get_new_connector_state(state, connector);
+ if (WARN_ON(!conn_state || !conn_state->crtc))
+ return NULL;
+
+ return drm_atomic_get_new_crtc_state(state, conn_state->crtc);
+}
+EXPORT_SYMBOL(drm_atomic_get_new_crtc_for_bridge);
+
/**
* drm_atomic_add_encoder_bridges - add bridges attached to an encoder
* @state: atomic state
diff --git a/include/drm/drm_atomic.h b/include/drm/drm_atomic.h
index 1701c2128a5c..f861d73296cc 100644
--- a/include/drm/drm_atomic.h
+++ b/include/drm/drm_atomic.h
@@ -1119,5 +1119,8 @@ drm_atomic_get_old_bridge_state(struct drm_atomic_state *state,
struct drm_bridge_state *
drm_atomic_get_new_bridge_state(struct drm_atomic_state *state,
struct drm_bridge *bridge);
+const struct drm_crtc_state *
+drm_atomic_get_new_crtc_for_bridge(struct drm_atomic_state *state,
+ struct drm_bridge *bridge);
#endif /* DRM_ATOMIC_H_ */
--
2.30.2
More information about the Linux-mediatek
mailing list