Lines Matching refs:crtc
88 struct drm_crtc *crtc = &mtk_crtc->base; in mtk_drm_crtc_finish_page_flip() local
91 spin_lock_irqsave(&crtc->dev->event_lock, flags); in mtk_drm_crtc_finish_page_flip()
92 drm_crtc_send_vblank_event(crtc, mtk_crtc->event); in mtk_drm_crtc_finish_page_flip()
93 drm_crtc_vblank_put(crtc); in mtk_drm_crtc_finish_page_flip()
95 spin_unlock_irqrestore(&crtc->dev->event_lock, flags); in mtk_drm_crtc_finish_page_flip()
107 static void mtk_drm_crtc_destroy(struct drm_crtc *crtc) in mtk_drm_crtc_destroy() argument
109 struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_drm_crtc_destroy()
113 drm_crtc_cleanup(crtc); in mtk_drm_crtc_destroy()
116 static void mtk_drm_crtc_reset(struct drm_crtc *crtc) in mtk_drm_crtc_reset() argument
120 if (crtc->state) in mtk_drm_crtc_reset()
121 __drm_atomic_helper_crtc_destroy_state(crtc->state); in mtk_drm_crtc_reset()
123 kfree(to_mtk_crtc_state(crtc->state)); in mtk_drm_crtc_reset()
124 crtc->state = NULL; in mtk_drm_crtc_reset()
128 __drm_atomic_helper_crtc_reset(crtc, &state->base); in mtk_drm_crtc_reset()
131 static struct drm_crtc_state *mtk_drm_crtc_duplicate_state(struct drm_crtc *crtc) in mtk_drm_crtc_duplicate_state() argument
139 __drm_atomic_helper_crtc_duplicate_state(crtc, &state->base); in mtk_drm_crtc_duplicate_state()
141 WARN_ON(state->base.crtc != crtc); in mtk_drm_crtc_duplicate_state()
142 state->base.crtc = crtc; in mtk_drm_crtc_duplicate_state()
147 static void mtk_drm_crtc_destroy_state(struct drm_crtc *crtc, in mtk_drm_crtc_destroy_state() argument
154 static bool mtk_drm_crtc_mode_fixup(struct drm_crtc *crtc, in mtk_drm_crtc_mode_fixup() argument
162 static void mtk_drm_crtc_mode_set_nofb(struct drm_crtc *crtc) in mtk_drm_crtc_mode_set_nofb() argument
164 struct mtk_crtc_state *state = to_mtk_crtc_state(crtc->state); in mtk_drm_crtc_mode_set_nofb()
166 state->pending_width = crtc->mode.hdisplay; in mtk_drm_crtc_mode_set_nofb()
167 state->pending_height = crtc->mode.vdisplay; in mtk_drm_crtc_mode_set_nofb()
168 state->pending_vrefresh = drm_mode_vrefresh(&crtc->mode); in mtk_drm_crtc_mode_set_nofb()
202 struct mtk_ddp_comp *mtk_drm_ddp_comp_for_plane(struct drm_crtc *crtc, in mtk_drm_ddp_comp_for_plane() argument
206 struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_drm_ddp_comp_for_plane()
233 struct drm_crtc *crtc = &mtk_crtc->base; in mtk_crtc_ddp_hw_init() local
241 if (WARN_ON(!crtc->state)) in mtk_crtc_ddp_hw_init()
244 width = crtc->state->adjusted_mode.hdisplay; in mtk_crtc_ddp_hw_init()
245 height = crtc->state->adjusted_mode.vdisplay; in mtk_crtc_ddp_hw_init()
246 vrefresh = drm_mode_vrefresh(&crtc->state->adjusted_mode); in mtk_crtc_ddp_hw_init()
248 drm_for_each_encoder(encoder, crtc->dev) { in mtk_crtc_ddp_hw_init()
249 if (encoder->crtc != crtc) in mtk_crtc_ddp_hw_init()
252 drm_connector_list_iter_begin(crtc->dev, &conn_iter); in mtk_crtc_ddp_hw_init()
263 ret = pm_runtime_resume_and_get(crtc->dev->dev); in mtk_crtc_ddp_hw_init()
309 comp = mtk_drm_ddp_comp_for_plane(crtc, plane, &local_layer); in mtk_crtc_ddp_hw_init()
320 pm_runtime_put(crtc->dev->dev); in mtk_crtc_ddp_hw_init()
327 struct drm_crtc *crtc = &mtk_crtc->base; in mtk_crtc_ddp_hw_fini() local
353 if (crtc->state->event && !crtc->state->active) { in mtk_crtc_ddp_hw_fini()
354 spin_lock_irq(&crtc->dev->event_lock); in mtk_crtc_ddp_hw_fini()
355 drm_crtc_send_vblank_event(crtc, crtc->state->event); in mtk_crtc_ddp_hw_fini()
356 crtc->state->event = NULL; in mtk_crtc_ddp_hw_fini()
357 spin_unlock_irq(&crtc->dev->event_lock); in mtk_crtc_ddp_hw_fini()
361 static void mtk_crtc_ddp_config(struct drm_crtc *crtc, in mtk_crtc_ddp_config() argument
364 struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_crtc_ddp_config()
394 comp = mtk_drm_ddp_comp_for_plane(crtc, plane, in mtk_crtc_ddp_config()
416 comp = mtk_drm_ddp_comp_for_plane(crtc, plane, in mtk_crtc_ddp_config()
435 struct drm_crtc *crtc = &mtk_crtc->base; in mtk_drm_crtc_update_config() local
436 struct mtk_drm_private *priv = crtc->dev->dev_private; in mtk_drm_crtc_update_config()
467 mtk_crtc_ddp_config(crtc, NULL); in mtk_drm_crtc_update_config()
476 mtk_crtc_ddp_config(crtc, cmdq_handle); in mtk_drm_crtc_update_config()
487 struct drm_crtc *crtc = data; in mtk_crtc_ddp_irq() local
488 struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_crtc_ddp_irq()
489 struct mtk_drm_private *priv = crtc->dev->dev_private; in mtk_crtc_ddp_irq()
496 mtk_crtc_ddp_config(crtc, NULL); in mtk_crtc_ddp_irq()
501 static int mtk_drm_crtc_enable_vblank(struct drm_crtc *crtc) in mtk_drm_crtc_enable_vblank() argument
503 struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_drm_crtc_enable_vblank()
511 static void mtk_drm_crtc_disable_vblank(struct drm_crtc *crtc) in mtk_drm_crtc_disable_vblank() argument
513 struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_drm_crtc_disable_vblank()
519 int mtk_drm_crtc_plane_check(struct drm_crtc *crtc, struct drm_plane *plane, in mtk_drm_crtc_plane_check() argument
525 comp = mtk_drm_ddp_comp_for_plane(crtc, plane, &local_layer); in mtk_drm_crtc_plane_check()
531 void mtk_drm_crtc_async_update(struct drm_crtc *crtc, struct drm_plane *plane, in mtk_drm_crtc_async_update() argument
534 struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_drm_crtc_async_update()
542 static void mtk_drm_crtc_atomic_enable(struct drm_crtc *crtc, in mtk_drm_crtc_atomic_enable() argument
545 struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_drm_crtc_atomic_enable()
549 DRM_DEBUG_DRIVER("%s %d\n", __func__, crtc->base.id); in mtk_drm_crtc_atomic_enable()
563 drm_crtc_vblank_on(crtc); in mtk_drm_crtc_atomic_enable()
567 static void mtk_drm_crtc_atomic_disable(struct drm_crtc *crtc, in mtk_drm_crtc_atomic_disable() argument
570 struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_drm_crtc_atomic_disable()
574 DRM_DEBUG_DRIVER("%s %d\n", __func__, crtc->base.id); in mtk_drm_crtc_atomic_disable()
591 drm_crtc_wait_one_vblank(crtc); in mtk_drm_crtc_atomic_disable()
593 drm_crtc_vblank_off(crtc); in mtk_drm_crtc_atomic_disable()
600 static void mtk_drm_crtc_atomic_begin(struct drm_crtc *crtc, in mtk_drm_crtc_atomic_begin() argument
604 crtc); in mtk_drm_crtc_atomic_begin()
606 struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_drm_crtc_atomic_begin()
612 mtk_crtc_state->base.event->pipe = drm_crtc_index(crtc); in mtk_drm_crtc_atomic_begin()
613 WARN_ON(drm_crtc_vblank_get(crtc) != 0); in mtk_drm_crtc_atomic_begin()
619 static void mtk_drm_crtc_atomic_flush(struct drm_crtc *crtc, in mtk_drm_crtc_atomic_flush() argument
622 struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_drm_crtc_atomic_flush()
625 if (crtc->state->color_mgmt_changed) in mtk_drm_crtc_atomic_flush()
627 mtk_ddp_gamma_set(mtk_crtc->ddp_comp[i], crtc->state); in mtk_drm_crtc_atomic_flush()
628 mtk_ddp_ctm_set(mtk_crtc->ddp_comp[i], crtc->state); in mtk_drm_crtc_atomic_flush()