Lines Matching full:crtc
44 static inline struct ipu_crtc *to_ipu_crtc(struct drm_crtc *crtc) in to_ipu_crtc() argument
46 return container_of(crtc, struct ipu_crtc, base); in to_ipu_crtc()
49 static void ipu_crtc_atomic_enable(struct drm_crtc *crtc, in ipu_crtc_atomic_enable() argument
52 struct ipu_crtc *ipu_crtc = to_ipu_crtc(crtc); in ipu_crtc_atomic_enable()
81 static void ipu_crtc_atomic_disable(struct drm_crtc *crtc, in ipu_crtc_atomic_disable() argument
84 struct ipu_crtc *ipu_crtc = to_ipu_crtc(crtc); in ipu_crtc_atomic_disable()
98 drm_crtc_vblank_off(crtc); in ipu_crtc_atomic_disable()
100 spin_lock_irq(&crtc->dev->event_lock); in ipu_crtc_atomic_disable()
101 if (crtc->state->event && !crtc->state->active) { in ipu_crtc_atomic_disable()
102 drm_crtc_send_vblank_event(crtc, crtc->state->event); in ipu_crtc_atomic_disable()
103 crtc->state->event = NULL; in ipu_crtc_atomic_disable()
105 spin_unlock_irq(&crtc->dev->event_lock); in ipu_crtc_atomic_disable()
108 static void imx_drm_crtc_reset(struct drm_crtc *crtc) in imx_drm_crtc_reset() argument
112 if (crtc->state) in imx_drm_crtc_reset()
113 __drm_atomic_helper_crtc_destroy_state(crtc->state); in imx_drm_crtc_reset()
115 kfree(to_imx_crtc_state(crtc->state)); in imx_drm_crtc_reset()
116 crtc->state = NULL; in imx_drm_crtc_reset()
120 __drm_atomic_helper_crtc_reset(crtc, &state->base); in imx_drm_crtc_reset()
123 static struct drm_crtc_state *imx_drm_crtc_duplicate_state(struct drm_crtc *crtc) in imx_drm_crtc_duplicate_state() argument
131 __drm_atomic_helper_crtc_duplicate_state(crtc, &state->base); in imx_drm_crtc_duplicate_state()
133 WARN_ON(state->base.crtc != crtc); in imx_drm_crtc_duplicate_state()
134 state->base.crtc = crtc; in imx_drm_crtc_duplicate_state()
139 static void imx_drm_crtc_destroy_state(struct drm_crtc *crtc, in imx_drm_crtc_destroy_state() argument
146 static int ipu_enable_vblank(struct drm_crtc *crtc) in ipu_enable_vblank() argument
148 struct ipu_crtc *ipu_crtc = to_ipu_crtc(crtc); in ipu_enable_vblank()
155 static void ipu_disable_vblank(struct drm_crtc *crtc) in ipu_disable_vblank() argument
157 struct ipu_crtc *ipu_crtc = to_ipu_crtc(crtc); in ipu_disable_vblank()
176 struct drm_crtc *crtc = &ipu_crtc->base; in ipu_irq_handler() local
180 drm_crtc_handle_vblank(crtc); in ipu_irq_handler()
194 spin_lock_irqsave(&crtc->dev->event_lock, flags); in ipu_irq_handler()
195 drm_crtc_send_vblank_event(crtc, ipu_crtc->event); in ipu_irq_handler()
197 drm_crtc_vblank_put(crtc); in ipu_irq_handler()
198 spin_unlock_irqrestore(&crtc->dev->event_lock, flags); in ipu_irq_handler()
205 static bool ipu_crtc_mode_fixup(struct drm_crtc *crtc, in ipu_crtc_mode_fixup() argument
209 struct ipu_crtc *ipu_crtc = to_ipu_crtc(crtc); in ipu_crtc_mode_fixup()
227 static int ipu_crtc_atomic_check(struct drm_crtc *crtc, in ipu_crtc_atomic_check() argument
230 u32 primary_plane_mask = drm_plane_mask(crtc->primary); in ipu_crtc_atomic_check()
238 static void ipu_crtc_atomic_begin(struct drm_crtc *crtc, in ipu_crtc_atomic_begin() argument
241 drm_crtc_vblank_on(crtc); in ipu_crtc_atomic_begin()
244 static void ipu_crtc_atomic_flush(struct drm_crtc *crtc, in ipu_crtc_atomic_flush() argument
247 spin_lock_irq(&crtc->dev->event_lock); in ipu_crtc_atomic_flush()
248 if (crtc->state->event) { in ipu_crtc_atomic_flush()
249 struct ipu_crtc *ipu_crtc = to_ipu_crtc(crtc); in ipu_crtc_atomic_flush()
251 WARN_ON(drm_crtc_vblank_get(crtc)); in ipu_crtc_atomic_flush()
252 ipu_crtc->event = crtc->state->event; in ipu_crtc_atomic_flush()
253 crtc->state->event = NULL; in ipu_crtc_atomic_flush()
255 spin_unlock_irq(&crtc->dev->event_lock); in ipu_crtc_atomic_flush()
258 static void ipu_crtc_mode_set_nofb(struct drm_crtc *crtc) in ipu_crtc_mode_set_nofb() argument
260 struct drm_device *dev = crtc->dev; in ipu_crtc_mode_set_nofb()
262 struct ipu_crtc *ipu_crtc = to_ipu_crtc(crtc); in ipu_crtc_mode_set_nofb()
263 struct drm_display_mode *mode = &crtc->state->adjusted_mode; in ipu_crtc_mode_set_nofb()
264 struct imx_crtc_state *imx_crtc_state = to_imx_crtc_state(crtc->state); in ipu_crtc_mode_set_nofb()
274 if (encoder->crtc == crtc) in ipu_crtc_mode_set_nofb()
358 struct drm_crtc *crtc = &ipu_crtc->base; in ipu_crtc_init() local
378 crtc->port = pdata->of_node; in ipu_crtc_init()
379 drm_crtc_helper_add(crtc, &ipu_helper_funcs); in ipu_crtc_init()
380 drm_crtc_init_with_planes(drm, crtc, &ipu_crtc->plane[0]->base, NULL, in ipu_crtc_init()
390 /* If this crtc is using the DP, add an overlay plane */ in ipu_crtc_init()
491 .name = "imx-ipuv3-crtc",