Calls to both drm_helper_hpd_irq_event() and drm_bridge_hpd_notify() in the IRQ handler causes multiple hotplug uevents and modesets during an HPD interrupt.
Change to only call drm_helper_hpd_irq_event() in IRQ handler to ensure only one hotplug uevent is triggered when the connection status or EDID has changed. The bridge connectors detect() func help ensure that any hpd_notify() func is called for all bridges in the chain. Signed-off-by: Jonas Karlman <[email protected]> --- drivers/gpu/drm/meson/meson_dw_hdmi.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/meson_dw_hdmi.c index 9aafdc768f2b..30099bf71aad 100644 --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c @@ -521,17 +521,8 @@ static irqreturn_t dw_hdmi_top_thread_irq(int irq, void *dev_id) /* HPD Events */ if (stat & (HDMITX_TOP_INTR_HPD_RISE | HDMITX_TOP_INTR_HPD_FALL) && - dw_hdmi->bridge) { - bool hpd_connected = false; - - if (stat & HDMITX_TOP_INTR_HPD_RISE) - hpd_connected = true; - + dw_hdmi->bridge) drm_helper_hpd_irq_event(dw_hdmi->bridge->dev); - drm_bridge_hpd_notify(dw_hdmi->bridge, - hpd_connected ? connector_status_connected - : connector_status_disconnected); - } return IRQ_HANDLED; } -- 2.54.0
