Hi Sam, Thank you for the patch. On Sun, Feb 06, 2022 at 04:44:05PM +0100, Sam Ravnborg wrote: > The drm_bridge_chain_{pre_enable,enable,disable,post_disable} has no > users left and we have atomic variants that should be used. > Drop them so they do not gain new users. > > Adjust a few comments to avoid references to the dropped functions. > > Signed-off-by: Sam Ravnborg <sam@xxxxxxxxxxxx> > Reviewed-by: Maxime Ripard <maxime@xxxxxxxxxx> Reviewed-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > Cc: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > Cc: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> > Cc: Maxime Ripard <mripard@xxxxxxxxxx> > Cc: Thomas Zimmermann <tzimmermann@xxxxxxx> > Cc: Andrzej Hajda <a.hajda@xxxxxxxxxxx> > Cc: Neil Armstrong <narmstrong@xxxxxxxxxxxx> > Cc: Robert Foss <robert.foss@xxxxxxxxxx> > Cc: Daniel Vetter <daniel@xxxxxxxx> > --- > drivers/gpu/drm/drm_bridge.c | 110 ----------------------------------- > include/drm/drm_bridge.h | 28 --------- > 2 files changed, 138 deletions(-) > > diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c > index c96847fc0ebc..7a57d6816105 100644 > --- a/drivers/gpu/drm/drm_bridge.c > +++ b/drivers/gpu/drm/drm_bridge.c > @@ -485,61 +485,6 @@ drm_bridge_chain_mode_valid(struct drm_bridge *bridge, > } > EXPORT_SYMBOL(drm_bridge_chain_mode_valid); > > -/** > - * 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 > - * chain, starting from the last bridge to the first. These are called before > - * calling the encoder's prepare op. > - * > - * Note: the bridge passed should be the one closest to the encoder > - */ > -void drm_bridge_chain_disable(struct drm_bridge *bridge) > -{ > - struct drm_encoder *encoder; > - struct drm_bridge *iter; > - > - if (!bridge) > - return; > - > - encoder = bridge->encoder; > - list_for_each_entry_reverse(iter, &encoder->bridge_chain, chain_node) { > - if (iter->funcs->disable) > - iter->funcs->disable(iter); > - > - if (iter == bridge) > - break; > - } > -} > -EXPORT_SYMBOL(drm_bridge_chain_disable); > - > -/** > - * 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 > - * encoder chain, starting from the first bridge to the last. These are called > - * after completing the encoder's prepare op. > - * > - * Note: the bridge passed should be the one closest to the encoder > - */ > -void drm_bridge_chain_post_disable(struct drm_bridge *bridge) > -{ > - struct drm_encoder *encoder; > - > - if (!bridge) > - return; > - > - encoder = bridge->encoder; > - list_for_each_entry_from(bridge, &encoder->bridge_chain, chain_node) { > - if (bridge->funcs->post_disable) > - bridge->funcs->post_disable(bridge); > - } > -} > -EXPORT_SYMBOL(drm_bridge_chain_post_disable); > - > /** > * drm_bridge_chain_mode_set - set proposed mode for all bridges in the > * encoder chain > @@ -569,61 +514,6 @@ void drm_bridge_chain_mode_set(struct drm_bridge *bridge, > } > EXPORT_SYMBOL(drm_bridge_chain_mode_set); > > -/** > - * 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 > - * chain, starting from the last bridge to the first. These are called > - * before calling the encoder's commit op. > - * > - * Note: the bridge passed should be the one closest to the encoder > - */ > -void drm_bridge_chain_pre_enable(struct drm_bridge *bridge) > -{ > - struct drm_encoder *encoder; > - struct drm_bridge *iter; > - > - if (!bridge) > - return; > - > - encoder = bridge->encoder; > - list_for_each_entry_reverse(iter, &encoder->bridge_chain, chain_node) { > - if (iter->funcs->pre_enable) > - iter->funcs->pre_enable(iter); > - > - if (iter == bridge) > - break; > - } > -} > -EXPORT_SYMBOL(drm_bridge_chain_pre_enable); > - > -/** > - * 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 > - * chain, starting from the first bridge to the last. These are called > - * after completing the encoder's commit op. > - * > - * Note that the bridge passed should be the one closest to the encoder > - */ > -void drm_bridge_chain_enable(struct drm_bridge *bridge) > -{ > - struct drm_encoder *encoder; > - > - if (!bridge) > - return; > - > - encoder = bridge->encoder; > - list_for_each_entry_from(bridge, &encoder->bridge_chain, chain_node) { > - if (bridge->funcs->enable) > - bridge->funcs->enable(bridge); > - } > -} > -EXPORT_SYMBOL(drm_bridge_chain_enable); > - > /** > * drm_atomic_bridge_chain_disable - disables all bridges in the encoder chain > * @bridge: bridge control structure > diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h > index fc00304be643..ed2e4a8fe510 100644 > --- a/include/drm/drm_bridge.h > +++ b/include/drm/drm_bridge.h > @@ -297,12 +297,6 @@ struct drm_bridge_funcs { > * not enable the display link feeding the next bridge in the chain (if > * 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_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. > */ > void (*atomic_pre_enable)(struct drm_bridge *bridge, > @@ -323,11 +317,6 @@ struct drm_bridge_funcs { > * callback must enable the display link feeding the next bridge in the > * 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_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. > */ > void (*atomic_enable)(struct drm_bridge *bridge, > @@ -345,12 +334,6 @@ struct drm_bridge_funcs { > * The bridge can assume that the display pipe (i.e. clocks and timing > * 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_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. > */ > void (*atomic_disable)(struct drm_bridge *bridge, > @@ -370,13 +353,6 @@ struct drm_bridge_funcs { > * signals) feeding it is no longer 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_chain_post_disable. > - * It would be prudent to also provide an implementation of > - * @post_disable if you are expecting driver calls into > - * &drm_bridge_chain_post_disable. > - * > * The @atomic_post_disable callback is optional. > */ > void (*atomic_post_disable)(struct drm_bridge *bridge, > @@ -868,13 +844,9 @@ enum drm_mode_status > drm_bridge_chain_mode_valid(struct drm_bridge *bridge, > const struct drm_display_info *info, > 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); > > int drm_atomic_bridge_chain_check(struct drm_bridge *bridge, > struct drm_crtc_state *crtc_state, -- Regards, Laurent Pinchart