drm/bridge: Fix the stop condition of drm_bridge_chain_pre_enable()
authorDouglas Anderson <dianders@chromium.org>
Fri, 16 Apr 2021 22:39:24 +0000 (15:39 -0700)
committerDouglas Anderson <dianders@chromium.org>
Tue, 20 Apr 2021 15:56:44 +0000 (08:56 -0700)
The drm_bridge_chain_pre_enable() is not the proper opposite of
drm_bridge_chain_post_disable(). It continues along the chain to
_before_ the starting bridge. Let's fix that.

Fixes: 05193dc38197 ("drm/bridge: Make the bridge chain a double-linked list")
Signed-off-by: Douglas Anderson <dianders@chromium.org>
Reviewed-by: Andrzej Hajda <a.hajda@samsung.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210416153909.v4.1.If62a003f76a2bc4ccc6c53565becc05d2aad4430@changeid
drivers/gpu/drm/drm_bridge.c

index 64f0effb52ac1210dd54da79640c3361da3a825f..044acd07c15387a612946d821bec9701478b7196 100644 (file)
@@ -522,6 +522,9 @@ void drm_bridge_chain_pre_enable(struct drm_bridge *bridge)
        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);