clk_disable_unprepare(hdlcd->clk);
 }
 
-static int hdlcd_crtc_atomic_check(struct drm_crtc *crtc,
-                                  struct drm_crtc_state *state)
+static enum drm_mode_status hdlcd_crtc_mode_valid(struct drm_crtc *crtc,
+               const struct drm_display_mode *mode)
 {
        struct hdlcd_drm_private *hdlcd = crtc_to_hdlcd_priv(crtc);
-       struct drm_display_mode *mode = &state->adjusted_mode;
        long rate, clk_rate = mode->clock * 1000;
 
        rate = clk_round_rate(hdlcd->clk, clk_rate);
        if (rate != clk_rate) {
                /* clock required by mode not supported by hardware */
-               return -EINVAL;
+               return MODE_NOCLOCK;
        }
 
-       return 0;
+       return MODE_OK;
 }
 
 static void hdlcd_crtc_atomic_begin(struct drm_crtc *crtc,
 }
 
 static const struct drm_crtc_helper_funcs hdlcd_crtc_helper_funcs = {
-       .atomic_check   = hdlcd_crtc_atomic_check,
+       .mode_valid     = hdlcd_crtc_mode_valid,
        .atomic_begin   = hdlcd_crtc_atomic_begin,
        .atomic_enable  = hdlcd_crtc_atomic_enable,
        .atomic_disable = hdlcd_crtc_atomic_disable,