Lines Matching full:crtc
23 struct drm_device *ddev = tcrtc->crtc.dev; in tidss_crtc_finish_page_flip()
51 drm_crtc_send_vblank_event(&tcrtc->crtc, event); in tidss_crtc_finish_page_flip()
55 drm_crtc_vblank_put(&tcrtc->crtc); in tidss_crtc_finish_page_flip()
58 void tidss_crtc_vblank_irq(struct drm_crtc *crtc) in tidss_crtc_vblank_irq() argument
60 struct tidss_crtc *tcrtc = to_tidss_crtc(crtc); in tidss_crtc_vblank_irq()
62 drm_crtc_handle_vblank(crtc); in tidss_crtc_vblank_irq()
67 void tidss_crtc_framedone_irq(struct drm_crtc *crtc) in tidss_crtc_framedone_irq() argument
69 struct tidss_crtc *tcrtc = to_tidss_crtc(crtc); in tidss_crtc_framedone_irq()
74 void tidss_crtc_error_irq(struct drm_crtc *crtc, u64 irqstatus) in tidss_crtc_error_irq() argument
76 struct tidss_crtc *tcrtc = to_tidss_crtc(crtc); in tidss_crtc_error_irq()
78 dev_err_ratelimited(crtc->dev->dev, "CRTC%u SYNC LOST: (irq %llx)\n", in tidss_crtc_error_irq()
84 static int tidss_crtc_atomic_check(struct drm_crtc *crtc, in tidss_crtc_atomic_check() argument
88 crtc); in tidss_crtc_atomic_check()
89 struct drm_device *ddev = crtc->dev; in tidss_crtc_atomic_check()
92 struct tidss_crtc *tcrtc = to_tidss_crtc(crtc); in tidss_crtc_atomic_check()
120 struct drm_crtc *crtc, in tidss_crtc_position_planes() argument
125 struct tidss_crtc *tcrtc = to_tidss_crtc(crtc); in tidss_crtc_position_planes()
126 struct drm_crtc_state *cstate = crtc->state; in tidss_crtc_position_planes()
140 if (pstate->crtc != crtc || !pstate->visible) in tidss_crtc_position_planes()
162 static void tidss_crtc_atomic_flush(struct drm_crtc *crtc, in tidss_crtc_atomic_flush() argument
166 crtc); in tidss_crtc_atomic_flush()
167 struct tidss_crtc *tcrtc = to_tidss_crtc(crtc); in tidss_crtc_atomic_flush()
168 struct drm_device *ddev = crtc->dev; in tidss_crtc_atomic_flush()
173 __func__, crtc->name, crtc->state->active ? "" : "not ", in tidss_crtc_atomic_flush()
174 drm_atomic_crtc_needs_modeset(crtc->state) ? "needs" : "doesn't need", in tidss_crtc_atomic_flush()
175 crtc->state->event); in tidss_crtc_atomic_flush()
177 /* There is nothing to do if CRTC is not going to be enabled. */ in tidss_crtc_atomic_flush()
178 if (!crtc->state->active) in tidss_crtc_atomic_flush()
182 * Flush CRTC changes with go bit only if new modeset is not in tidss_crtc_atomic_flush()
183 * coming, so CRTC is enabled trough out the commit. in tidss_crtc_atomic_flush()
185 if (drm_atomic_crtc_needs_modeset(crtc->state)) in tidss_crtc_atomic_flush()
192 /* We should have event if CRTC is enabled through out this commit. */ in tidss_crtc_atomic_flush()
193 if (WARN_ON(!crtc->state->event)) in tidss_crtc_atomic_flush()
197 dispc_vp_setup(tidss->dispc, tcrtc->hw_videoport, crtc->state, false); in tidss_crtc_atomic_flush()
200 tidss_crtc_position_planes(tidss, crtc, old_crtc_state, false); in tidss_crtc_atomic_flush()
202 WARN_ON(drm_crtc_vblank_get(crtc) != 0); in tidss_crtc_atomic_flush()
209 tcrtc->event = crtc->state->event; in tidss_crtc_atomic_flush()
210 crtc->state->event = NULL; in tidss_crtc_atomic_flush()
215 static void tidss_crtc_atomic_enable(struct drm_crtc *crtc, in tidss_crtc_atomic_enable() argument
219 crtc); in tidss_crtc_atomic_enable()
220 struct tidss_crtc *tcrtc = to_tidss_crtc(crtc); in tidss_crtc_atomic_enable()
221 struct drm_device *ddev = crtc->dev; in tidss_crtc_atomic_enable()
223 const struct drm_display_mode *mode = &crtc->state->adjusted_mode; in tidss_crtc_atomic_enable()
227 dev_dbg(ddev->dev, "%s, event %p\n", __func__, crtc->state->event); in tidss_crtc_atomic_enable()
240 dispc_vp_setup(tidss->dispc, tcrtc->hw_videoport, crtc->state, true); in tidss_crtc_atomic_enable()
241 tidss_crtc_position_planes(tidss, crtc, old_state, true); in tidss_crtc_atomic_enable()
244 drm_crtc_vblank_on(crtc); in tidss_crtc_atomic_enable()
246 dispc_vp_prepare(tidss->dispc, tcrtc->hw_videoport, crtc->state); in tidss_crtc_atomic_enable()
248 dispc_vp_enable(tidss->dispc, tcrtc->hw_videoport, crtc->state); in tidss_crtc_atomic_enable()
252 if (crtc->state->event) { in tidss_crtc_atomic_enable()
253 drm_crtc_send_vblank_event(crtc, crtc->state->event); in tidss_crtc_atomic_enable()
254 crtc->state->event = NULL; in tidss_crtc_atomic_enable()
260 static void tidss_crtc_atomic_disable(struct drm_crtc *crtc, in tidss_crtc_atomic_disable() argument
263 struct tidss_crtc *tcrtc = to_tidss_crtc(crtc); in tidss_crtc_atomic_disable()
264 struct drm_device *ddev = crtc->dev; in tidss_crtc_atomic_disable()
268 dev_dbg(ddev->dev, "%s, event %p\n", __func__, crtc->state->event); in tidss_crtc_atomic_disable()
286 dev_err(tidss->dev, "Timeout waiting for framedone on crtc %d", in tidss_crtc_atomic_disable()
292 if (crtc->state->event) { in tidss_crtc_atomic_disable()
293 drm_crtc_send_vblank_event(crtc, crtc->state->event); in tidss_crtc_atomic_disable()
294 crtc->state->event = NULL; in tidss_crtc_atomic_disable()
298 drm_crtc_vblank_off(crtc); in tidss_crtc_atomic_disable()
306 enum drm_mode_status tidss_crtc_mode_valid(struct drm_crtc *crtc, in tidss_crtc_mode_valid() argument
309 struct tidss_crtc *tcrtc = to_tidss_crtc(crtc); in tidss_crtc_mode_valid()
310 struct drm_device *ddev = crtc->dev; in tidss_crtc_mode_valid()
327 static int tidss_crtc_enable_vblank(struct drm_crtc *crtc) in tidss_crtc_enable_vblank() argument
329 struct drm_device *ddev = crtc->dev; in tidss_crtc_enable_vblank()
336 tidss_irq_enable_vblank(crtc); in tidss_crtc_enable_vblank()
341 static void tidss_crtc_disable_vblank(struct drm_crtc *crtc) in tidss_crtc_disable_vblank() argument
343 struct drm_device *ddev = crtc->dev; in tidss_crtc_disable_vblank()
348 tidss_irq_disable_vblank(crtc); in tidss_crtc_disable_vblank()
353 static void tidss_crtc_reset(struct drm_crtc *crtc) in tidss_crtc_reset() argument
357 if (crtc->state) in tidss_crtc_reset()
358 __drm_atomic_helper_crtc_destroy_state(crtc->state); in tidss_crtc_reset()
360 kfree(crtc->state); in tidss_crtc_reset()
364 crtc->state = NULL; in tidss_crtc_reset()
368 __drm_atomic_helper_crtc_reset(crtc, &tcrtc->base); in tidss_crtc_reset()
371 static struct drm_crtc_state *tidss_crtc_duplicate_state(struct drm_crtc *crtc) in tidss_crtc_duplicate_state() argument
375 if (WARN_ON(!crtc->state)) in tidss_crtc_duplicate_state()
378 current_state = to_tidss_crtc_state(crtc->state); in tidss_crtc_duplicate_state()
384 __drm_atomic_helper_crtc_duplicate_state(crtc, &state->base); in tidss_crtc_duplicate_state()
394 static void tidss_crtc_destroy(struct drm_crtc *crtc) in tidss_crtc_destroy() argument
396 struct tidss_crtc *tcrtc = to_tidss_crtc(crtc); in tidss_crtc_destroy()
398 drm_crtc_cleanup(crtc); in tidss_crtc_destroy()
418 struct drm_crtc *crtc; in tidss_crtc_create() local
430 crtc = &tcrtc->crtc; in tidss_crtc_create()
432 ret = drm_crtc_init_with_planes(&tidss->ddev, crtc, primary, in tidss_crtc_create()
439 drm_crtc_helper_add(crtc, &tidss_crtc_helper_funcs); in tidss_crtc_create()
449 drm_crtc_enable_color_mgmt(crtc, 0, has_ctm, gamma_lut_size); in tidss_crtc_create()
451 drm_mode_crtc_set_gamma_size(crtc, gamma_lut_size); in tidss_crtc_create()