diff --git a/drivers/gpu/drm/imx/dcnano/dcnano-crtc.c b/drivers/gpu/drm/imx/dcnano/dcnano-crtc.c index 7524c3f78dbc4d693f3e7f90b05a704e83b62e18..7de24e5aa5fd344452ae49d989f87b79900b7cdf 100644 --- a/drivers/gpu/drm/imx/dcnano/dcnano-crtc.c +++ b/drivers/gpu/drm/imx/dcnano/dcnano-crtc.c @@ -202,6 +202,9 @@ static void dcnano_crtc_mode_set_nofb(struct drm_crtc *crtc) struct dcnano_dev *dcnano = crtc_to_dcnano_dev(crtc); struct drm_display_mode *adj = &crtc->state->adjusted_mode; + if (dcnano->modeset_done) + return; + dcnano_crtc_dbg(crtc, "mode " DRM_MODE_FMT "\n", DRM_MODE_ARG(adj)); dcnano_crtc_set_pixel_clock(crtc); @@ -211,6 +214,8 @@ static void dcnano_crtc_mode_set_nofb(struct drm_crtc *crtc) if (dcnano->port == DCNANO_DPI_PORT) dcnano_crtc_mode_set_nofb_dpi(crtc); + + dcnano->modeset_done = true; } static void dcnano_crtc_queue_state_event(struct drm_crtc *crtc) @@ -330,6 +335,8 @@ static void dcnano_crtc_atomic_disable(struct drm_crtc *crtc, crtc->state->event = NULL; } spin_unlock_irq(&crtc->dev->event_lock); + + dcnano->modeset_done = false; } static bool diff --git a/drivers/gpu/drm/imx/dcnano/dcnano-drv.h b/drivers/gpu/drm/imx/dcnano/dcnano-drv.h index 357a496c5f85206c80ec95a39096ab4d80bf4bd0..bbcdd2f5d2041df90ef348502fab773cc12962e4 100644 --- a/drivers/gpu/drm/imx/dcnano/dcnano-drv.h +++ b/drivers/gpu/drm/imx/dcnano/dcnano-drv.h @@ -42,6 +42,8 @@ struct dcnano_dev { struct drm_pending_vblank_event *event; enum dcnano_port port; + + bool modeset_done; }; static inline struct dcnano_dev *to_dcnano_dev(struct drm_device *drm)