Hi Boris,
Thank you for the patch.
On Wed, Oct 23, 2019 at 05:44:55PM +0200, Boris Brezillon wrote:
Change the prefix of bridge helpers targeting a bridge chain from drm_bridge_ to drm_bridge_chain_ to better reflect the fact that the operation will happen on all elements of chain, starting at the bridge passed in argument.
Signed-off-by: Boris Brezillon boris.brezillon@collabora.com
I haven't reviewed this in details but the renaming looks sensible, so
Acked-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
Changes in v3:
- None
Changes in v2:
- Pass te bridge, not the encoder, so we can later act on a sub-chain instead of the whole chain
drivers/gpu/drm/drm_atomic_helper.c | 19 +++-- drivers/gpu/drm/drm_bridge.c | 125 ++++++++++++++-------------- drivers/gpu/drm/drm_probe_helper.c | 2 +- drivers/gpu/drm/mediatek/mtk_hdmi.c | 4 +- include/drm/drm_bridge.h | 64 +++++++------- 5 files changed, 112 insertions(+), 102 deletions(-)
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c index 587052751b48..cf678be58fa4 100644 --- a/drivers/gpu/drm/drm_atomic_helper.c +++ b/drivers/gpu/drm/drm_atomic_helper.c @@ -435,8 +435,9 @@ mode_fixup(struct drm_atomic_state *state) encoder = new_conn_state->best_encoder; funcs = encoder->helper_private;
ret = drm_bridge_mode_fixup(encoder->bridge, &new_crtc_state->mode,
&new_crtc_state->adjusted_mode);
ret = drm_bridge_chain_mode_fixup(encoder->bridge,
&new_crtc_state->mode,
if (!ret) { DRM_DEBUG_ATOMIC("Bridge fixup failed\n"); return -EINVAL;&new_crtc_state->adjusted_mode);
@@ -501,7 +502,7 @@ static enum drm_mode_status mode_valid_path(struct drm_connector *connector, return ret; }
- ret = drm_bridge_mode_valid(encoder->bridge, mode);
- ret = drm_bridge_chain_mode_valid(encoder->bridge, mode); if (ret != MODE_OK) { DRM_DEBUG_ATOMIC("[BRIDGE] mode_valid() failed\n"); return ret;
@@ -1020,7 +1021,7 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state) * Each encoder has at most one connector (since we always steal * it away), so we won't call disable hooks twice. */
drm_atomic_bridge_disable(encoder->bridge, old_state);
drm_atomic_bridge_chain_disable(encoder->bridge, old_state);
/* Right function depends upon target state. */ if (funcs) {
@@ -1034,7 +1035,8 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state) funcs->dpms(encoder, DRM_MODE_DPMS_OFF); }
drm_atomic_bridge_post_disable(encoder->bridge, old_state);
drm_atomic_bridge_chain_post_disable(encoder->bridge,
old_state);
}
for_each_oldnew_crtc_in_state(old_state, crtc, old_crtc_state, new_crtc_state, i) {
@@ -1215,7 +1217,8 @@ crtc_set_mode(struct drm_device *dev, struct drm_atomic_state *old_state) funcs->mode_set(encoder, mode, adjusted_mode); }
drm_bridge_mode_set(encoder->bridge, mode, adjusted_mode);
drm_bridge_chain_mode_set(encoder->bridge, mode,
}adjusted_mode);
}
@@ -1332,7 +1335,7 @@ void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev, * Each encoder has at most one connector (since we always steal * it away), so we won't call enable hooks twice. */
drm_atomic_bridge_pre_enable(encoder->bridge, old_state);
drm_atomic_bridge_chain_pre_enable(encoder->bridge, old_state);
if (funcs) { if (funcs->atomic_enable)
@@ -1343,7 +1346,7 @@ void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev, funcs->commit(encoder); }
drm_atomic_bridge_enable(encoder->bridge, old_state);
drm_atomic_bridge_chain_enable(encoder->bridge, old_state);
}
drm_atomic_helper_commit_writebacks(dev, old_state);
diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c index cba537c99e43..54c874493c57 100644 --- a/drivers/gpu/drm/drm_bridge.c +++ b/drivers/gpu/drm/drm_bridge.c @@ -172,8 +172,8 @@ void drm_bridge_detach(struct drm_bridge *bridge) */
/**
- drm_bridge_mode_fixup - fixup proposed mode for all bridges in the
encoder chain
- drm_bridge_chain_mode_fixup - fixup proposed mode for all bridges in the
encoder chain
- @bridge: bridge control structure
- @mode: desired mode to be set for the bridge
- @adjusted_mode: updated mode that works for this bridge
@@ -186,9 +186,9 @@ void drm_bridge_detach(struct drm_bridge *bridge)
- RETURNS:
- true on success, false on failure
*/ -bool drm_bridge_mode_fixup(struct drm_bridge *bridge,
const struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode)
+bool drm_bridge_chain_mode_fixup(struct drm_bridge *bridge,
const struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode)
{ bool ret = true;
@@ -198,15 +198,16 @@ bool drm_bridge_mode_fixup(struct drm_bridge *bridge, if (bridge->funcs->mode_fixup) ret = bridge->funcs->mode_fixup(bridge, mode, adjusted_mode);
- ret = ret && drm_bridge_mode_fixup(bridge->next, mode, adjusted_mode);
ret = ret && drm_bridge_chain_mode_fixup(bridge->next, mode,
adjusted_mode);
return ret;
} -EXPORT_SYMBOL(drm_bridge_mode_fixup); +EXPORT_SYMBOL(drm_bridge_chain_mode_fixup);
/**
- drm_bridge_mode_valid - validate the mode against all bridges in the
encoder chain.
- drm_bridge_chain_mode_valid - validate the mode against all bridges in the
encoder chain.
- @bridge: bridge control structure
- @mode: desired mode to be validated
@@ -219,8 +220,9 @@ EXPORT_SYMBOL(drm_bridge_mode_fixup);
- RETURNS:
- MODE_OK on success, drm_mode_status Enum error code on failure
*/ -enum drm_mode_status drm_bridge_mode_valid(struct drm_bridge *bridge,
const struct drm_display_mode *mode)
+enum drm_mode_status +drm_bridge_chain_mode_valid(struct drm_bridge *bridge,
const struct drm_display_mode *mode)
{ enum drm_mode_status ret = MODE_OK;
@@ -233,12 +235,12 @@ enum drm_mode_status drm_bridge_mode_valid(struct drm_bridge *bridge, if (ret != MODE_OK) return ret;
- return drm_bridge_mode_valid(bridge->next, mode);
- return drm_bridge_chain_mode_valid(bridge->next, mode);
} -EXPORT_SYMBOL(drm_bridge_mode_valid); +EXPORT_SYMBOL(drm_bridge_chain_mode_valid);
/**
- drm_bridge_disable - disables all bridges in the encoder chain
- drm_bridge_chain_disable - disables all bridges in the encoder chain
- @bridge: bridge control structure
- Calls &drm_bridge_funcs.disable op for all the bridges in the encoder
@@ -247,20 +249,21 @@ EXPORT_SYMBOL(drm_bridge_mode_valid);
- Note: the bridge passed should be the one closest to the encoder
*/ -void drm_bridge_disable(struct drm_bridge *bridge) +void drm_bridge_chain_disable(struct drm_bridge *bridge) { if (!bridge) return;
- drm_bridge_disable(bridge->next);
drm_bridge_chain_disable(bridge->next);
if (bridge->funcs->disable) bridge->funcs->disable(bridge);
} -EXPORT_SYMBOL(drm_bridge_disable); +EXPORT_SYMBOL(drm_bridge_chain_disable);
/**
- drm_bridge_post_disable - cleans up after disabling all bridges in the encoder chain
- drm_bridge_chain_post_disable - cleans up after disabling all bridges in the
encoder chain
- @bridge: bridge control structure
- Calls &drm_bridge_funcs.post_disable op for all the bridges in the
@@ -269,7 +272,7 @@ EXPORT_SYMBOL(drm_bridge_disable);
- Note: the bridge passed should be the one closest to the encoder
*/ -void drm_bridge_post_disable(struct drm_bridge *bridge) +void drm_bridge_chain_post_disable(struct drm_bridge *bridge) { if (!bridge) return; @@ -277,25 +280,25 @@ void drm_bridge_post_disable(struct drm_bridge *bridge) if (bridge->funcs->post_disable) bridge->funcs->post_disable(bridge);
- drm_bridge_post_disable(bridge->next);
- drm_bridge_chain_post_disable(bridge->next);
} -EXPORT_SYMBOL(drm_bridge_post_disable); +EXPORT_SYMBOL(drm_bridge_chain_post_disable);
/**
- drm_bridge_mode_set - set proposed mode for all bridges in the
encoder chain
- drm_bridge_chain_mode_set - set proposed mode for all bridges in the
encoder chain
- @bridge: bridge control structure
- @mode: desired mode to be set for the bridge
- @adjusted_mode: updated mode that works for this bridge
- @mode: desired mode to be set for the encoder chain
*/
- @adjusted_mode: updated mode that works for this encoder chain
- Calls &drm_bridge_funcs.mode_set op for all the bridges in the
- encoder chain, starting from the first bridge to the last.
- Note: the bridge passed should be the one closest to the encoder
-void drm_bridge_mode_set(struct drm_bridge *bridge,
const struct drm_display_mode *mode,
const struct drm_display_mode *adjusted_mode)
+void drm_bridge_chain_mode_set(struct drm_bridge *bridge,
const struct drm_display_mode *mode,
const struct drm_display_mode *adjusted_mode)
{ if (!bridge) return; @@ -303,13 +306,13 @@ void drm_bridge_mode_set(struct drm_bridge *bridge, if (bridge->funcs->mode_set) bridge->funcs->mode_set(bridge, mode, adjusted_mode);
- drm_bridge_mode_set(bridge->next, mode, adjusted_mode);
- drm_bridge_chain_mode_set(bridge->next, mode, adjusted_mode);
} -EXPORT_SYMBOL(drm_bridge_mode_set); +EXPORT_SYMBOL(drm_bridge_chain_mode_set);
/**
- drm_bridge_pre_enable - prepares for enabling all
bridges in the encoder chain
- drm_bridge_chain_pre_enable - prepares for enabling all bridges in the
encoder chain
- @bridge: bridge control structure
- Calls &drm_bridge_funcs.pre_enable op for all the bridges in the encoder
@@ -318,20 +321,20 @@ EXPORT_SYMBOL(drm_bridge_mode_set);
- Note: the bridge passed should be the one closest to the encoder
*/ -void drm_bridge_pre_enable(struct drm_bridge *bridge) +void drm_bridge_chain_pre_enable(struct drm_bridge *bridge) { if (!bridge) return;
- drm_bridge_pre_enable(bridge->next);
drm_bridge_chain_pre_enable(bridge->next);
if (bridge->funcs->pre_enable) bridge->funcs->pre_enable(bridge);
} -EXPORT_SYMBOL(drm_bridge_pre_enable); +EXPORT_SYMBOL(drm_bridge_chain_pre_enable);
/**
- drm_bridge_enable - enables all bridges in the encoder chain
- drm_bridge_chain_enable - enables all bridges in the encoder chain
- @bridge: bridge control structure
- Calls &drm_bridge_funcs.enable op for all the bridges in the encoder
@@ -340,7 +343,7 @@ EXPORT_SYMBOL(drm_bridge_pre_enable);
- Note that the bridge passed should be the one closest to the encoder
*/ -void drm_bridge_enable(struct drm_bridge *bridge) +void drm_bridge_chain_enable(struct drm_bridge *bridge) { if (!bridge) return; @@ -348,12 +351,12 @@ void drm_bridge_enable(struct drm_bridge *bridge) if (bridge->funcs->enable) bridge->funcs->enable(bridge);
- drm_bridge_enable(bridge->next);
- drm_bridge_chain_enable(bridge->next);
} -EXPORT_SYMBOL(drm_bridge_enable); +EXPORT_SYMBOL(drm_bridge_chain_enable);
/**
- drm_atomic_bridge_disable - disables all bridges in the encoder chain
- drm_atomic_bridge_chain_disable - disables all bridges in the encoder chain
- @bridge: bridge control structure
- @state: atomic state being committed
@@ -364,24 +367,24 @@ EXPORT_SYMBOL(drm_bridge_enable);
- Note: the bridge passed should be the one closest to the encoder
*/ -void drm_atomic_bridge_disable(struct drm_bridge *bridge,
struct drm_atomic_state *state)
+void drm_atomic_bridge_chain_disable(struct drm_bridge *bridge,
struct drm_atomic_state *state)
{ if (!bridge) return;
- drm_atomic_bridge_disable(bridge->next, state);
drm_atomic_bridge_chain_disable(bridge->next, state);
if (bridge->funcs->atomic_disable) bridge->funcs->atomic_disable(bridge, state); else if (bridge->funcs->disable) bridge->funcs->disable(bridge);
} -EXPORT_SYMBOL(drm_atomic_bridge_disable); +EXPORT_SYMBOL(drm_atomic_bridge_chain_disable);
/**
- drm_atomic_bridge_post_disable - cleans up after disabling all bridges in the
encoder chain
- drm_atomic_bridge_chain_post_disable - cleans up after disabling all bridges
in the encoder chain
- @bridge: bridge control structure
- @state: atomic state being committed
@@ -392,8 +395,8 @@ EXPORT_SYMBOL(drm_atomic_bridge_disable);
- Note: the bridge passed should be the one closest to the encoder
*/ -void drm_atomic_bridge_post_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)
{ if (!bridge) return; @@ -403,13 +406,13 @@ void drm_atomic_bridge_post_disable(struct drm_bridge *bridge, else if (bridge->funcs->post_disable) bridge->funcs->post_disable(bridge);
- drm_atomic_bridge_post_disable(bridge->next, state);
- drm_atomic_bridge_chain_post_disable(bridge->next, state);
} -EXPORT_SYMBOL(drm_atomic_bridge_post_disable); +EXPORT_SYMBOL(drm_atomic_bridge_chain_post_disable);
/**
- drm_atomic_bridge_pre_enable - prepares for enabling all bridges in the
encoder chain
- drm_atomic_bridge_chain_pre_enable - prepares for enabling all bridges in
the encoder chain
- @bridge: bridge control structure
- @state: atomic state being committed
@@ -420,23 +423,23 @@ EXPORT_SYMBOL(drm_atomic_bridge_post_disable);
- Note: the bridge passed should be the one closest to the encoder
*/ -void drm_atomic_bridge_pre_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)
{ if (!bridge) return;
- drm_atomic_bridge_pre_enable(bridge->next, state);
drm_atomic_bridge_chain_pre_enable(bridge->next, state);
if (bridge->funcs->atomic_pre_enable) bridge->funcs->atomic_pre_enable(bridge, state); else if (bridge->funcs->pre_enable) bridge->funcs->pre_enable(bridge);
} -EXPORT_SYMBOL(drm_atomic_bridge_pre_enable); +EXPORT_SYMBOL(drm_atomic_bridge_chain_pre_enable);
/**
- drm_atomic_bridge_enable - enables all bridges in the encoder chain
- drm_atomic_bridge_chain_enable - enables all bridges in the encoder chain
- @bridge: bridge control structure
- @state: atomic state being committed
@@ -447,8 +450,8 @@ EXPORT_SYMBOL(drm_atomic_bridge_pre_enable);
- Note: the bridge passed should be the one closest to the encoder
*/ -void drm_atomic_bridge_enable(struct drm_bridge *bridge,
struct drm_atomic_state *state)
+void drm_atomic_bridge_chain_enable(struct drm_bridge *bridge,
struct drm_atomic_state *state)
{ if (!bridge) return; @@ -458,9 +461,9 @@ void drm_atomic_bridge_enable(struct drm_bridge *bridge, else if (bridge->funcs->enable) bridge->funcs->enable(bridge);
- drm_atomic_bridge_enable(bridge->next, state);
- drm_atomic_bridge_chain_enable(bridge->next, state);
} -EXPORT_SYMBOL(drm_atomic_bridge_enable); +EXPORT_SYMBOL(drm_atomic_bridge_chain_enable);
#ifdef CONFIG_OF /** diff --git a/drivers/gpu/drm/drm_probe_helper.c b/drivers/gpu/drm/drm_probe_helper.c index a7c87abe88d0..c3ea722065c4 100644 --- a/drivers/gpu/drm/drm_probe_helper.c +++ b/drivers/gpu/drm/drm_probe_helper.c @@ -112,7 +112,7 @@ drm_mode_validate_pipeline(struct drm_display_mode *mode, continue; }
ret = drm_bridge_mode_valid(encoder->bridge, mode);
if (ret != MODE_OK) { /* There is also no point in continuing for crtc check * here. */ret = drm_bridge_chain_mode_valid(encoder->bridge, mode);
diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c index c79b1f855d89..ea68b5adccbe 100644 --- a/drivers/gpu/drm/mediatek/mtk_hdmi.c +++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c @@ -1247,8 +1247,8 @@ static int mtk_hdmi_conn_mode_valid(struct drm_connector *conn, struct drm_display_mode adjusted_mode;
drm_mode_copy(&adjusted_mode, mode);
if (!drm_bridge_mode_fixup(hdmi->bridge.next, mode,
&adjusted_mode))
if (!drm_bridge_chain_mode_fixup(hdmi->bridge.next, mode,
}&adjusted_mode)) return MODE_BAD;
diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h index c0a2286a81e9..726435baf4ad 100644 --- a/include/drm/drm_bridge.h +++ b/include/drm/drm_bridge.h @@ -254,9 +254,10 @@ struct drm_bridge_funcs { * there is one) when this callback is called. * * Note that this function will only be invoked in the context of an
* atomic commit. It will not be invoked from &drm_bridge_pre_enable. It
* would be prudent to also provide an implementation of @pre_enable if
* you are expecting driver calls into &drm_bridge_pre_enable.
* atomic commit. It will not be invoked from
* &drm_bridge_chain_pre_enable. It would be prudent to also provide an
* implementation of @pre_enable if you are expecting driver calls into
* &drm_bridge_chain_pre_enable.
*/
- The @atomic_pre_enable callback is optional.
@@ -279,9 +280,9 @@ struct drm_bridge_funcs { * chain if there is one. * * Note that this function will only be invoked in the context of an
* atomic commit. It will not be invoked from &drm_bridge_enable. It
* would be prudent to also provide an implementation of @enable if
* you are expecting driver calls into &drm_bridge_enable.
* atomic commit. It will not be invoked from &drm_bridge_chain_enable.
* It would be prudent to also provide an implementation of @enable if
* you are expecting driver calls into &drm_bridge_chain_enable.
*/
- The @atomic_enable callback is optional.
@@ -301,9 +302,10 @@ struct drm_bridge_funcs { * signals) feeding it is still running when this callback is called. * * Note that this function will only be invoked in the context of an
* atomic commit. It will not be invoked from &drm_bridge_disable. It
* would be prudent to also provide an implementation of @disable if
* you are expecting driver calls into &drm_bridge_disable.
* atomic commit. It will not be invoked from
* &drm_bridge_chain_disable. It would be prudent to also provide an
* implementation of @disable if you are expecting driver calls into
* &drm_bridge_chain_disable.
*/
- The @atomic_disable callback is optional.
@@ -325,10 +327,11 @@ struct drm_bridge_funcs { * called. * * Note that this function will only be invoked in the context of an
* atomic commit. It will not be invoked from &drm_bridge_post_disable.
* atomic commit. It will not be invoked from
* &drm_bridge_chain_post_disable.
- It would be prudent to also provide an implementation of
- @post_disable if you are expecting driver calls into
* &drm_bridge_post_disable.
* &drm_bridge_chain_post_disable.
*/
- The @atomic_post_disable callback is optional.
@@ -406,27 +409,28 @@ struct drm_bridge *of_drm_find_bridge(struct device_node *np); int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge, struct drm_bridge *previous);
-bool drm_bridge_mode_fixup(struct drm_bridge *bridge,
const struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode);
-enum drm_mode_status drm_bridge_mode_valid(struct drm_bridge *bridge,
const struct drm_display_mode *mode);
-void drm_bridge_disable(struct drm_bridge *bridge); -void drm_bridge_post_disable(struct drm_bridge *bridge); -void drm_bridge_mode_set(struct drm_bridge *bridge,
const struct drm_display_mode *mode,
const struct drm_display_mode *adjusted_mode);
-void drm_bridge_pre_enable(struct drm_bridge *bridge); -void drm_bridge_enable(struct drm_bridge *bridge); +bool drm_bridge_chain_mode_fixup(struct drm_bridge *bridge,
const struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode);
+enum drm_mode_status +drm_bridge_chain_mode_valid(struct drm_bridge *bridge,
const struct drm_display_mode *mode);
+void drm_bridge_chain_disable(struct drm_bridge *bridge); +void drm_bridge_chain_post_disable(struct drm_bridge *bridge); +void drm_bridge_chain_mode_set(struct drm_bridge *bridge,
const struct drm_display_mode *mode,
const struct drm_display_mode *adjusted_mode);
+void drm_bridge_chain_pre_enable(struct drm_bridge *bridge); +void drm_bridge_chain_enable(struct drm_bridge *bridge);
-void drm_atomic_bridge_disable(struct drm_bridge *bridge,
struct drm_atomic_state *state);
-void drm_atomic_bridge_post_disable(struct drm_bridge *bridge, +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_pre_enable(struct drm_bridge *bridge,
struct drm_atomic_state *state);
+void drm_atomic_bridge_chain_enable(struct drm_bridge *bridge, struct drm_atomic_state *state); -void drm_atomic_bridge_pre_enable(struct drm_bridge *bridge,
struct drm_atomic_state *state);
-void drm_atomic_bridge_enable(struct drm_bridge *bridge,
struct drm_atomic_state *state);
#ifdef CONFIG_DRM_PANEL_BRIDGE struct drm_bridge *drm_panel_bridge_add(struct drm_panel *panel);