Lines Matching full:crtc

29  * struct mtk_crtc - MediaTek specific crtc structure.
30 * @base: crtc object.
37 * @ddp_comp: array of pointers the mtk_ddp_comp structures used by this crtc
97 struct drm_crtc *crtc = &mtk_crtc->base; in mtk_crtc_finish_page_flip() local
101 spin_lock_irqsave(&crtc->dev->event_lock, flags); in mtk_crtc_finish_page_flip()
102 drm_crtc_send_vblank_event(crtc, mtk_crtc->event); in mtk_crtc_finish_page_flip()
103 drm_crtc_vblank_put(crtc); in mtk_crtc_finish_page_flip()
105 spin_unlock_irqrestore(&crtc->dev->event_lock, flags); in mtk_crtc_finish_page_flip()
128 static void mtk_crtc_destroy(struct drm_crtc *crtc) in mtk_crtc_destroy() argument
130 struct mtk_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_crtc_destroy()
149 drm_crtc_cleanup(crtc); in mtk_crtc_destroy()
152 static void mtk_crtc_reset(struct drm_crtc *crtc) in mtk_crtc_reset() argument
156 if (crtc->state) in mtk_crtc_reset()
157 __drm_atomic_helper_crtc_destroy_state(crtc->state); in mtk_crtc_reset()
159 kfree(to_mtk_crtc_state(crtc->state)); in mtk_crtc_reset()
160 crtc->state = NULL; in mtk_crtc_reset()
164 __drm_atomic_helper_crtc_reset(crtc, &state->base); in mtk_crtc_reset()
167 static struct drm_crtc_state *mtk_crtc_duplicate_state(struct drm_crtc *crtc) in mtk_crtc_duplicate_state() argument
175 __drm_atomic_helper_crtc_duplicate_state(crtc, &state->base); in mtk_crtc_duplicate_state()
177 WARN_ON(state->base.crtc != crtc); in mtk_crtc_duplicate_state()
178 state->base.crtc = crtc; in mtk_crtc_duplicate_state()
184 static void mtk_crtc_destroy_state(struct drm_crtc *crtc, in mtk_crtc_destroy_state() argument
192 mtk_crtc_mode_valid(struct drm_crtc *crtc, const struct drm_display_mode *mode) in mtk_crtc_mode_valid() argument
194 struct mtk_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_crtc_mode_valid()
206 static bool mtk_crtc_mode_fixup(struct drm_crtc *crtc, in mtk_crtc_mode_fixup() argument
214 static void mtk_crtc_mode_set_nofb(struct drm_crtc *crtc) in mtk_crtc_mode_set_nofb() argument
216 struct mtk_crtc_state *state = to_mtk_crtc_state(crtc->state); in mtk_crtc_mode_set_nofb()
218 state->pending_width = crtc->mode.hdisplay; in mtk_crtc_mode_set_nofb()
219 state->pending_height = crtc->mode.vdisplay; in mtk_crtc_mode_set_nofb()
220 state->pending_vrefresh = drm_mode_vrefresh(&crtc->mode); in mtk_crtc_mode_set_nofb()
254 struct mtk_ddp_comp *mtk_ddp_comp_for_plane(struct drm_crtc *crtc, in mtk_ddp_comp_for_plane() argument
258 struct mtk_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_ddp_comp_for_plane()
337 struct drm_crtc *crtc = &mtk_crtc->base; in mtk_crtc_ddp_hw_init() local
345 if (WARN_ON(!crtc->state)) in mtk_crtc_ddp_hw_init()
348 width = crtc->state->adjusted_mode.hdisplay; in mtk_crtc_ddp_hw_init()
349 height = crtc->state->adjusted_mode.vdisplay; in mtk_crtc_ddp_hw_init()
350 vrefresh = drm_mode_vrefresh(&crtc->state->adjusted_mode); in mtk_crtc_ddp_hw_init()
352 drm_for_each_encoder(encoder, crtc->dev) { in mtk_crtc_ddp_hw_init()
353 if (encoder->crtc != crtc) in mtk_crtc_ddp_hw_init()
356 drm_connector_list_iter_begin(crtc->dev, &conn_iter); in mtk_crtc_ddp_hw_init()
367 ret = pm_runtime_resume_and_get(crtc->dev->dev); in mtk_crtc_ddp_hw_init()
418 /* should not enable layer before crtc enabled */ in mtk_crtc_ddp_hw_init()
420 comp = mtk_ddp_comp_for_plane(crtc, plane, &local_layer); in mtk_crtc_ddp_hw_init()
431 pm_runtime_put(crtc->dev->dev); in mtk_crtc_ddp_hw_init()
438 struct drm_crtc *crtc = &mtk_crtc->base; in mtk_crtc_ddp_hw_fini() local
470 if (crtc->state->event && !crtc->state->active) { in mtk_crtc_ddp_hw_fini()
471 spin_lock_irqsave(&crtc->dev->event_lock, flags); in mtk_crtc_ddp_hw_fini()
472 drm_crtc_send_vblank_event(crtc, crtc->state->event); in mtk_crtc_ddp_hw_fini()
473 crtc->state->event = NULL; in mtk_crtc_ddp_hw_fini()
474 spin_unlock_irqrestore(&crtc->dev->event_lock, flags); in mtk_crtc_ddp_hw_fini()
478 static void mtk_crtc_ddp_config(struct drm_crtc *crtc, in mtk_crtc_ddp_config() argument
481 struct mtk_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_crtc_ddp_config()
512 comp = mtk_ddp_comp_for_plane(crtc, plane, &local_layer); in mtk_crtc_ddp_config()
536 comp = mtk_ddp_comp_for_plane(crtc, plane, &local_layer); in mtk_crtc_ddp_config()
556 struct drm_crtc *crtc = &mtk_crtc->base; in mtk_crtc_update_config() local
557 struct mtk_drm_private *priv = crtc->dev->dev_private; in mtk_crtc_update_config()
593 mtk_crtc_ddp_config(crtc, NULL); in mtk_crtc_update_config()
602 mtk_crtc_ddp_config(crtc, cmdq_handle); in mtk_crtc_update_config()
638 struct drm_crtc *crtc = data; in mtk_crtc_ddp_irq() local
639 struct mtk_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_crtc_ddp_irq()
640 struct mtk_drm_private *priv = crtc->dev->dev_private; in mtk_crtc_ddp_irq()
644 mtk_crtc_ddp_config(crtc, NULL); in mtk_crtc_ddp_irq()
650 mtk_crtc_ddp_config(crtc, NULL); in mtk_crtc_ddp_irq()
655 static int mtk_crtc_enable_vblank(struct drm_crtc *crtc) in mtk_crtc_enable_vblank() argument
657 struct mtk_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_crtc_enable_vblank()
665 static void mtk_crtc_disable_vblank(struct drm_crtc *crtc) in mtk_crtc_disable_vblank() argument
667 struct mtk_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_crtc_disable_vblank()
673 static void mtk_crtc_update_output(struct drm_crtc *crtc, in mtk_crtc_update_output() argument
676 int crtc_index = drm_crtc_index(crtc); in mtk_crtc_update_output()
680 struct mtk_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_crtc_update_output()
690 priv = ((struct mtk_drm_private *)crtc->dev->dev_private)->all_drm_private[crtc_index]; in mtk_crtc_update_output()
693 dev_dbg(dev, "connector change:%d, encoder mask:0x%x for crtc:%d\n", in mtk_crtc_update_output()
710 int mtk_crtc_plane_check(struct drm_crtc *crtc, struct drm_plane *plane, in mtk_crtc_plane_check() argument
716 comp = mtk_ddp_comp_for_plane(crtc, plane, &local_layer); in mtk_crtc_plane_check()
722 void mtk_crtc_plane_disable(struct drm_crtc *crtc, struct drm_plane *plane) in mtk_crtc_plane_disable() argument
725 struct mtk_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_crtc_plane_disable()
755 void mtk_crtc_async_update(struct drm_crtc *crtc, struct drm_plane *plane, in mtk_crtc_async_update() argument
758 struct mtk_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_crtc_async_update()
766 static void mtk_crtc_atomic_enable(struct drm_crtc *crtc, in mtk_crtc_atomic_enable() argument
769 struct mtk_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_crtc_atomic_enable()
773 DRM_DEBUG_DRIVER("%s %d\n", __func__, crtc->base.id); in mtk_crtc_atomic_enable()
781 mtk_crtc_update_output(crtc, state); in mtk_crtc_atomic_enable()
789 drm_crtc_vblank_on(crtc); in mtk_crtc_atomic_enable()
793 static void mtk_crtc_atomic_disable(struct drm_crtc *crtc, in mtk_crtc_atomic_disable() argument
796 struct mtk_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_crtc_atomic_disable()
800 DRM_DEBUG_DRIVER("%s %d\n", __func__, crtc->base.id); in mtk_crtc_atomic_disable()
824 drm_crtc_wait_one_vblank(crtc); in mtk_crtc_atomic_disable()
826 drm_crtc_vblank_off(crtc); in mtk_crtc_atomic_disable()
833 static void mtk_crtc_atomic_begin(struct drm_crtc *crtc, in mtk_crtc_atomic_begin() argument
837 crtc); in mtk_crtc_atomic_begin()
839 struct mtk_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_crtc_atomic_begin()
846 mtk_crtc_state->base.event->pipe = drm_crtc_index(crtc); in mtk_crtc_atomic_begin()
847 WARN_ON(drm_crtc_vblank_get(crtc) != 0); in mtk_crtc_atomic_begin()
849 spin_lock_irqsave(&crtc->dev->event_lock, flags); in mtk_crtc_atomic_begin()
851 spin_unlock_irqrestore(&crtc->dev->event_lock, flags); in mtk_crtc_atomic_begin()
857 static void mtk_crtc_atomic_flush(struct drm_crtc *crtc, in mtk_crtc_atomic_flush() argument
860 struct mtk_crtc *mtk_crtc = to_mtk_crtc(crtc); in mtk_crtc_atomic_flush()
863 if (crtc->state->color_mgmt_changed) in mtk_crtc_atomic_flush()
865 mtk_ddp_gamma_set(mtk_crtc->ddp_comp[i], crtc->state); in mtk_crtc_atomic_flush()
866 mtk_ddp_ctm_set(mtk_crtc->ddp_comp[i], crtc->state); in mtk_crtc_atomic_flush()
976 struct device *mtk_crtc_dma_dev_get(struct drm_crtc *crtc) in mtk_crtc_dma_dev_get() argument
980 if (!crtc) in mtk_crtc_dma_dev_get()
983 mtk_crtc = to_mtk_crtc(crtc); in mtk_crtc_dma_dev_get()
1027 "Not creating crtc %d because component %d is disabled or missing\n", in mtk_crtc_create()
1148 /* for sending blocking cmd in crtc disable */ in mtk_crtc_create()