]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
drm/bridge_connector: enable HPD by default if supported
authorNikita Yushchenko <nikita.yoush@cogentembedded.com>
Sat, 25 Dec 2021 06:31:51 +0000 (09:31 +0300)
committerPaul Cercueil <paul@crapouillou.net>
Fri, 4 Mar 2022 19:34:24 +0000 (19:34 +0000)
Hotplug events reported by bridge drivers over drm_bridge_hpd_notify()
get ignored unless somebody calls drm_bridge_hpd_enable(). When the
connector for the bridge is bridge_connector, such a call is done from
drm_bridge_connector_enable_hpd().

However drm_bridge_connector_enable_hpd() is never called on init paths,
documentation suggests that it is intended for suspend/resume paths.

In result, once encoders are switched to bridge_connector,
bridge-detected HPD stops working.

This patch adds a call to that API on init path.

This fixes HDMI HPD with rcar-du + adv7513 case when adv7513 reports HPD
events via interrupts.

Fixes: c24110a8fd09 ("drm: rcar-du: Use drm_bridge_connector_init() helper")
Signed-off-by: Nikita Yushchenko <nikita.yoush@cogentembedded.com>
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Tested-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20211225063151.2110878-1-nikita.yoush@cogentembedded.com
drivers/gpu/drm/drm_bridge_connector.c

index 60923cdfe8e1c41152e78a205cebcb8275300b1b..6b3dad03d77d065f687a34781d009d06b5dc5336 100644 (file)
@@ -384,8 +384,10 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm,
                                    connector_type, ddc);
        drm_connector_helper_add(connector, &drm_bridge_connector_helper_funcs);
 
-       if (bridge_connector->bridge_hpd)
+       if (bridge_connector->bridge_hpd) {
                connector->polled = DRM_CONNECTOR_POLL_HPD;
+               drm_bridge_connector_enable_hpd(connector);
+       }
        else if (bridge_connector->bridge_detect)
                connector->polled = DRM_CONNECTOR_POLL_CONNECT
                                  | DRM_CONNECTOR_POLL_DISCONNECT;