Lines Matching full:crtc

121 static void armada_drm_crtc_queue_state_event(struct drm_crtc *crtc)  in armada_drm_crtc_queue_state_event()  argument
123 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); in armada_drm_crtc_queue_state_event()
127 event = xchg(&crtc->state->event, NULL); in armada_drm_crtc_queue_state_event()
129 WARN_ON(drm_crtc_vblank_get(crtc) != 0); in armada_drm_crtc_queue_state_event()
134 static void armada_drm_update_gamma(struct drm_crtc *crtc) in armada_drm_update_gamma() argument
136 struct drm_property_blob *blob = crtc->state->gamma_lut; in armada_drm_update_gamma()
137 void __iomem *base = drm_to_armada_crtc(crtc)->base; in armada_drm_update_gamma()
172 static enum drm_mode_status armada_drm_crtc_mode_valid(struct drm_crtc *crtc, in armada_drm_crtc_mode_valid() argument
175 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); in armada_drm_crtc_mode_valid()
199 static bool armada_drm_crtc_mode_fixup(struct drm_crtc *crtc, in armada_drm_crtc_mode_fixup() argument
202 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); in armada_drm_crtc_mode_fixup()
206 * Set CRTC modesetting parameters for the adjusted mode. This is in armada_drm_crtc_mode_fixup()
216 if (armada_drm_crtc_mode_valid(crtc, adj) != MODE_OK) in armada_drm_crtc_mode_fixup()
252 DRM_ERROR("video underflow on crtc %u\n", dcrtc->num); in armada_drm_crtc_irq()
254 DRM_ERROR("graphics underflow on crtc %u\n", dcrtc->num); in armada_drm_crtc_irq()
257 drm_crtc_handle_vblank(&dcrtc->crtc); in armada_drm_crtc_irq()
297 spin_lock(&dcrtc->crtc.dev->event_lock); in armada_drm_crtc_irq()
298 drm_crtc_send_vblank_event(&dcrtc->crtc, event); in armada_drm_crtc_irq()
299 spin_unlock(&dcrtc->crtc.dev->event_lock); in armada_drm_crtc_irq()
300 drm_crtc_vblank_put(&dcrtc->crtc); in armada_drm_crtc_irq()
317 trace_armada_drm_irq(&dcrtc->crtc, stat); in armada_drm_irq()
330 static void armada_drm_crtc_mode_set_nofb(struct drm_crtc *crtc) in armada_drm_crtc_mode_set_nofb() argument
332 struct drm_display_mode *adj = &crtc->state->adjusted_mode; in armada_drm_crtc_mode_set_nofb()
333 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); in armada_drm_crtc_mode_set_nofb()
346 DRM_DEBUG_KMS("[CRTC:%d:%s] mode " DRM_MODE_FMT "\n", in armada_drm_crtc_mode_set_nofb()
347 crtc->base.id, crtc->name, DRM_MODE_ARG(adj)); in armada_drm_crtc_mode_set_nofb()
415 static int armada_drm_crtc_atomic_check(struct drm_crtc *crtc, in armada_drm_crtc_atomic_check() argument
419 crtc); in armada_drm_crtc_atomic_check()
420 DRM_DEBUG_KMS("[CRTC:%d:%s]\n", crtc->base.id, crtc->name); in armada_drm_crtc_atomic_check()
431 static void armada_drm_crtc_atomic_begin(struct drm_crtc *crtc, in armada_drm_crtc_atomic_begin() argument
435 crtc); in armada_drm_crtc_atomic_begin()
436 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); in armada_drm_crtc_atomic_begin()
438 DRM_DEBUG_KMS("[CRTC:%d:%s]\n", crtc->base.id, crtc->name); in armada_drm_crtc_atomic_begin()
441 armada_drm_update_gamma(crtc); in armada_drm_crtc_atomic_begin()
447 static void armada_drm_crtc_atomic_flush(struct drm_crtc *crtc, in armada_drm_crtc_atomic_flush() argument
451 crtc); in armada_drm_crtc_atomic_flush()
452 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); in armada_drm_crtc_atomic_flush()
454 DRM_DEBUG_KMS("[CRTC:%d:%s]\n", crtc->base.id, crtc->name); in armada_drm_crtc_atomic_flush()
464 armada_drm_crtc_queue_state_event(crtc); in armada_drm_crtc_atomic_flush()
475 static void armada_drm_crtc_atomic_disable(struct drm_crtc *crtc, in armada_drm_crtc_atomic_disable() argument
479 crtc); in armada_drm_crtc_atomic_disable()
480 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); in armada_drm_crtc_atomic_disable()
483 DRM_DEBUG_KMS("[CRTC:%d:%s]\n", crtc->base.id, crtc->name); in armada_drm_crtc_atomic_disable()
486 drm_crtc_vblank_put(crtc); in armada_drm_crtc_atomic_disable()
488 drm_crtc_vblank_off(crtc); in armada_drm_crtc_atomic_disable()
491 if (!crtc->state->active) { in armada_drm_crtc_atomic_disable()
493 * This modeset will be leaving the CRTC disabled, so in armada_drm_crtc_atomic_disable()
503 event = crtc->state->event; in armada_drm_crtc_atomic_disable()
504 crtc->state->event = NULL; in armada_drm_crtc_atomic_disable()
506 spin_lock_irq(&crtc->dev->event_lock); in armada_drm_crtc_atomic_disable()
507 drm_crtc_send_vblank_event(crtc, event); in armada_drm_crtc_atomic_disable()
508 spin_unlock_irq(&crtc->dev->event_lock); in armada_drm_crtc_atomic_disable()
513 static void armada_drm_crtc_atomic_enable(struct drm_crtc *crtc, in armada_drm_crtc_atomic_enable() argument
517 crtc); in armada_drm_crtc_atomic_enable()
518 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); in armada_drm_crtc_atomic_enable()
520 DRM_DEBUG_KMS("[CRTC:%d:%s]\n", crtc->base.id, crtc->name); in armada_drm_crtc_atomic_enable()
524 * This modeset is enabling the CRTC after it having in armada_drm_crtc_atomic_enable()
529 dcrtc->variant->enable(dcrtc, &crtc->state->adjusted_mode); in armada_drm_crtc_atomic_enable()
532 drm_crtc_vblank_on(crtc); in armada_drm_crtc_atomic_enable()
534 if (crtc->state->adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE) in armada_drm_crtc_atomic_enable()
535 WARN_ON(drm_crtc_vblank_get(crtc)); in armada_drm_crtc_atomic_enable()
537 armada_drm_crtc_queue_state_event(crtc); in armada_drm_crtc_atomic_enable()
616 } else if (dcrtc->cursor_x + w > dcrtc->crtc.mode.hdisplay) { in armada_drm_crtc_cursor_update()
619 w = max_t(int, dcrtc->crtc.mode.hdisplay - dcrtc->cursor_x, 0); in armada_drm_crtc_cursor_update()
629 } else if (dcrtc->cursor_y + h > dcrtc->crtc.mode.vdisplay) { in armada_drm_crtc_cursor_update()
632 h = max_t(int, dcrtc->crtc.mode.vdisplay - dcrtc->cursor_y, 0); in armada_drm_crtc_cursor_update()
701 static int armada_drm_crtc_cursor_set(struct drm_crtc *crtc, in armada_drm_crtc_cursor_set() argument
704 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); in armada_drm_crtc_cursor_set()
751 static int armada_drm_crtc_cursor_move(struct drm_crtc *crtc, int x, int y) in armada_drm_crtc_cursor_move() argument
753 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); in armada_drm_crtc_cursor_move()
767 static void armada_drm_crtc_destroy(struct drm_crtc *crtc) in armada_drm_crtc_destroy() argument
769 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); in armada_drm_crtc_destroy()
770 struct armada_private *priv = drm_to_armada_dev(crtc->dev); in armada_drm_crtc_destroy()
776 drm_crtc_cleanup(&dcrtc->crtc); in armada_drm_crtc_destroy()
783 of_node_put(dcrtc->crtc.port); in armada_drm_crtc_destroy()
788 static int armada_drm_crtc_late_register(struct drm_crtc *crtc) in armada_drm_crtc_late_register() argument
791 armada_drm_crtc_debugfs_init(drm_to_armada_crtc(crtc)); in armada_drm_crtc_late_register()
797 static int armada_drm_crtc_enable_vblank(struct drm_crtc *crtc) in armada_drm_crtc_enable_vblank() argument
799 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); in armada_drm_crtc_enable_vblank()
808 static void armada_drm_crtc_disable_vblank(struct drm_crtc *crtc) in armada_drm_crtc_disable_vblank() argument
810 struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); in armada_drm_crtc_disable_vblank()
847 DRM_DEBUG_KMS("[CRTC:%u:%s] desired clock=%luHz\n", in armada_crtc_select_clock()
848 dcrtc->crtc.base.id, dcrtc->crtc.name, desired_hz); in armada_crtc_select_clock()
878 DRM_DEBUG_KMS("[CRTC:%u:%s] clk=%u %luHz div=%u real=%luHz\n", in armada_crtc_select_clock()
879 dcrtc->crtc.base.id, dcrtc->crtc.name, in armada_crtc_select_clock()
898 DRM_DEBUG_KMS("[CRTC:%u:%s] selected clk=%u %luHz div=%u real=%luHz\n", in armada_crtc_select_clock()
899 dcrtc->crtc.base.id, dcrtc->crtc.name, in armada_crtc_select_clock()
925 DRM_ERROR("failed to allocate Armada crtc\n"); in armada_drm_crtc_create()
970 dcrtc->crtc.port = port; in armada_drm_crtc_create()
984 ret = drm_crtc_init_with_planes(drm, &dcrtc->crtc, primary, NULL, in armada_drm_crtc_create()
989 drm_crtc_helper_add(&dcrtc->crtc, &armada_crtc_helper_funcs); in armada_drm_crtc_create()
991 ret = drm_mode_crtc_set_gamma_size(&dcrtc->crtc, 256); in armada_drm_crtc_create()
995 drm_crtc_enable_color_mgmt(&dcrtc->crtc, 0, false, 256); in armada_drm_crtc_create()
1046 armada_drm_crtc_destroy(&dcrtc->crtc); in armada_lcd_unbind()