Wait until the connector detect ops is called to invalidate CEC phys
addr instead of doing it directly from the irq handler.

The CEC notifier is only registered for the dw-hdmi connector so this
has no impact when the bridge connector is used.

Reviewed-by: Neil Armstrong <[email protected]>
Tested-by: Diederik de Haas <[email protected]>  # Rock64, RockPro64, 
Quartz64-B
Signed-off-by: Jonas Karlman <[email protected]>
---
v7: Update commit message
v6: Collect t-b tag
v5: No change
v4: No change
v3: No change
v2: Collect r-b tag
---
 drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c 
b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
index 5fd26ff8f55b..aae1b890167b 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
@@ -2472,7 +2472,17 @@ dw_hdmi_connector_detect(struct drm_connector 
*connector, bool force)
 {
        struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi,
                                             connector);
-       return dw_hdmi_detect(hdmi);
+       enum drm_connector_status status;
+
+       status = dw_hdmi_detect(hdmi);
+
+       if (status == connector_status_disconnected) {
+               mutex_lock(&hdmi->cec_notifier_mutex);
+               cec_notifier_phys_addr_invalidate(hdmi->cec_notifier);
+               mutex_unlock(&hdmi->cec_notifier_mutex);
+       }
+
+       return status;
 }
 
 static int dw_hdmi_connector_get_modes(struct drm_connector *connector)
@@ -3106,12 +3116,6 @@ static irqreturn_t dw_hdmi_irq(int irq, void *dev_id)
                                       phy_stat & HDMI_PHY_HPD,
                                       phy_stat & HDMI_PHY_RX_SENSE);
 
-               if ((phy_stat & (HDMI_PHY_RX_SENSE | HDMI_PHY_HPD)) == 0) {
-                       mutex_lock(&hdmi->cec_notifier_mutex);
-                       cec_notifier_phys_addr_invalidate(hdmi->cec_notifier);
-                       mutex_unlock(&hdmi->cec_notifier_mutex);
-               }
-
                if ((intr_stat & HDMI_IH_PHY_STAT0_HPD) &&
                    (phy_stat & HDMI_PHY_HPD))
                        status = connector_status_connected;
-- 
2.54.0

Reply via email to