Lines Matching full:crtc
60 struct videomode *omap_crtc_timings(struct drm_crtc *crtc) in omap_crtc_timings() argument
62 struct omap_crtc *omap_crtc = to_omap_crtc(crtc); in omap_crtc_timings()
66 enum omap_channel omap_crtc_channel(struct drm_crtc *crtc) in omap_crtc_channel() argument
68 struct omap_crtc *omap_crtc = to_omap_crtc(crtc); in omap_crtc_channel()
72 static bool omap_crtc_is_pending(struct drm_crtc *crtc) in omap_crtc_is_pending() argument
74 struct omap_crtc *omap_crtc = to_omap_crtc(crtc); in omap_crtc_is_pending()
78 spin_lock_irqsave(&crtc->dev->event_lock, flags); in omap_crtc_is_pending()
80 spin_unlock_irqrestore(&crtc->dev->event_lock, flags); in omap_crtc_is_pending()
85 int omap_crtc_wait_pending(struct drm_crtc *crtc) in omap_crtc_wait_pending() argument
87 struct omap_crtc *omap_crtc = to_omap_crtc(crtc); in omap_crtc_wait_pending()
94 !omap_crtc_is_pending(crtc), in omap_crtc_wait_pending()
107 * panels.. for video-mode the crtc-helpers already do an adequate
111 /* ovl-mgr-id -> crtc */
149 static void omap_crtc_set_enabled(struct drm_crtc *crtc, bool enable) in omap_crtc_set_enabled() argument
151 struct drm_device *dev = crtc->dev; in omap_crtc_set_enabled()
153 struct omap_crtc *omap_crtc = to_omap_crtc(crtc); in omap_crtc_set_enabled()
284 void omap_crtc_error_irq(struct drm_crtc *crtc, u32 irqstatus) in omap_crtc_error_irq() argument
286 struct omap_crtc *omap_crtc = to_omap_crtc(crtc); in omap_crtc_error_irq()
297 void omap_crtc_vblank_irq(struct drm_crtc *crtc) in omap_crtc_vblank_irq() argument
299 struct omap_crtc *omap_crtc = to_omap_crtc(crtc); in omap_crtc_vblank_irq()
304 spin_lock(&crtc->dev->event_lock); in omap_crtc_vblank_irq()
310 spin_unlock(&crtc->dev->event_lock); in omap_crtc_vblank_irq()
316 drm_crtc_send_vblank_event(crtc, omap_crtc->event); in omap_crtc_vblank_irq()
322 spin_unlock(&crtc->dev->event_lock); in omap_crtc_vblank_irq()
325 drm_crtc_vblank_put(crtc); in omap_crtc_vblank_irq()
333 static void omap_crtc_write_crtc_properties(struct drm_crtc *crtc) in omap_crtc_write_crtc_properties() argument
335 struct omap_drm_private *priv = crtc->dev->dev_private; in omap_crtc_write_crtc_properties()
336 struct omap_crtc *omap_crtc = to_omap_crtc(crtc); in omap_crtc_write_crtc_properties()
350 * CRTC Functions
353 static void omap_crtc_destroy(struct drm_crtc *crtc) in omap_crtc_destroy() argument
355 struct omap_crtc *omap_crtc = to_omap_crtc(crtc); in omap_crtc_destroy()
359 drm_crtc_cleanup(crtc); in omap_crtc_destroy()
364 static void omap_crtc_arm_event(struct drm_crtc *crtc) in omap_crtc_arm_event() argument
366 struct omap_crtc *omap_crtc = to_omap_crtc(crtc); in omap_crtc_arm_event()
371 if (crtc->state->event) { in omap_crtc_arm_event()
372 omap_crtc->event = crtc->state->event; in omap_crtc_arm_event()
373 crtc->state->event = NULL; in omap_crtc_arm_event()
377 static void omap_crtc_atomic_enable(struct drm_crtc *crtc, in omap_crtc_atomic_enable() argument
380 struct omap_crtc *omap_crtc = to_omap_crtc(crtc); in omap_crtc_atomic_enable()
385 spin_lock_irq(&crtc->dev->event_lock); in omap_crtc_atomic_enable()
386 drm_crtc_vblank_on(crtc); in omap_crtc_atomic_enable()
387 ret = drm_crtc_vblank_get(crtc); in omap_crtc_atomic_enable()
390 omap_crtc_arm_event(crtc); in omap_crtc_atomic_enable()
391 spin_unlock_irq(&crtc->dev->event_lock); in omap_crtc_atomic_enable()
394 static void omap_crtc_atomic_disable(struct drm_crtc *crtc, in omap_crtc_atomic_disable() argument
397 struct omap_crtc *omap_crtc = to_omap_crtc(crtc); in omap_crtc_atomic_disable()
401 spin_lock_irq(&crtc->dev->event_lock); in omap_crtc_atomic_disable()
402 if (crtc->state->event) { in omap_crtc_atomic_disable()
403 drm_crtc_send_vblank_event(crtc, crtc->state->event); in omap_crtc_atomic_disable()
404 crtc->state->event = NULL; in omap_crtc_atomic_disable()
406 spin_unlock_irq(&crtc->dev->event_lock); in omap_crtc_atomic_disable()
408 drm_crtc_vblank_off(crtc); in omap_crtc_atomic_disable()
411 static enum drm_mode_status omap_crtc_mode_valid(struct drm_crtc *crtc, in omap_crtc_mode_valid() argument
414 struct omap_drm_private *priv = crtc->dev->dev_private; in omap_crtc_mode_valid()
446 static void omap_crtc_mode_set_nofb(struct drm_crtc *crtc) in omap_crtc_mode_set_nofb() argument
448 struct omap_crtc *omap_crtc = to_omap_crtc(crtc); in omap_crtc_mode_set_nofb()
449 struct drm_display_mode *mode = &crtc->state->adjusted_mode; in omap_crtc_mode_set_nofb()
450 struct omap_drm_private *priv = crtc->dev->dev_private; in omap_crtc_mode_set_nofb()
480 if (encoder->crtc == crtc) { in omap_crtc_mode_set_nofb()
498 static int omap_crtc_atomic_check(struct drm_crtc *crtc, in omap_crtc_atomic_check() argument
511 pri_state = drm_atomic_get_new_plane_state(state->state, crtc->primary); in omap_crtc_atomic_check()
524 static void omap_crtc_atomic_begin(struct drm_crtc *crtc, in omap_crtc_atomic_begin() argument
529 static void omap_crtc_atomic_flush(struct drm_crtc *crtc, in omap_crtc_atomic_flush() argument
532 struct omap_drm_private *priv = crtc->dev->dev_private; in omap_crtc_atomic_flush()
533 struct omap_crtc *omap_crtc = to_omap_crtc(crtc); in omap_crtc_atomic_flush()
536 if (crtc->state->color_mgmt_changed) { in omap_crtc_atomic_flush()
540 if (crtc->state->gamma_lut) { in omap_crtc_atomic_flush()
542 crtc->state->gamma_lut->data; in omap_crtc_atomic_flush()
543 length = crtc->state->gamma_lut->length / in omap_crtc_atomic_flush()
550 omap_crtc_write_crtc_properties(crtc); in omap_crtc_atomic_flush()
552 /* Only flush the CRTC if it is currently enabled. */ in omap_crtc_atomic_flush()
558 ret = drm_crtc_vblank_get(crtc); in omap_crtc_atomic_flush()
561 spin_lock_irq(&crtc->dev->event_lock); in omap_crtc_atomic_flush()
563 omap_crtc_arm_event(crtc); in omap_crtc_atomic_flush()
564 spin_unlock_irq(&crtc->dev->event_lock); in omap_crtc_atomic_flush()
567 static int omap_crtc_atomic_set_property(struct drm_crtc *crtc, in omap_crtc_atomic_set_property() argument
572 struct omap_drm_private *priv = crtc->dev->dev_private; in omap_crtc_atomic_set_property()
579 * always be mirrored in the crtc state correctly. in omap_crtc_atomic_set_property()
581 plane_state = drm_atomic_get_plane_state(state->state, crtc->primary); in omap_crtc_atomic_set_property()
585 if (property == crtc->primary->rotation_property) in omap_crtc_atomic_set_property()
595 static int omap_crtc_atomic_get_property(struct drm_crtc *crtc, in omap_crtc_atomic_get_property() argument
600 struct omap_drm_private *priv = crtc->dev->dev_private; in omap_crtc_atomic_get_property()
603 if (property == crtc->primary->rotation_property) in omap_crtc_atomic_get_property()
613 static void omap_crtc_reset(struct drm_crtc *crtc) in omap_crtc_reset() argument
615 if (crtc->state) in omap_crtc_reset()
616 __drm_atomic_helper_crtc_destroy_state(crtc->state); in omap_crtc_reset()
618 kfree(crtc->state); in omap_crtc_reset()
619 crtc->state = kzalloc(sizeof(struct omap_crtc_state), GFP_KERNEL); in omap_crtc_reset()
621 if (crtc->state) in omap_crtc_reset()
622 crtc->state->crtc = crtc; in omap_crtc_reset()
626 omap_crtc_duplicate_state(struct drm_crtc *crtc) in omap_crtc_duplicate_state() argument
630 if (WARN_ON(!crtc->state)) in omap_crtc_duplicate_state()
633 current_state = to_omap_crtc_state(crtc->state); in omap_crtc_duplicate_state()
639 __drm_atomic_helper_crtc_duplicate_state(crtc, &state->base); in omap_crtc_duplicate_state()
694 /* initialize crtc */
699 struct drm_crtc *crtc = NULL; in omap_crtc_init() local
719 crtc = &omap_crtc->base; in omap_crtc_init()
726 ret = drm_crtc_init_with_planes(dev, crtc, plane, NULL, in omap_crtc_init()
729 dev_err(dev->dev, "%s(): could not init crtc for: %s\n", in omap_crtc_init()
735 drm_crtc_helper_add(crtc, &omap_crtc_helper_funcs); in omap_crtc_init()
747 drm_crtc_enable_color_mgmt(crtc, 0, false, gamma_lut_size); in omap_crtc_init()
748 drm_mode_crtc_set_gamma_size(crtc, gamma_lut_size); in omap_crtc_init()
751 omap_plane_install_properties(crtc->primary, &crtc->base); in omap_crtc_init()
755 return crtc; in omap_crtc_init()