Lines Matching refs:crtc
82 static bool vc4_crtc_get_scanout_position(struct drm_crtc *crtc, in vc4_crtc_get_scanout_position() argument
88 struct drm_device *dev = crtc->dev; in vc4_crtc_get_scanout_position()
90 struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); in vc4_crtc_get_scanout_position()
91 struct vc4_crtc_state *vc4_crtc_state = to_vc4_crtc_state(crtc->state); in vc4_crtc_get_scanout_position()
204 void vc4_crtc_destroy(struct drm_crtc *crtc) in vc4_crtc_destroy() argument
206 drm_crtc_cleanup(crtc); in vc4_crtc_destroy()
282 static struct drm_encoder *vc4_get_crtc_encoder(struct drm_crtc *crtc, in vc4_get_crtc_encoder() argument
290 drm_connector_list_iter_begin(crtc->dev, &conn_iter); in vc4_get_crtc_encoder()
297 if (conn_state->crtc == crtc) { in vc4_get_crtc_encoder()
307 static void vc4_crtc_pixelvalve_reset(struct drm_crtc *crtc) in vc4_crtc_pixelvalve_reset() argument
309 struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); in vc4_crtc_pixelvalve_reset()
316 static void vc4_crtc_config_pv(struct drm_crtc *crtc, struct drm_atomic_state *state) in vc4_crtc_config_pv() argument
318 struct drm_device *dev = crtc->dev; in vc4_crtc_config_pv()
320 struct drm_encoder *encoder = vc4_get_crtc_encoder(crtc, state, in vc4_crtc_config_pv()
323 struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); in vc4_crtc_config_pv()
325 struct drm_crtc_state *crtc_state = crtc->state; in vc4_crtc_config_pv()
338 drm_crtc_index(crtc)); in vc4_crtc_config_pv()
342 vc4_crtc_pixelvalve_reset(crtc); in vc4_crtc_config_pv()
419 drm_crtc_index(crtc)); in vc4_crtc_config_pv()
432 static int vc4_crtc_disable(struct drm_crtc *crtc, in vc4_crtc_disable() argument
438 struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); in vc4_crtc_disable()
439 struct drm_device *dev = crtc->dev; in vc4_crtc_disable()
468 vc4_crtc_pixelvalve_reset(crtc); in vc4_crtc_disable()
477 static struct drm_encoder *vc4_crtc_get_encoder_by_type(struct drm_crtc *crtc, in vc4_crtc_get_encoder_by_type() argument
482 drm_for_each_encoder(encoder, crtc->dev) { in vc4_crtc_get_encoder_by_type()
492 int vc4_crtc_disable_at_boot(struct drm_crtc *crtc) in vc4_crtc_disable_at_boot() argument
494 struct drm_device *drm = crtc->dev; in vc4_crtc_disable_at_boot()
495 struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); in vc4_crtc_disable_at_boot()
524 encoder = vc4_crtc_get_encoder_by_type(crtc, encoder_type); in vc4_crtc_disable_at_boot()
528 return vc4_crtc_disable(crtc, encoder, NULL, channel); in vc4_crtc_disable_at_boot()
531 static void vc4_crtc_atomic_disable(struct drm_crtc *crtc, in vc4_crtc_atomic_disable() argument
535 crtc); in vc4_crtc_atomic_disable()
537 struct drm_encoder *encoder = vc4_get_crtc_encoder(crtc, state, in vc4_crtc_atomic_disable()
539 struct drm_device *dev = crtc->dev; in vc4_crtc_atomic_disable()
544 drm_crtc_vblank_off(crtc); in vc4_crtc_atomic_disable()
546 vc4_crtc_disable(crtc, encoder, state, old_vc4_state->assigned_channel); in vc4_crtc_atomic_disable()
552 if (crtc->state->event) { in vc4_crtc_atomic_disable()
556 drm_crtc_send_vblank_event(crtc, crtc->state->event); in vc4_crtc_atomic_disable()
557 crtc->state->event = NULL; in vc4_crtc_atomic_disable()
562 static void vc4_crtc_atomic_enable(struct drm_crtc *crtc, in vc4_crtc_atomic_enable() argument
565 struct drm_device *dev = crtc->dev; in vc4_crtc_atomic_enable()
566 struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); in vc4_crtc_atomic_enable()
567 struct drm_encoder *encoder = vc4_get_crtc_encoder(crtc, state, in vc4_crtc_atomic_enable()
576 drm_crtc_vblank_on(crtc); in vc4_crtc_atomic_enable()
578 vc4_hvs_atomic_enable(crtc, state); in vc4_crtc_atomic_enable()
583 vc4_crtc_config_pv(crtc, state); in vc4_crtc_atomic_enable()
600 static enum drm_mode_status vc4_crtc_mode_valid(struct drm_crtc *crtc, in vc4_crtc_mode_valid() argument
606 crtc->base.id); in vc4_crtc_mode_valid()
633 if (conn_state->crtc != state->crtc) in vc4_crtc_get_margins()
644 static int vc4_crtc_atomic_check(struct drm_crtc *crtc, in vc4_crtc_atomic_check() argument
648 crtc); in vc4_crtc_atomic_check()
654 ret = vc4_hvs_atomic_check(crtc, state); in vc4_crtc_atomic_check()
660 if (conn_state->crtc != crtc) in vc4_crtc_atomic_check()
673 static int vc4_enable_vblank(struct drm_crtc *crtc) in vc4_enable_vblank() argument
675 struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); in vc4_enable_vblank()
682 static void vc4_disable_vblank(struct drm_crtc *crtc) in vc4_disable_vblank() argument
684 struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); in vc4_disable_vblank()
691 struct drm_crtc *crtc = &vc4_crtc->base; in vc4_crtc_handle_page_flip() local
692 struct drm_device *dev = crtc->dev; in vc4_crtc_handle_page_flip()
694 struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(crtc->state); in vc4_crtc_handle_page_flip()
702 drm_crtc_send_vblank_event(crtc, vc4_crtc->event); in vc4_crtc_handle_page_flip()
704 drm_crtc_vblank_put(crtc); in vc4_crtc_handle_page_flip()
717 void vc4_crtc_handle_vblank(struct vc4_crtc *crtc) in vc4_crtc_handle_vblank() argument
719 crtc->t_vblank = ktime_get(); in vc4_crtc_handle_vblank()
720 drm_crtc_handle_vblank(&crtc->base); in vc4_crtc_handle_vblank()
721 vc4_crtc_handle_page_flip(crtc); in vc4_crtc_handle_vblank()
740 struct drm_crtc *crtc; member
756 struct drm_crtc *crtc = flip_state->crtc; in vc4_async_page_flip_complete() local
757 struct drm_device *dev = crtc->dev; in vc4_async_page_flip_complete()
758 struct drm_plane *plane = crtc->primary; in vc4_async_page_flip_complete()
765 drm_crtc_send_vblank_event(crtc, flip_state->event); in vc4_async_page_flip_complete()
769 drm_crtc_vblank_put(crtc); in vc4_async_page_flip_complete()
797 static int vc4_async_page_flip(struct drm_crtc *crtc, in vc4_async_page_flip() argument
802 struct drm_device *dev = crtc->dev; in vc4_async_page_flip()
803 struct drm_plane *plane = crtc->primary; in vc4_async_page_flip()
828 flip_state->crtc = crtc; in vc4_async_page_flip()
843 WARN_ON(drm_crtc_vblank_get(crtc) != 0); in vc4_async_page_flip()
858 int vc4_page_flip(struct drm_crtc *crtc, in vc4_page_flip() argument
865 return vc4_async_page_flip(crtc, fb, event, flags); in vc4_page_flip()
867 return drm_atomic_helper_page_flip(crtc, fb, event, flags, ctx); in vc4_page_flip()
870 struct drm_crtc_state *vc4_crtc_duplicate_state(struct drm_crtc *crtc) in vc4_crtc_duplicate_state() argument
878 old_vc4_state = to_vc4_crtc_state(crtc->state); in vc4_crtc_duplicate_state()
883 __drm_atomic_helper_crtc_duplicate_state(crtc, &vc4_state->base); in vc4_crtc_duplicate_state()
887 void vc4_crtc_destroy_state(struct drm_crtc *crtc, in vc4_crtc_destroy_state() argument
890 struct vc4_dev *vc4 = to_vc4_dev(crtc->dev); in vc4_crtc_destroy_state()
902 drm_atomic_helper_crtc_destroy_state(crtc, state); in vc4_crtc_destroy_state()
905 void vc4_crtc_reset(struct drm_crtc *crtc) in vc4_crtc_reset() argument
909 if (crtc->state) in vc4_crtc_reset()
910 vc4_crtc_destroy_state(crtc, crtc->state); in vc4_crtc_reset()
914 crtc->state = NULL; in vc4_crtc_reset()
919 __drm_atomic_helper_crtc_reset(crtc, &vc4_crtc_state->base); in vc4_crtc_reset()
1068 struct drm_crtc *crtc) in vc4_set_crtc_possible_masks() argument
1070 struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); in vc4_set_crtc_possible_masks()
1086 encoder->possible_crtcs |= drm_crtc_mask(crtc); in vc4_set_crtc_possible_masks()
1098 struct drm_crtc *crtc = &vc4_crtc->base; in vc4_crtc_init() local
1114 drm_crtc_init_with_planes(drm, crtc, primary_plane, NULL, in vc4_crtc_init()
1116 drm_crtc_helper_add(crtc, crtc_helper_funcs); in vc4_crtc_init()
1119 drm_mode_crtc_set_gamma_size(crtc, ARRAY_SIZE(vc4_crtc->lut_r)); in vc4_crtc_init()
1121 drm_crtc_enable_color_mgmt(crtc, 0, false, crtc->gamma_size); in vc4_crtc_init()
1126 drm_crtc_enable_color_mgmt(crtc, 0, true, crtc->gamma_size); in vc4_crtc_init()
1129 for (i = 0; i < crtc->gamma_size; i++) { in vc4_crtc_init()
1144 struct drm_crtc *crtc; in vc4_crtc_bind() local
1151 crtc = &vc4_crtc->base; in vc4_crtc_bind()
1171 vc4_set_crtc_possible_masks(drm, crtc); in vc4_crtc_bind()
1192 if (destroy_plane->possible_crtcs == drm_crtc_mask(crtc)) in vc4_crtc_bind()