diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c index d212c8e1a042..b8262f6bca7e 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -260,6 +260,8 @@ struct dw_hdmi { void (*disable_audio)(struct dw_hdmi *hdmi); struct cec_notifier *cec_notifier; + + bool initialized; /* hdmi is enabled before bind */ }; #define HDMI_IH_PHY_STAT0_RX_SENSE \ @@ -2229,6 +2231,10 @@ static void dw_hdmi_update_power(struct dw_hdmi *hdmi) } if (force == DRM_FORCE_OFF) { + if (hdmi->initialized) { + hdmi->initialized = false; + hdmi->disabled = true; + } if (hdmi->bridge_is_on) dw_hdmi_poweroff(hdmi); } else { @@ -3100,6 +3106,7 @@ __dw_hdmi_probe(struct platform_device *pdev, prod_id1 & HDMI_PRODUCT_ID1_HDCP ? "with" : "without", hdmi->phy.name); + hdmi->initialized = false; ret = hdmi_readb(hdmi, HDMI_PHY_STAT0); if ((ret & HDMI_PHY_TX_PHY_LOCK) && (ret & HDMI_PHY_HPD) && hdmi_readb(hdmi, HDMI_FC_EXCTRLDUR)) { @@ -3107,6 +3114,7 @@ __dw_hdmi_probe(struct platform_device *pdev, hdmi->disabled = false; hdmi->bridge_is_on = true; hdmi->phy.enabled = true; + hdmi->initialized = true; } else if (ret & HDMI_PHY_TX_PHY_LOCK) { hdmi->phy.ops->disable(hdmi, hdmi->phy.data); }