return 0;
 }
 
-static void inno_hdmi_encoder_mode_set(struct drm_encoder *encoder,
-                                      struct drm_crtc_state *crtc_state,
-                                      struct drm_connector_state *conn_state)
-{
-       struct drm_display_mode *adj_mode = &crtc_state->adjusted_mode;
-       struct inno_hdmi *hdmi = encoder_to_inno_hdmi(encoder);
-
-       inno_hdmi_setup(hdmi, adj_mode);
-}
-
 static void inno_hdmi_encoder_enable(struct drm_encoder *encoder,
                                     struct drm_atomic_state *state)
 {
        struct inno_hdmi *hdmi = encoder_to_inno_hdmi(encoder);
+       struct drm_connector_state *conn_state;
+       struct drm_crtc_state *crtc_state;
+
+       conn_state = drm_atomic_get_new_connector_state(state, &hdmi->connector);
+       if (WARN_ON(!conn_state))
+               return;
+
+       crtc_state = drm_atomic_get_new_crtc_state(state, conn_state->crtc);
+       if (WARN_ON(!crtc_state))
+               return;
 
+       inno_hdmi_setup(hdmi, &crtc_state->adjusted_mode);
        inno_hdmi_set_pwr_mode(hdmi, NORMAL);
 }
 
        .atomic_check   = inno_hdmi_encoder_atomic_check,
        .atomic_enable  = inno_hdmi_encoder_enable,
        .atomic_disable = inno_hdmi_encoder_disable,
-       .atomic_mode_set        = inno_hdmi_encoder_mode_set,
 };
 
 static enum drm_connector_status