Lines Matching refs:crtc
142 bool drm_helper_crtc_in_use(struct drm_crtc *crtc) in drm_helper_crtc_in_use() argument
145 struct drm_device *dev = crtc->dev; in drm_helper_crtc_in_use()
155 if (encoder->crtc == crtc && drm_helper_encoder_in_use(encoder)) in drm_helper_crtc_in_use()
179 struct drm_crtc *crtc; in __drm_helper_disable_unused_functions() local
187 encoder->crtc = NULL; in __drm_helper_disable_unused_functions()
191 drm_for_each_crtc(crtc, dev) { in __drm_helper_disable_unused_functions()
192 const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; in __drm_helper_disable_unused_functions()
193 crtc->enabled = drm_helper_crtc_in_use(crtc); in __drm_helper_disable_unused_functions()
194 if (!crtc->enabled) { in __drm_helper_disable_unused_functions()
196 (*crtc_funcs->disable)(crtc); in __drm_helper_disable_unused_functions()
198 (*crtc_funcs->dpms)(crtc, DRM_MODE_DPMS_OFF); in __drm_helper_disable_unused_functions()
199 crtc->primary->fb = NULL; in __drm_helper_disable_unused_functions()
236 if (encoder->crtc == NULL) in drm_crtc_prepare_encoders()
240 encoder->crtc != (*encoder_funcs->get_crtc)(encoder)) in drm_crtc_prepare_encoders()
265 bool drm_crtc_helper_set_mode(struct drm_crtc *crtc, in drm_crtc_helper_set_mode() argument
270 struct drm_device *dev = crtc->dev; in drm_crtc_helper_set_mode()
272 const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; in drm_crtc_helper_set_mode()
281 saved_enabled = crtc->enabled; in drm_crtc_helper_set_mode()
282 crtc->enabled = drm_helper_crtc_in_use(crtc); in drm_crtc_helper_set_mode()
283 if (!crtc->enabled) in drm_crtc_helper_set_mode()
288 crtc->enabled = saved_enabled; in drm_crtc_helper_set_mode()
292 saved_mode = crtc->mode; in drm_crtc_helper_set_mode()
293 saved_hwmode = crtc->hwmode; in drm_crtc_helper_set_mode()
294 saved_x = crtc->x; in drm_crtc_helper_set_mode()
295 saved_y = crtc->y; in drm_crtc_helper_set_mode()
300 crtc->mode = *mode; in drm_crtc_helper_set_mode()
301 crtc->x = x; in drm_crtc_helper_set_mode()
302 crtc->y = y; in drm_crtc_helper_set_mode()
310 if (encoder->crtc != crtc) in drm_crtc_helper_set_mode()
328 if (!(ret = crtc_funcs->mode_fixup(crtc, mode, adjusted_mode))) { in drm_crtc_helper_set_mode()
332 DRM_DEBUG_KMS("[CRTC:%d]\n", crtc->base.id); in drm_crtc_helper_set_mode()
334 crtc->hwmode = *adjusted_mode; in drm_crtc_helper_set_mode()
339 if (encoder->crtc != crtc) in drm_crtc_helper_set_mode()
353 crtc_funcs->prepare(crtc); in drm_crtc_helper_set_mode()
358 ret = !crtc_funcs->mode_set(crtc, mode, adjusted_mode, x, y, old_fb); in drm_crtc_helper_set_mode()
364 if (encoder->crtc != crtc) in drm_crtc_helper_set_mode()
377 crtc_funcs->commit(crtc); in drm_crtc_helper_set_mode()
381 if (encoder->crtc != crtc) in drm_crtc_helper_set_mode()
396 drm_calc_timestamping_constants(crtc, &crtc->hwmode); in drm_crtc_helper_set_mode()
402 crtc->enabled = saved_enabled; in drm_crtc_helper_set_mode()
403 crtc->mode = saved_mode; in drm_crtc_helper_set_mode()
404 crtc->hwmode = saved_hwmode; in drm_crtc_helper_set_mode()
405 crtc->x = saved_x; in drm_crtc_helper_set_mode()
406 crtc->y = saved_y; in drm_crtc_helper_set_mode()
414 drm_crtc_helper_disable(struct drm_crtc *crtc) in drm_crtc_helper_disable() argument
416 struct drm_device *dev = crtc->dev; in drm_crtc_helper_disable()
422 if (encoder->crtc != crtc) in drm_crtc_helper_disable()
474 BUG_ON(!set->crtc); in drm_crtc_helper_set_config()
475 BUG_ON(!set->crtc->helper_private); in drm_crtc_helper_set_config()
481 crtc_funcs = set->crtc->helper_private; in drm_crtc_helper_set_config()
488 set->crtc->base.id, set->fb->base.id, in drm_crtc_helper_set_config()
491 DRM_DEBUG_KMS("[CRTC:%d] [NOFB]\n", set->crtc->base.id); in drm_crtc_helper_set_config()
492 drm_crtc_helper_disable(set->crtc); in drm_crtc_helper_set_config()
496 dev = set->crtc->dev; in drm_crtc_helper_set_config()
531 save_set.crtc = set->crtc; in drm_crtc_helper_set_config()
532 save_set.mode = &set->crtc->mode; in drm_crtc_helper_set_config()
533 save_set.x = set->crtc->x; in drm_crtc_helper_set_config()
534 save_set.y = set->crtc->y; in drm_crtc_helper_set_config()
535 save_set.fb = set->crtc->primary->fb; in drm_crtc_helper_set_config()
539 if (set->crtc->primary->fb != set->fb) { in drm_crtc_helper_set_config()
541 if (set->crtc->primary->fb == NULL) { in drm_crtc_helper_set_config()
547 set->crtc->primary->fb->pixel_format) { in drm_crtc_helper_set_config()
553 if (set->x != set->crtc->x || set->y != set->crtc->y) in drm_crtc_helper_set_config()
556 if (set->mode && !drm_mode_equal(set->mode, &set->crtc->mode)) { in drm_crtc_helper_set_config()
558 drm_mode_debug_printmodeline(&set->crtc->mode); in drm_crtc_helper_set_config()
594 connector->encoder->crtc = NULL; in drm_crtc_helper_set_config()
609 if (connector->encoder->crtc == set->crtc) in drm_crtc_helper_set_config()
612 new_crtc = connector->encoder->crtc; in drm_crtc_helper_set_config()
616 new_crtc = set->crtc; in drm_crtc_helper_set_config()
625 if (new_crtc != connector->encoder->crtc) { in drm_crtc_helper_set_config()
628 connector->encoder->crtc = new_crtc; in drm_crtc_helper_set_config()
645 if (drm_helper_crtc_in_use(set->crtc)) { in drm_crtc_helper_set_config()
649 set->crtc->primary->fb = set->fb; in drm_crtc_helper_set_config()
650 if (!drm_crtc_helper_set_mode(set->crtc, set->mode, in drm_crtc_helper_set_config()
654 set->crtc->base.id); in drm_crtc_helper_set_config()
655 set->crtc->primary->fb = save_set.fb; in drm_crtc_helper_set_config()
668 set->crtc->x = set->x; in drm_crtc_helper_set_config()
669 set->crtc->y = set->y; in drm_crtc_helper_set_config()
670 set->crtc->primary->fb = set->fb; in drm_crtc_helper_set_config()
671 ret = crtc_funcs->mode_set_base(set->crtc, in drm_crtc_helper_set_config()
674 set->crtc->x = save_set.x; in drm_crtc_helper_set_config()
675 set->crtc->y = save_set.y; in drm_crtc_helper_set_config()
676 set->crtc->primary->fb = save_set.fb; in drm_crtc_helper_set_config()
699 !drm_crtc_helper_set_mode(save_set.crtc, save_set.mode, save_set.x, in drm_crtc_helper_set_config()
743 static int drm_helper_choose_crtc_dpms(struct drm_crtc *crtc) in drm_helper_choose_crtc_dpms() argument
747 struct drm_device *dev = crtc->dev; in drm_helper_choose_crtc_dpms()
750 if (connector->encoder && connector->encoder->crtc == crtc) in drm_helper_choose_crtc_dpms()
772 struct drm_crtc *crtc = encoder ? encoder->crtc : NULL; in drm_helper_connector_dpms() local
786 if (crtc) { in drm_helper_connector_dpms()
787 const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; in drm_helper_connector_dpms()
789 (*crtc_funcs->dpms) (crtc, in drm_helper_connector_dpms()
790 drm_helper_choose_crtc_dpms(crtc)); in drm_helper_connector_dpms()
800 if (crtc) { in drm_helper_connector_dpms()
801 const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; in drm_helper_connector_dpms()
803 (*crtc_funcs->dpms) (crtc, in drm_helper_connector_dpms()
804 drm_helper_choose_crtc_dpms(crtc)); in drm_helper_connector_dpms()
861 struct drm_crtc *crtc; in drm_helper_resume_force_mode() local
868 drm_for_each_crtc(crtc, dev) { in drm_helper_resume_force_mode()
870 if (!crtc->enabled) in drm_helper_resume_force_mode()
873 ret = drm_crtc_helper_set_mode(crtc, &crtc->mode, in drm_helper_resume_force_mode()
874 crtc->x, crtc->y, crtc->primary->fb); in drm_helper_resume_force_mode()
878 DRM_ERROR("failed to set mode on crtc %p\n", crtc); in drm_helper_resume_force_mode()
881 if (drm_helper_choose_crtc_dpms(crtc)) { in drm_helper_resume_force_mode()
884 if(encoder->crtc != crtc) in drm_helper_resume_force_mode()
893 crtc_funcs = crtc->helper_private; in drm_helper_resume_force_mode()
895 (*crtc_funcs->dpms) (crtc, in drm_helper_resume_force_mode()
896 drm_helper_choose_crtc_dpms(crtc)); in drm_helper_resume_force_mode()
923 int drm_helper_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *mode, in drm_helper_crtc_mode_set() argument
928 const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; in drm_helper_crtc_mode_set()
931 if (crtc->funcs->atomic_duplicate_state) in drm_helper_crtc_mode_set()
932 crtc_state = crtc->funcs->atomic_duplicate_state(crtc); in drm_helper_crtc_mode_set()
934 if (!crtc->state) in drm_helper_crtc_mode_set()
935 drm_atomic_helper_crtc_reset(crtc); in drm_helper_crtc_mode_set()
937 crtc_state = drm_atomic_helper_crtc_duplicate_state(crtc); in drm_helper_crtc_mode_set()
951 ret = crtc_funcs->atomic_check(crtc, crtc_state); in drm_helper_crtc_mode_set()
956 swap(crtc->state, crtc_state); in drm_helper_crtc_mode_set()
958 crtc_funcs->mode_set_nofb(crtc); in drm_helper_crtc_mode_set()
960 ret = drm_helper_crtc_mode_set_base(crtc, x, y, old_fb); in drm_helper_crtc_mode_set()
964 if (crtc->funcs->atomic_destroy_state) in drm_helper_crtc_mode_set()
965 crtc->funcs->atomic_destroy_state(crtc, crtc_state); in drm_helper_crtc_mode_set()
967 drm_atomic_helper_crtc_destroy_state(crtc, crtc_state); in drm_helper_crtc_mode_set()
988 int drm_helper_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y, in drm_helper_crtc_mode_set_base() argument
992 struct drm_plane *plane = crtc->primary; in drm_helper_crtc_mode_set_base()
1004 plane_state->crtc = crtc; in drm_helper_crtc_mode_set_base()
1005 drm_atomic_set_fb_for_plane(plane_state, crtc->primary->fb); in drm_helper_crtc_mode_set_base()
1008 plane_state->crtc_h = crtc->mode.vdisplay; in drm_helper_crtc_mode_set_base()
1009 plane_state->crtc_w = crtc->mode.hdisplay; in drm_helper_crtc_mode_set_base()
1012 plane_state->src_h = crtc->mode.vdisplay << 16; in drm_helper_crtc_mode_set_base()
1013 plane_state->src_w = crtc->mode.hdisplay << 16; in drm_helper_crtc_mode_set_base()