summaryrefslogtreecommitdiff
path: root/include/drm/drm_bridge.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/drm/drm_bridge.h')
-rw-r--r--include/drm/drm_bridge.h75
1 files changed, 74 insertions, 1 deletions
diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h
index 6b656ea23b96..ad6c06b960fd 100644
--- a/include/drm/drm_bridge.h
+++ b/include/drm/drm_bridge.h
@@ -191,7 +191,7 @@ struct drm_bridge_funcs {
* or &drm_encoder_helper_funcs.dpms hook.
*
* The bridge must assume that the display pipe (i.e. clocks and timing
- * singals) feeding it is no longer running when this callback is
+ * signals) feeding it is no longer running when this callback is
* called.
*
* The @post_disable callback is optional.
@@ -204,6 +204,20 @@ struct drm_bridge_funcs {
void (*post_disable)(struct drm_bridge *bridge);
/**
+ * @late_disable:
+ *
+ * This callback should disable the bridge. It is called right after the
+ * preceding element in the display pipe is disabled. If the preceding
+ * element is a bridge this means it's called after that bridge's
+ * @atomic_post_disable. If the preceding element is a &drm_crtc it's
+ * called right after the crtc's &drm_crtc_helper_funcs.atomic_disable
+ * hook.
+ *
+ * The @elate_disable callback is optional.
+ */
+ void (*late_disable)(struct drm_bridge *bridge);
+
+ /**
* @mode_set:
*
* This callback should set the given mode on the bridge. It is called
@@ -232,6 +246,26 @@ struct drm_bridge_funcs {
void (*mode_set)(struct drm_bridge *bridge,
const struct drm_display_mode *mode,
const struct drm_display_mode *adjusted_mode);
+
+ /**
+ * @early_enable:
+ *
+ * This callback should enable the bridge. It is called right before
+ * the preceding element in the display pipe is enabled. If the
+ * preceding element is a bridge this means it's called before that
+ * bridge's @atomic_early_enable. If the preceding element is a
+ * &drm_crtc it's called right before the crtc's
+ * &drm_crtc_helper_funcs.atomic_enable hook.
+ *
+ * The display pipe (i.e. clocks and timing signals) feeding this bridge
+ * will not yet be running when this callback is called. The bridge can
+ * enable the display link feeding the next bridge in the chain (if
+ * there is one) when this callback is called.
+ *
+ * The @early_enable callback is optional.
+ */
+ void (*early_enable)(struct drm_bridge *bridge);
+
/**
* @pre_enable:
*
@@ -283,6 +317,26 @@ struct drm_bridge_funcs {
void (*enable)(struct drm_bridge *bridge);
/**
+ * @early_enable:
+ *
+ * This callback should enable the bridge. It is called right before
+ * the preceding element in the display pipe is enabled. If the
+ * preceding element is a bridge this means it's called before that
+ * bridge's @atomic_early_enable. If the preceding element is a
+ * &drm_crtc it's called right before the crtc's
+ * &drm_crtc_helper_funcs.atomic_enable hook.
+ *
+ * The display pipe (i.e. clocks and timing signals) feeding this bridge
+ * will not yet be running when this callback is called. The bridge can
+ * enable the display link feeding the next bridge in the chain (if
+ * there is one) when this callback is called.
+ *
+ * The @early_enable callback is optional.
+ */
+ void (*atomic_early_enable)(struct drm_bridge *bridge,
+ struct drm_bridge_state *old_bridge_state);
+
+ /**
* @atomic_pre_enable:
*
* This callback should enable the bridge. It is called right before
@@ -383,6 +437,21 @@ struct drm_bridge_funcs {
struct drm_bridge_state *old_bridge_state);
/**
+ * @late_disable:
+ *
+ * This callback should disable the bridge. It is called right after the
+ * preceding element in the display pipe is disabled. If the preceding
+ * element is a bridge this means it's called after that bridge's
+ * @atomic_post_disable. If the preceding element is a &drm_crtc it's
+ * called right after the crtc's &drm_crtc_helper_funcs.atomic_disable
+ * hook.
+ *
+ * The @elate_disable callback is optional.
+ */
+ void (*atomic_late_disable)(struct drm_bridge *bridge,
+ struct drm_bridge_state *old_bridge_state);
+
+ /**
* @atomic_duplicate_state:
*
* Duplicate the current bridge state object (which is guaranteed to be
@@ -899,6 +968,10 @@ void drm_atomic_bridge_chain_disable(struct drm_bridge *bridge,
struct drm_atomic_state *state);
void drm_atomic_bridge_chain_post_disable(struct drm_bridge *bridge,
struct drm_atomic_state *state);
+void drm_atomic_bridge_chain_late_disable(struct drm_bridge *bridge,
+ struct drm_atomic_state *state);
+void drm_atomic_bridge_chain_early_enable(struct drm_bridge *bridge,
+ struct drm_atomic_state *state);
void drm_atomic_bridge_chain_pre_enable(struct drm_bridge *bridge,
struct drm_atomic_state *state);
void drm_atomic_bridge_chain_enable(struct drm_bridge *bridge,