Lines Matching full:crtc
26 struct drm_device *ddev = tcrtc->crtc.dev; in tidss_crtc_finish_page_flip()
54 drm_crtc_send_vblank_event(&tcrtc->crtc, event); in tidss_crtc_finish_page_flip()
58 drm_crtc_vblank_put(&tcrtc->crtc); in tidss_crtc_finish_page_flip()
61 void tidss_crtc_vblank_irq(struct drm_crtc *crtc) in tidss_crtc_vblank_irq() argument
63 struct tidss_crtc *tcrtc = to_tidss_crtc(crtc); in tidss_crtc_vblank_irq()
65 drm_crtc_handle_vblank(crtc); in tidss_crtc_vblank_irq()
70 void tidss_crtc_framedone_irq(struct drm_crtc *crtc) in tidss_crtc_framedone_irq() argument
72 struct tidss_crtc *tcrtc = to_tidss_crtc(crtc); in tidss_crtc_framedone_irq()
77 void tidss_crtc_error_irq(struct drm_crtc *crtc, u64 irqstatus) in tidss_crtc_error_irq() argument
79 struct tidss_crtc *tcrtc = to_tidss_crtc(crtc); in tidss_crtc_error_irq()
81 dev_err_ratelimited(crtc->dev->dev, "CRTC%u SYNC LOST: (irq %llx)\n", in tidss_crtc_error_irq()
87 static int tidss_crtc_atomic_check(struct drm_crtc *crtc, in tidss_crtc_atomic_check() argument
90 struct drm_device *ddev = crtc->dev; in tidss_crtc_atomic_check()
93 struct tidss_crtc *tcrtc = to_tidss_crtc(crtc); in tidss_crtc_atomic_check()
121 struct drm_crtc *crtc, in tidss_crtc_position_planes() argument
126 struct tidss_crtc *tcrtc = to_tidss_crtc(crtc); in tidss_crtc_position_planes()
127 struct drm_crtc_state *cstate = crtc->state; in tidss_crtc_position_planes()
141 if (pstate->crtc != crtc || !pstate->visible) in tidss_crtc_position_planes()
163 static void tidss_crtc_atomic_flush(struct drm_crtc *crtc, in tidss_crtc_atomic_flush() argument
166 struct tidss_crtc *tcrtc = to_tidss_crtc(crtc); in tidss_crtc_atomic_flush()
167 struct drm_device *ddev = crtc->dev; in tidss_crtc_atomic_flush()
173 crtc->name, drm_atomic_crtc_needs_modeset(crtc->state), in tidss_crtc_atomic_flush()
174 crtc->state->enable, crtc->state->event); in tidss_crtc_atomic_flush()
176 /* There is nothing to do if CRTC is not going to be enabled. */ in tidss_crtc_atomic_flush()
177 if (!crtc->state->enable) in tidss_crtc_atomic_flush()
181 * Flush CRTC changes with go bit only if new modeset is not in tidss_crtc_atomic_flush()
182 * coming, so CRTC is enabled trough out the commit. in tidss_crtc_atomic_flush()
184 if (drm_atomic_crtc_needs_modeset(crtc->state)) in tidss_crtc_atomic_flush()
191 /* We should have event if CRTC is enabled through out this commit. */ in tidss_crtc_atomic_flush()
192 if (WARN_ON(!crtc->state->event)) in tidss_crtc_atomic_flush()
196 dispc_vp_setup(tidss->dispc, tcrtc->hw_videoport, crtc->state, false); in tidss_crtc_atomic_flush()
199 tidss_crtc_position_planes(tidss, crtc, old_crtc_state, false); in tidss_crtc_atomic_flush()
201 WARN_ON(drm_crtc_vblank_get(crtc) != 0); in tidss_crtc_atomic_flush()
208 tcrtc->event = crtc->state->event; in tidss_crtc_atomic_flush()
209 crtc->state->event = NULL; in tidss_crtc_atomic_flush()
214 static void tidss_crtc_atomic_enable(struct drm_crtc *crtc, in tidss_crtc_atomic_enable() argument
217 struct tidss_crtc *tcrtc = to_tidss_crtc(crtc); in tidss_crtc_atomic_enable()
218 struct drm_device *ddev = crtc->dev; in tidss_crtc_atomic_enable()
220 const struct drm_display_mode *mode = &crtc->state->adjusted_mode; in tidss_crtc_atomic_enable()
224 dev_dbg(ddev->dev, "%s, event %p\n", __func__, crtc->state->event); in tidss_crtc_atomic_enable()
237 dispc_vp_setup(tidss->dispc, tcrtc->hw_videoport, crtc->state, true); in tidss_crtc_atomic_enable()
238 tidss_crtc_position_planes(tidss, crtc, old_state, true); in tidss_crtc_atomic_enable()
241 drm_crtc_vblank_on(crtc); in tidss_crtc_atomic_enable()
243 dispc_vp_prepare(tidss->dispc, tcrtc->hw_videoport, crtc->state); in tidss_crtc_atomic_enable()
245 dispc_vp_enable(tidss->dispc, tcrtc->hw_videoport, crtc->state); in tidss_crtc_atomic_enable()
249 if (crtc->state->event) { in tidss_crtc_atomic_enable()
250 drm_crtc_send_vblank_event(crtc, crtc->state->event); in tidss_crtc_atomic_enable()
251 crtc->state->event = NULL; in tidss_crtc_atomic_enable()
257 static void tidss_crtc_atomic_disable(struct drm_crtc *crtc, in tidss_crtc_atomic_disable() argument
260 struct tidss_crtc *tcrtc = to_tidss_crtc(crtc); in tidss_crtc_atomic_disable()
261 struct drm_device *ddev = crtc->dev; in tidss_crtc_atomic_disable()
265 dev_dbg(ddev->dev, "%s, event %p\n", __func__, crtc->state->event); in tidss_crtc_atomic_disable()
273 dev_err(tidss->dev, "Timeout waiting for framedone on crtc %d", in tidss_crtc_atomic_disable()
279 if (crtc->state->event) { in tidss_crtc_atomic_disable()
280 drm_crtc_send_vblank_event(crtc, crtc->state->event); in tidss_crtc_atomic_disable()
281 crtc->state->event = NULL; in tidss_crtc_atomic_disable()
285 drm_crtc_vblank_off(crtc); in tidss_crtc_atomic_disable()
293 enum drm_mode_status tidss_crtc_mode_valid(struct drm_crtc *crtc, in tidss_crtc_mode_valid() argument
296 struct tidss_crtc *tcrtc = to_tidss_crtc(crtc); in tidss_crtc_mode_valid()
297 struct drm_device *ddev = crtc->dev; in tidss_crtc_mode_valid()
314 static int tidss_crtc_enable_vblank(struct drm_crtc *crtc) in tidss_crtc_enable_vblank() argument
316 struct drm_device *ddev = crtc->dev; in tidss_crtc_enable_vblank()
323 tidss_irq_enable_vblank(crtc); in tidss_crtc_enable_vblank()
328 static void tidss_crtc_disable_vblank(struct drm_crtc *crtc) in tidss_crtc_disable_vblank() argument
330 struct drm_device *ddev = crtc->dev; in tidss_crtc_disable_vblank()
335 tidss_irq_disable_vblank(crtc); in tidss_crtc_disable_vblank()
340 static void tidss_crtc_reset(struct drm_crtc *crtc) in tidss_crtc_reset() argument
344 if (crtc->state) in tidss_crtc_reset()
345 __drm_atomic_helper_crtc_destroy_state(crtc->state); in tidss_crtc_reset()
347 kfree(crtc->state); in tidss_crtc_reset()
351 crtc->state = NULL; in tidss_crtc_reset()
355 __drm_atomic_helper_crtc_reset(crtc, &tcrtc->base); in tidss_crtc_reset()
358 static struct drm_crtc_state *tidss_crtc_duplicate_state(struct drm_crtc *crtc) in tidss_crtc_duplicate_state() argument
362 if (WARN_ON(!crtc->state)) in tidss_crtc_duplicate_state()
365 current_state = to_tidss_crtc_state(crtc->state); in tidss_crtc_duplicate_state()
371 __drm_atomic_helper_crtc_duplicate_state(crtc, &state->base); in tidss_crtc_duplicate_state()
381 static void tidss_crtc_destroy(struct drm_crtc *crtc) in tidss_crtc_destroy() argument
383 struct tidss_crtc *tcrtc = to_tidss_crtc(crtc); in tidss_crtc_destroy()
385 drm_crtc_cleanup(crtc); in tidss_crtc_destroy()
405 struct drm_crtc *crtc; in tidss_crtc_create() local
417 crtc = &tcrtc->crtc; in tidss_crtc_create()
419 ret = drm_crtc_init_with_planes(&tidss->ddev, crtc, primary, in tidss_crtc_create()
426 drm_crtc_helper_add(crtc, &tidss_crtc_helper_funcs); in tidss_crtc_create()
436 drm_crtc_enable_color_mgmt(crtc, 0, has_ctm, gamma_lut_size); in tidss_crtc_create()
438 drm_mode_crtc_set_gamma_size(crtc, gamma_lut_size); in tidss_crtc_create()