drm/bridge: Provide a helper to retrieve current bridge state
authorMaxime Ripard <mripard@kernel.org>
Thu, 13 Mar 2025 11:59:56 +0000 (12:59 +0100)
committerMaxime Ripard <mripard@kernel.org>
Thu, 20 Mar 2025 13:45:45 +0000 (14:45 +0100)
The current bridge state is accessible from the drm_bridge structure,
but since it's fairly indirect it's not easy to figure out.

Provide a helper to retrieve it.

Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20250313-bridge-connector-v6-2-511c54a604fb@kernel.org
Signed-off-by: Maxime Ripard <mripard@kernel.org>
include/drm/drm_bridge.h

index 884ff1faa4c896c28a38399ceaa5016ab704c886..cdad3b78a195aa39776c93e2371217d3d3fb6064 100644 (file)
@@ -957,6 +957,38 @@ static inline struct drm_bridge *of_drm_find_bridge(struct device_node *np)
 }
 #endif
 
+/**
+ * drm_bridge_get_current_state() - Get the current bridge state
+ * @bridge: bridge object
+ *
+ * This function must be called with the modeset lock held.
+ *
+ * RETURNS:
+ *
+ * The current bridge state, or NULL if there is none.
+ */
+static inline struct drm_bridge_state *
+drm_bridge_get_current_state(struct drm_bridge *bridge)
+{
+       if (!bridge)
+               return NULL;
+
+       /*
+        * Only atomic bridges will have bridge->base initialized by
+        * drm_atomic_private_obj_init(), so we need to make sure we're
+        * working with one before we try to use the lock.
+        */
+       if (!bridge->funcs || !bridge->funcs->atomic_reset)
+               return NULL;
+
+       drm_modeset_lock_assert_held(&bridge->base.lock);
+
+       if (!bridge->base.state)
+               return NULL;
+
+       return drm_priv_to_bridge_state(bridge->base.state);
+}
+
 /**
  * drm_bridge_get_next_bridge() - Get the next bridge in the chain
  * @bridge: bridge object