}
 
 static int vc4_hdmi_stop_packet(struct drm_encoder *encoder,
-                               enum hdmi_infoframe_type type)
+                               enum hdmi_infoframe_type type,
+                               bool poll)
 {
        struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
        u32 packet_id = type - 0x80;
        HDMI_WRITE(HDMI_RAM_PACKET_CONFIG,
                   HDMI_READ(HDMI_RAM_PACKET_CONFIG) & ~BIT(packet_id));
 
+       if (!poll)
+               return 0;
+
        return wait_for(!(HDMI_READ(HDMI_RAM_PACKET_STATUS) &
                          BIT(packet_id)), 100);
 }
        if (len < 0)
                return;
 
-       ret = vc4_hdmi_stop_packet(encoder, frame->any.type);
+       ret = vc4_hdmi_stop_packet(encoder, frame->any.type, true);
        if (ret) {
                DRM_ERROR("Failed to wait for infoframe to go idle: %d\n", ret);
                return;
        int ret;
 
        vc4_hdmi->audio.streaming = false;
-       ret = vc4_hdmi_stop_packet(encoder, HDMI_INFOFRAME_TYPE_AUDIO);
+       ret = vc4_hdmi_stop_packet(encoder, HDMI_INFOFRAME_TYPE_AUDIO, false);
        if (ret)
                dev_err(dev, "Failed to stop audio infoframe: %d\n", ret);