vc4_hdmi->variant->reset(vc4_hdmi);
 
        if (vc4_hdmi->variant->phy_init)
-               vc4_hdmi->variant->phy_init(vc4_hdmi, mode);
+               vc4_hdmi->variant->phy_init(vc4_hdmi, vc4_conn_state);
 
        HDMI_WRITE(HDMI_SCHEDULER_CONTROL,
                   HDMI_READ(HDMI_SCHEDULER_CONTROL) |
 
        return container_of(encoder, struct vc4_hdmi_encoder, base.base);
 }
 
-struct drm_display_mode;
-
 struct vc4_hdmi;
 struct vc4_hdmi_register;
+struct vc4_hdmi_connector_state;
 
 enum vc4_hdmi_phy_channel {
        PHY_LANE_0 = 0,
        void (*set_timings)(struct vc4_hdmi *vc4_hdmi,
                            struct drm_display_mode *mode);
 
-       /* Callback to initialize the PHY according to the mode */
+       /* Callback to initialize the PHY according to the connector state */
        void (*phy_init)(struct vc4_hdmi *vc4_hdmi,
-                        struct drm_display_mode *mode);
+                        struct vc4_hdmi_connector_state *vc4_conn_state);
 
        /* Callback to disable the PHY */
        void (*phy_disable)(struct vc4_hdmi *vc4_hdmi);
 }
 
 void vc4_hdmi_phy_init(struct vc4_hdmi *vc4_hdmi,
-                      struct drm_display_mode *mode);
+                      struct vc4_hdmi_connector_state *vc4_conn_state);
 void vc4_hdmi_phy_disable(struct vc4_hdmi *vc4_hdmi);
 void vc4_hdmi_phy_rng_enable(struct vc4_hdmi *vc4_hdmi);
 void vc4_hdmi_phy_rng_disable(struct vc4_hdmi *vc4_hdmi);
 
 void vc5_hdmi_phy_init(struct vc4_hdmi *vc4_hdmi,
-                      struct drm_display_mode *mode);
+                      struct vc4_hdmi_connector_state *vc4_conn_state);
 void vc5_hdmi_phy_disable(struct vc4_hdmi *vc4_hdmi);
 void vc5_hdmi_phy_rng_enable(struct vc4_hdmi *vc4_hdmi);
 void vc5_hdmi_phy_rng_disable(struct vc4_hdmi *vc4_hdmi);
 
 
 #define OSCILLATOR_FREQUENCY   54000000
 
-void vc4_hdmi_phy_init(struct vc4_hdmi *vc4_hdmi, struct drm_display_mode *mode)
+void vc4_hdmi_phy_init(struct vc4_hdmi *vc4_hdmi,
+                      struct vc4_hdmi_connector_state *conn_state)
 {
        /* PHY should be in reset, like
         * vc4_hdmi_encoder_disable() does.
        HDMI_WRITE(HDMI_TX_PHY_POWERDOWN_CTL, BIT(10));
 }
 
-void vc5_hdmi_phy_init(struct vc4_hdmi *vc4_hdmi, struct drm_display_mode *mode)
+void vc5_hdmi_phy_init(struct vc4_hdmi *vc4_hdmi,
+                      struct vc4_hdmi_connector_state *conn_state)
 {
        const struct phy_lane_settings *chan0_settings, *chan1_settings, *chan2_settings, *clock_settings;
        const struct vc4_hdmi_variant *variant = vc4_hdmi->variant;
-       unsigned long long pixel_freq = mode->clock * 1000;
+       unsigned long long pixel_freq = conn_state->pixel_rate;
        unsigned long long vco_freq;
        unsigned char word_sel;
        u8 vco_sel, vco_div;