diff options
author | Boris Brezillon <boris.brezillon@collabora.com> | 2019-12-03 15:15:07 +0100 |
---|---|---|
committer | Boris Brezillon <boris.brezillon@collabora.com> | 2019-12-09 10:02:45 +0100 |
commit | 35a61fe9218a9d32a93447bdcca1d0f167cd0433 (patch) | |
tree | 5c6cd23da83aac637ce749cfb6e0aaa8e49b9271 /drivers/gpu/drm/drm_encoder.c | |
parent | fadf872d9d9274a3be34d8438e0f6bb465c8f98b (diff) | |
download | lwn-35a61fe9218a9d32a93447bdcca1d0f167cd0433.tar.gz lwn-35a61fe9218a9d32a93447bdcca1d0f167cd0433.zip |
drm: Stop accessing encoder->bridge directly
We are about to replace the single-linked bridge list by a double-linked
one based on list.h, leading to the suppression of the encoder->bridge
field. But before we can do that we must provide a
drm_bridge_chain_get_first_bridge() bridge helper and patch all drivers
and core helpers to use it instead of directly accessing encoder->bridge.
Note that we still have 2 drivers (VC4 and Exynos) manipulating the
encoder->bridge field directly because they need to cut the bridge chain
in order to control the enable/disable sequence. This is definitely
not something we want to encourage, so let's keep those 2 oddities
around until we find a better solution.
Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Neil Armstrong <narmstrong@baylibre.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191203141515.3597631-4-boris.brezillon@collabora.com
Diffstat (limited to 'drivers/gpu/drm/drm_encoder.c')
-rw-r--r-- | drivers/gpu/drm/drm_encoder.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/gpu/drm/drm_encoder.c b/drivers/gpu/drm/drm_encoder.c index fcd3af1ac432..a2cc7e7241a9 100644 --- a/drivers/gpu/drm/drm_encoder.c +++ b/drivers/gpu/drm/drm_encoder.c @@ -167,9 +167,10 @@ void drm_encoder_cleanup(struct drm_encoder *encoder) */ if (encoder->bridge) { - struct drm_bridge *bridge = encoder->bridge; + struct drm_bridge *bridge; struct drm_bridge *next; + bridge = drm_bridge_chain_get_first_bridge(encoder); while (bridge) { next = drm_bridge_get_next_bridge(bridge); drm_bridge_detach(bridge); |