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
85 crtc); in ipu_crtc_atomic_disable()
86 struct ipu_crtc *ipu_crtc = to_ipu_crtc(crtc); in ipu_crtc_atomic_disable()
100 drm_crtc_vblank_off(crtc); in ipu_crtc_atomic_disable()
102 spin_lock_irq(&crtc->dev->event_lock); in ipu_crtc_atomic_disable()
103 if (crtc->state->event && !crtc->state->active) { in ipu_crtc_atomic_disable()
104 drm_crtc_send_vblank_event(crtc, crtc->state->event); in ipu_crtc_atomic_disable()
105 crtc->state->event = NULL; in ipu_crtc_atomic_disable()
107 spin_unlock_irq(&crtc->dev->event_lock); in ipu_crtc_atomic_disable()
110 static void imx_drm_crtc_reset(struct drm_crtc *crtc) in imx_drm_crtc_reset() argument
114 if (crtc->state) in imx_drm_crtc_reset()
115 __drm_atomic_helper_crtc_destroy_state(crtc->state); in imx_drm_crtc_reset()
117 kfree(to_imx_crtc_state(crtc->state)); in imx_drm_crtc_reset()
118 crtc->state = NULL; in imx_drm_crtc_reset()
122 __drm_atomic_helper_crtc_reset(crtc, &state->base); in imx_drm_crtc_reset()
125 static struct drm_crtc_state *imx_drm_crtc_duplicate_state(struct drm_crtc *crtc) in imx_drm_crtc_duplicate_state() argument
133 __drm_atomic_helper_crtc_duplicate_state(crtc, &state->base); in imx_drm_crtc_duplicate_state()
135 WARN_ON(state->base.crtc != crtc); in imx_drm_crtc_duplicate_state()
136 state->base.crtc = crtc; in imx_drm_crtc_duplicate_state()
141 static void imx_drm_crtc_destroy_state(struct drm_crtc *crtc, in imx_drm_crtc_destroy_state() argument
148 static int ipu_enable_vblank(struct drm_crtc *crtc) in ipu_enable_vblank() argument
150 struct ipu_crtc *ipu_crtc = to_ipu_crtc(crtc); in ipu_enable_vblank()
157 static void ipu_disable_vblank(struct drm_crtc *crtc) in ipu_disable_vblank() argument
159 struct ipu_crtc *ipu_crtc = to_ipu_crtc(crtc); in ipu_disable_vblank()
177 struct drm_crtc *crtc = &ipu_crtc->base; in ipu_irq_handler() local
181 drm_crtc_handle_vblank(crtc); in ipu_irq_handler()
195 spin_lock_irqsave(&crtc->dev->event_lock, flags); in ipu_irq_handler()
196 drm_crtc_send_vblank_event(crtc, ipu_crtc->event); in ipu_irq_handler()
198 drm_crtc_vblank_put(crtc); in ipu_irq_handler()
199 spin_unlock_irqrestore(&crtc->dev->event_lock, flags); in ipu_irq_handler()
206 static bool ipu_crtc_mode_fixup(struct drm_crtc *crtc, in ipu_crtc_mode_fixup() argument
210 struct ipu_crtc *ipu_crtc = to_ipu_crtc(crtc); in ipu_crtc_mode_fixup()
228 static int ipu_crtc_atomic_check(struct drm_crtc *crtc, in ipu_crtc_atomic_check() argument
232 crtc); in ipu_crtc_atomic_check()
233 u32 primary_plane_mask = drm_plane_mask(crtc->primary); in ipu_crtc_atomic_check()
241 static void ipu_crtc_atomic_begin(struct drm_crtc *crtc, in ipu_crtc_atomic_begin() argument
244 drm_crtc_vblank_on(crtc); in ipu_crtc_atomic_begin()
247 static void ipu_crtc_atomic_flush(struct drm_crtc *crtc, in ipu_crtc_atomic_flush() argument
250 spin_lock_irq(&crtc->dev->event_lock); in ipu_crtc_atomic_flush()
251 if (crtc->state->event) { in ipu_crtc_atomic_flush()
252 struct ipu_crtc *ipu_crtc = to_ipu_crtc(crtc); in ipu_crtc_atomic_flush()
254 WARN_ON(drm_crtc_vblank_get(crtc)); in ipu_crtc_atomic_flush()
255 ipu_crtc->event = crtc->state->event; in ipu_crtc_atomic_flush()
256 crtc->state->event = NULL; in ipu_crtc_atomic_flush()
258 spin_unlock_irq(&crtc->dev->event_lock); in ipu_crtc_atomic_flush()
261 static void ipu_crtc_mode_set_nofb(struct drm_crtc *crtc) in ipu_crtc_mode_set_nofb() argument
263 struct drm_device *dev = crtc->dev; in ipu_crtc_mode_set_nofb()
265 struct ipu_crtc *ipu_crtc = to_ipu_crtc(crtc); in ipu_crtc_mode_set_nofb()
266 struct drm_display_mode *mode = &crtc->state->adjusted_mode; in ipu_crtc_mode_set_nofb()
267 struct imx_crtc_state *imx_crtc_state = to_imx_crtc_state(crtc->state); in ipu_crtc_mode_set_nofb()
277 if (encoder->crtc == crtc) in ipu_crtc_mode_set_nofb()
371 struct drm_crtc *crtc; in ipu_drm_bind() local
391 crtc = &ipu_crtc->base; in ipu_drm_bind()
392 crtc->port = pdata->of_node; in ipu_drm_bind()
393 drm_crtc_helper_add(crtc, &ipu_helper_funcs); in ipu_drm_bind()
402 /* If this crtc is using the DP, add an overlay plane */ in ipu_drm_bind()
450 .name = "imx-ipuv3-crtc",