struct cec_connector_info conn_info;
        struct platform_device *pdev = vc4_hdmi->pdev;
        struct device *dev = &pdev->dev;
-       unsigned long flags;
-       u32 value;
        int ret;
 
        if (!of_find_property(dev->of_node, "interrupts", NULL)) {
        cec_fill_conn_info_from_drm(&conn_info, &vc4_hdmi->connector);
        cec_s_conn_info(vc4_hdmi->cec_adap, &conn_info);
 
-       spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
-       value = HDMI_READ(HDMI_CEC_CNTRL_1);
-       /* Set the logical address to Unregistered */
-       value |= VC4_HDMI_CEC_ADDR_MASK;
-       HDMI_WRITE(HDMI_CEC_CNTRL_1, value);
-       spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
-
-       vc4_hdmi_cec_update_clk_div(vc4_hdmi);
-
        if (vc4_hdmi->variant->external_irq_controller) {
                ret = request_threaded_irq(platform_get_irq_byname(pdev, "cec-rx"),
                                           vc4_cec_irq_handler_rx_bare,
                if (ret)
                        goto err_remove_cec_rx_handler;
        } else {
-               spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
-               HDMI_WRITE(HDMI_CEC_CPU_MASK_SET, 0xffffffff);
-               spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
-
                ret = request_threaded_irq(platform_get_irq(pdev, 0),
                                           vc4_cec_irq_handler,
                                           vc4_cec_irq_handler_thread, 0,
 }
 
 static void vc4_hdmi_cec_exit(struct vc4_hdmi *vc4_hdmi) {};
-
 #endif
 
 static int vc4_hdmi_build_regset(struct vc4_hdmi *vc4_hdmi,
 static int vc4_hdmi_runtime_resume(struct device *dev)
 {
        struct vc4_hdmi *vc4_hdmi = dev_get_drvdata(dev);
+       unsigned long __maybe_unused flags;
+       u32 __maybe_unused value;
        int ret;
 
        ret = clk_prepare_enable(vc4_hdmi->hsm_clock);
        if (ret)
                return ret;
 
+       if (vc4_hdmi->variant->reset)
+               vc4_hdmi->variant->reset(vc4_hdmi);
+
+#ifdef CONFIG_DRM_VC4_HDMI_CEC
+       spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
+       value = HDMI_READ(HDMI_CEC_CNTRL_1);
+       /* Set the logical address to Unregistered */
+       value |= VC4_HDMI_CEC_ADDR_MASK;
+       HDMI_WRITE(HDMI_CEC_CNTRL_1, value);
+       spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
+
+       vc4_hdmi_cec_update_clk_div(vc4_hdmi);
+
+       if (!vc4_hdmi->variant->external_irq_controller) {
+               spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
+               HDMI_WRITE(HDMI_CEC_CPU_MASK_SET, 0xffffffff);
+               spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
+       }
+#endif
+
        return 0;
 }
 
        pm_runtime_set_active(dev);
        pm_runtime_enable(dev);
 
-       if (vc4_hdmi->variant->reset)
-               vc4_hdmi->variant->reset(vc4_hdmi);
-
        if ((of_device_is_compatible(dev->of_node, "brcm,bcm2711-hdmi0") ||
             of_device_is_compatible(dev->of_node, "brcm,bcm2711-hdmi1")) &&
            HDMI_READ(HDMI_VID_CTL) & VC4_HD_VID_CTL_ENABLE) {