Lines Matching full:crtc
27 * struct mtk_drm_crtc - MediaTek specific crtc structure.
28 * @base: crtc object.
35 * @ddp_comp: array of pointers the mtk_ddp_comp structures used by this crtc
84 struct drm_crtc *crtc = &mtk_crtc->base; in mtk_drm_crtc_finish_page_flip() local
87 spin_lock_irqsave(&crtc->dev->event_lock, flags); in mtk_drm_crtc_finish_page_flip()
88 drm_crtc_send_vblank_event(crtc, mtk_crtc->event); in mtk_drm_crtc_finish_page_flip()
89 drm_crtc_vblank_put(crtc); in mtk_drm_crtc_finish_page_flip()
91 spin_unlock_irqrestore(&crtc->dev->event_lock, flags); in mtk_drm_crtc_finish_page_flip()
103 static void mtk_drm_crtc_destroy(struct drm_crtc *crtc) in mtk_drm_crtc_destroy() argument
105 struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_drm_crtc_destroy()
109 drm_crtc_cleanup(crtc); in mtk_drm_crtc_destroy()
112 static void mtk_drm_crtc_reset(struct drm_crtc *crtc) in mtk_drm_crtc_reset() argument
116 if (crtc->state) in mtk_drm_crtc_reset()
117 __drm_atomic_helper_crtc_destroy_state(crtc->state); in mtk_drm_crtc_reset()
119 kfree(to_mtk_crtc_state(crtc->state)); in mtk_drm_crtc_reset()
120 crtc->state = NULL; in mtk_drm_crtc_reset()
124 __drm_atomic_helper_crtc_reset(crtc, &state->base); in mtk_drm_crtc_reset()
127 static struct drm_crtc_state *mtk_drm_crtc_duplicate_state(struct drm_crtc *crtc) in mtk_drm_crtc_duplicate_state() argument
135 __drm_atomic_helper_crtc_duplicate_state(crtc, &state->base); in mtk_drm_crtc_duplicate_state()
137 WARN_ON(state->base.crtc != crtc); in mtk_drm_crtc_duplicate_state()
138 state->base.crtc = crtc; in mtk_drm_crtc_duplicate_state()
143 static void mtk_drm_crtc_destroy_state(struct drm_crtc *crtc, in mtk_drm_crtc_destroy_state() argument
150 static bool mtk_drm_crtc_mode_fixup(struct drm_crtc *crtc, in mtk_drm_crtc_mode_fixup() argument
158 static void mtk_drm_crtc_mode_set_nofb(struct drm_crtc *crtc) in mtk_drm_crtc_mode_set_nofb() argument
160 struct mtk_crtc_state *state = to_mtk_crtc_state(crtc->state); in mtk_drm_crtc_mode_set_nofb()
162 state->pending_width = crtc->mode.hdisplay; in mtk_drm_crtc_mode_set_nofb()
163 state->pending_height = crtc->mode.vdisplay; in mtk_drm_crtc_mode_set_nofb()
164 state->pending_vrefresh = drm_mode_vrefresh(&crtc->mode); in mtk_drm_crtc_mode_set_nofb()
169 static int mtk_drm_crtc_enable_vblank(struct drm_crtc *crtc) in mtk_drm_crtc_enable_vblank() argument
171 struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_drm_crtc_enable_vblank()
179 static void mtk_drm_crtc_disable_vblank(struct drm_crtc *crtc) in mtk_drm_crtc_disable_vblank() argument
181 struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_drm_crtc_disable_vblank()
216 struct mtk_ddp_comp *mtk_drm_ddp_comp_for_plane(struct drm_crtc *crtc, in mtk_drm_ddp_comp_for_plane() argument
220 struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_drm_ddp_comp_for_plane()
247 struct drm_crtc *crtc = &mtk_crtc->base; in mtk_crtc_ddp_hw_init() local
255 if (WARN_ON(!crtc->state)) in mtk_crtc_ddp_hw_init()
258 width = crtc->state->adjusted_mode.hdisplay; in mtk_crtc_ddp_hw_init()
259 height = crtc->state->adjusted_mode.vdisplay; in mtk_crtc_ddp_hw_init()
260 vrefresh = drm_mode_vrefresh(&crtc->state->adjusted_mode); in mtk_crtc_ddp_hw_init()
262 drm_for_each_encoder(encoder, crtc->dev) { in mtk_crtc_ddp_hw_init()
263 if (encoder->crtc != crtc) in mtk_crtc_ddp_hw_init()
266 drm_connector_list_iter_begin(crtc->dev, &conn_iter); in mtk_crtc_ddp_hw_init()
277 ret = pm_runtime_get_sync(crtc->dev->dev); in mtk_crtc_ddp_hw_init()
323 comp = mtk_drm_ddp_comp_for_plane(crtc, plane, &local_layer); in mtk_crtc_ddp_hw_init()
334 pm_runtime_put(crtc->dev->dev); in mtk_crtc_ddp_hw_init()
341 struct drm_crtc *crtc = &mtk_crtc->base; in mtk_crtc_ddp_hw_fini() local
367 if (crtc->state->event && !crtc->state->active) { in mtk_crtc_ddp_hw_fini()
368 spin_lock_irq(&crtc->dev->event_lock); in mtk_crtc_ddp_hw_fini()
369 drm_crtc_send_vblank_event(crtc, crtc->state->event); in mtk_crtc_ddp_hw_fini()
370 crtc->state->event = NULL; in mtk_crtc_ddp_hw_fini()
371 spin_unlock_irq(&crtc->dev->event_lock); in mtk_crtc_ddp_hw_fini()
375 static void mtk_crtc_ddp_config(struct drm_crtc *crtc, in mtk_crtc_ddp_config() argument
378 struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_crtc_ddp_config()
408 comp = mtk_drm_ddp_comp_for_plane(crtc, plane, in mtk_crtc_ddp_config()
430 comp = mtk_drm_ddp_comp_for_plane(crtc, plane, in mtk_crtc_ddp_config()
448 struct drm_crtc *crtc = &mtk_crtc->base; in mtk_drm_crtc_hw_config() local
449 struct mtk_drm_private *priv = crtc->dev->dev_private; in mtk_drm_crtc_hw_config()
476 mtk_crtc_ddp_config(crtc, NULL); in mtk_drm_crtc_hw_config()
485 mtk_crtc_ddp_config(crtc, cmdq_handle); in mtk_drm_crtc_hw_config()
493 int mtk_drm_crtc_plane_check(struct drm_crtc *crtc, struct drm_plane *plane, in mtk_drm_crtc_plane_check() argument
499 comp = mtk_drm_ddp_comp_for_plane(crtc, plane, &local_layer); in mtk_drm_crtc_plane_check()
505 void mtk_drm_crtc_async_update(struct drm_crtc *crtc, struct drm_plane *plane, in mtk_drm_crtc_async_update() argument
508 struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_drm_crtc_async_update()
519 static void mtk_drm_crtc_atomic_enable(struct drm_crtc *crtc, in mtk_drm_crtc_atomic_enable() argument
522 struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_drm_crtc_atomic_enable()
526 DRM_DEBUG_DRIVER("%s %d\n", __func__, crtc->base.id); in mtk_drm_crtc_atomic_enable()
540 drm_crtc_vblank_on(crtc); in mtk_drm_crtc_atomic_enable()
544 static void mtk_drm_crtc_atomic_disable(struct drm_crtc *crtc, in mtk_drm_crtc_atomic_disable() argument
547 struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_drm_crtc_atomic_disable()
551 DRM_DEBUG_DRIVER("%s %d\n", __func__, crtc->base.id); in mtk_drm_crtc_atomic_disable()
568 drm_crtc_wait_one_vblank(crtc); in mtk_drm_crtc_atomic_disable()
570 drm_crtc_vblank_off(crtc); in mtk_drm_crtc_atomic_disable()
577 static void mtk_drm_crtc_atomic_begin(struct drm_crtc *crtc, in mtk_drm_crtc_atomic_begin() argument
580 struct mtk_crtc_state *state = to_mtk_crtc_state(crtc->state); in mtk_drm_crtc_atomic_begin()
581 struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_drm_crtc_atomic_begin()
587 state->base.event->pipe = drm_crtc_index(crtc); in mtk_drm_crtc_atomic_begin()
588 WARN_ON(drm_crtc_vblank_get(crtc) != 0); in mtk_drm_crtc_atomic_begin()
594 static void mtk_drm_crtc_atomic_flush(struct drm_crtc *crtc, in mtk_drm_crtc_atomic_flush() argument
597 struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_drm_crtc_atomic_flush()
602 if (crtc->state->color_mgmt_changed) in mtk_drm_crtc_atomic_flush()
604 mtk_ddp_gamma_set(mtk_crtc->ddp_comp[i], crtc->state); in mtk_drm_crtc_atomic_flush()
605 mtk_ddp_ctm_set(mtk_crtc->ddp_comp[i], crtc->state); in mtk_drm_crtc_atomic_flush()
660 void mtk_crtc_ddp_irq(struct drm_crtc *crtc, struct mtk_ddp_comp *comp) in mtk_crtc_ddp_irq() argument
662 struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_crtc_ddp_irq()
663 struct mtk_drm_private *priv = crtc->dev->dev_private; in mtk_crtc_ddp_irq()
670 mtk_crtc_ddp_config(crtc, NULL); in mtk_crtc_ddp_irq()
752 "Not creating crtc %d because component %d is disabled or missing\n", in mtk_drm_crtc_create()