diff --git a/drivers/drm/meson_hdmi.c b/drivers/drm/meson_hdmi.c index c6ac05033..953f30cea 100644 --- a/drivers/drm/meson_hdmi.c +++ b/drivers/drm/meson_hdmi.c @@ -764,6 +764,13 @@ static enum drm_connector_status am_hdmitx_connector_detect int hpdstat = hdmitx_get_hpd_state(tx_comm); DRM_DEBUG_KMS("am_hdmi_connector_detect [%d]\n", hpdstat); +#ifdef CONFIG_ARCH_MESON_ODROID_COMMON + if (hpdstat) + am_hdmi->odroid_hpd_seen = true; + + if (!am_hdmi->odroid_hpd_seen) + return connector_status_connected; +#endif return hpdstat == 1 ? connector_status_connected : connector_status_disconnected; } @@ -2710,6 +2717,10 @@ static void meson_hdmitx_hpd_cb(void *data) #endif DRM_INFO("drm hdmitx hpd notify\n"); +#ifdef CONFIG_ARCH_MESON_ODROID_COMMON + if (hdmitx_get_hpd_state(tx_comm)) + am_hdmi->odroid_hpd_seen = true; +#endif if (!hdmitx_get_hpd_state(tx_comm) && !am_hdmi->android_path) { drm_modeset_lock(mode_lock, NULL); meson_hdmitx_disconnect_hdcp(am_hdmi); diff --git a/drivers/drm/meson_hdmi.h b/drivers/drm/meson_hdmi.h index 92814af57..de20e144c 100644 --- a/drivers/drm/meson_hdmi.h +++ b/drivers/drm/meson_hdmi.h @@ -76,6 +76,7 @@ struct am_hdmi_tx { * programmed normally again. */ bool uboot_reuse_consumed; + bool odroid_hpd_seen; #endif int min_vfreq;