summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/drm_encoder.c
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>2016-11-29 19:55:44 +0100
committerArchit Taneja <architt@codeaurora.org>2016-12-18 12:02:49 +0100
commit6e15174ecd7ace10f1f996d4bc28b583987fcbac (patch)
tree849346e7e5905a16a58a3b9ce823d24a5f848f2e /drivers/gpu/drm/drm_encoder.c
parentdrm: bridge: Detach bridge from encoder at encoder cleanup time (diff)
downloadlinux-6e15174ecd7ace10f1f996d4bc28b583987fcbac.tar.xz
linux-6e15174ecd7ace10f1f996d4bc28b583987fcbac.zip
drm: bridge: Detach all bridges in a chain at encoder cleanup time
Instead of detaching only the bridge directly connected to the encoder, detach all bridges in the chain. Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Archit Taneja <architt@codeaurora.org> Link: http://patchwork.freedesktop.org/patch/msgid/1481709550-29226-6-git-send-email-laurent.pinchart+renesas@ideasonboard.com
Diffstat (limited to 'drivers/gpu/drm/drm_encoder.c')
-rw-r--r--drivers/gpu/drm/drm_encoder.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/gpu/drm/drm_encoder.c b/drivers/gpu/drm/drm_encoder.c
index 0944f08abf58..5dde3c6b1467 100644
--- a/drivers/gpu/drm/drm_encoder.c
+++ b/drivers/gpu/drm/drm_encoder.c
@@ -159,8 +159,16 @@ void drm_encoder_cleanup(struct drm_encoder *encoder)
* the indices on the drm_encoder after us in the encoder_list.
*/
- if (encoder->bridge)
- drm_bridge_detach(encoder->bridge);
+ if (encoder->bridge) {
+ struct drm_bridge *bridge = encoder->bridge;
+ struct drm_bridge *next;
+
+ while (bridge) {
+ next = bridge->next;
+ drm_bridge_detach(bridge);
+ bridge = next;
+ }
+ }
drm_mode_object_unregister(dev, &encoder->base);
kfree(encoder->name);