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()
181 struct drm_crtc *crtc; in __drm_helper_disable_unused_functions() local
189 encoder->crtc = NULL; in __drm_helper_disable_unused_functions()
193 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { in __drm_helper_disable_unused_functions()
194 const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; in __drm_helper_disable_unused_functions()
195 crtc->enabled = drm_helper_crtc_in_use(crtc); in __drm_helper_disable_unused_functions()
196 if (!crtc->enabled) { in __drm_helper_disable_unused_functions()
198 (*crtc_funcs->disable)(crtc); in __drm_helper_disable_unused_functions()
200 (*crtc_funcs->dpms)(crtc, DRM_MODE_DPMS_OFF); in __drm_helper_disable_unused_functions()
201 crtc->primary->fb = NULL; in __drm_helper_disable_unused_functions()
238 if (encoder->crtc == NULL) in drm_crtc_prepare_encoders()
242 encoder->crtc != (*encoder_funcs->get_crtc)(encoder)) in drm_crtc_prepare_encoders()
267 bool drm_crtc_helper_set_mode(struct drm_crtc *crtc, in drm_crtc_helper_set_mode() argument
272 struct drm_device *dev = crtc->dev; in drm_crtc_helper_set_mode()
274 const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; in drm_crtc_helper_set_mode()
283 saved_enabled = crtc->enabled; in drm_crtc_helper_set_mode()
284 crtc->enabled = drm_helper_crtc_in_use(crtc); in drm_crtc_helper_set_mode()
285 if (!crtc->enabled) in drm_crtc_helper_set_mode()
290 crtc->enabled = saved_enabled; in drm_crtc_helper_set_mode()
294 saved_mode = crtc->mode; in drm_crtc_helper_set_mode()
295 saved_hwmode = crtc->hwmode; in drm_crtc_helper_set_mode()
296 saved_x = crtc->x; in drm_crtc_helper_set_mode()
297 saved_y = crtc->y; in drm_crtc_helper_set_mode()
302 crtc->mode = *mode; in drm_crtc_helper_set_mode()
303 crtc->x = x; in drm_crtc_helper_set_mode()
304 crtc->y = y; in drm_crtc_helper_set_mode()
312 if (encoder->crtc != crtc) in drm_crtc_helper_set_mode()
332 if (!(ret = crtc_funcs->mode_fixup(crtc, mode, adjusted_mode))) { in drm_crtc_helper_set_mode()
336 DRM_DEBUG_KMS("[CRTC:%d]\n", crtc->base.id); in drm_crtc_helper_set_mode()
338 crtc->hwmode = *adjusted_mode; in drm_crtc_helper_set_mode()
343 if (encoder->crtc != crtc) in drm_crtc_helper_set_mode()
359 crtc_funcs->prepare(crtc); in drm_crtc_helper_set_mode()
364 ret = !crtc_funcs->mode_set(crtc, mode, adjusted_mode, x, y, old_fb); in drm_crtc_helper_set_mode()
370 if (encoder->crtc != crtc) in drm_crtc_helper_set_mode()
385 crtc_funcs->commit(crtc); in drm_crtc_helper_set_mode()
389 if (encoder->crtc != crtc) in drm_crtc_helper_set_mode()
406 drm_calc_timestamping_constants(crtc, &crtc->hwmode); in drm_crtc_helper_set_mode()
412 crtc->enabled = saved_enabled; in drm_crtc_helper_set_mode()
413 crtc->mode = saved_mode; in drm_crtc_helper_set_mode()
414 crtc->hwmode = saved_hwmode; in drm_crtc_helper_set_mode()
415 crtc->x = saved_x; in drm_crtc_helper_set_mode()
416 crtc->y = saved_y; in drm_crtc_helper_set_mode()
424 drm_crtc_helper_disable(struct drm_crtc *crtc) in drm_crtc_helper_disable() argument
426 struct drm_device *dev = crtc->dev; in drm_crtc_helper_disable()
432 if (encoder->crtc != crtc) in drm_crtc_helper_disable()
484 BUG_ON(!set->crtc); in drm_crtc_helper_set_config()
485 BUG_ON(!set->crtc->helper_private); in drm_crtc_helper_set_config()
491 crtc_funcs = set->crtc->helper_private; in drm_crtc_helper_set_config()
498 set->crtc->base.id, set->fb->base.id, in drm_crtc_helper_set_config()
501 DRM_DEBUG_KMS("[CRTC:%d] [NOFB]\n", set->crtc->base.id); in drm_crtc_helper_set_config()
502 drm_crtc_helper_disable(set->crtc); in drm_crtc_helper_set_config()
506 dev = set->crtc->dev; in drm_crtc_helper_set_config()
541 save_set.crtc = set->crtc; in drm_crtc_helper_set_config()
542 save_set.mode = &set->crtc->mode; in drm_crtc_helper_set_config()
543 save_set.x = set->crtc->x; in drm_crtc_helper_set_config()
544 save_set.y = set->crtc->y; in drm_crtc_helper_set_config()
545 save_set.fb = set->crtc->primary->fb; in drm_crtc_helper_set_config()
549 if (set->crtc->primary->fb != set->fb) { in drm_crtc_helper_set_config()
551 if (set->crtc->primary->fb == NULL) { in drm_crtc_helper_set_config()
557 set->crtc->primary->fb->pixel_format) { in drm_crtc_helper_set_config()
563 if (set->x != set->crtc->x || set->y != set->crtc->y) in drm_crtc_helper_set_config()
566 if (set->mode && !drm_mode_equal(set->mode, &set->crtc->mode)) { in drm_crtc_helper_set_config()
568 drm_mode_debug_printmodeline(&set->crtc->mode); in drm_crtc_helper_set_config()
604 connector->encoder->crtc = NULL; in drm_crtc_helper_set_config()
619 if (connector->encoder->crtc == set->crtc) in drm_crtc_helper_set_config()
622 new_crtc = connector->encoder->crtc; in drm_crtc_helper_set_config()
626 new_crtc = set->crtc; in drm_crtc_helper_set_config()
635 if (new_crtc != connector->encoder->crtc) { in drm_crtc_helper_set_config()
638 connector->encoder->crtc = new_crtc; in drm_crtc_helper_set_config()
655 if (drm_helper_crtc_in_use(set->crtc)) { in drm_crtc_helper_set_config()
659 set->crtc->primary->fb = set->fb; in drm_crtc_helper_set_config()
660 if (!drm_crtc_helper_set_mode(set->crtc, set->mode, in drm_crtc_helper_set_config()
664 set->crtc->base.id); in drm_crtc_helper_set_config()
665 set->crtc->primary->fb = save_set.fb; in drm_crtc_helper_set_config()
678 set->crtc->x = set->x; in drm_crtc_helper_set_config()
679 set->crtc->y = set->y; in drm_crtc_helper_set_config()
680 set->crtc->primary->fb = set->fb; in drm_crtc_helper_set_config()
681 ret = crtc_funcs->mode_set_base(set->crtc, in drm_crtc_helper_set_config()
684 set->crtc->x = save_set.x; in drm_crtc_helper_set_config()
685 set->crtc->y = save_set.y; in drm_crtc_helper_set_config()
686 set->crtc->primary->fb = save_set.fb; in drm_crtc_helper_set_config()
709 !drm_crtc_helper_set_mode(save_set.crtc, save_set.mode, save_set.x, in drm_crtc_helper_set_config()
757 static int drm_helper_choose_crtc_dpms(struct drm_crtc *crtc) in drm_helper_choose_crtc_dpms() argument
761 struct drm_device *dev = crtc->dev; in drm_helper_choose_crtc_dpms()
764 if (connector->encoder && connector->encoder->crtc == crtc) in drm_helper_choose_crtc_dpms()
783 struct drm_crtc *crtc = encoder ? encoder->crtc : NULL; in drm_helper_connector_dpms() local
797 if (crtc) { in drm_helper_connector_dpms()
798 const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; in drm_helper_connector_dpms()
800 (*crtc_funcs->dpms) (crtc, in drm_helper_connector_dpms()
801 drm_helper_choose_crtc_dpms(crtc)); in drm_helper_connector_dpms()
811 if (crtc) { in drm_helper_connector_dpms()
812 const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; in drm_helper_connector_dpms()
814 (*crtc_funcs->dpms) (crtc, in drm_helper_connector_dpms()
815 drm_helper_choose_crtc_dpms(crtc)); in drm_helper_connector_dpms()
872 struct drm_crtc *crtc; in drm_helper_resume_force_mode() local
879 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { in drm_helper_resume_force_mode()
881 if (!crtc->enabled) in drm_helper_resume_force_mode()
884 ret = drm_crtc_helper_set_mode(crtc, &crtc->mode, in drm_helper_resume_force_mode()
885 crtc->x, crtc->y, crtc->primary->fb); in drm_helper_resume_force_mode()
889 DRM_ERROR("failed to set mode on crtc %p\n", crtc); in drm_helper_resume_force_mode()
892 if (drm_helper_choose_crtc_dpms(crtc)) { in drm_helper_resume_force_mode()
895 if(encoder->crtc != crtc) in drm_helper_resume_force_mode()
904 crtc_funcs = crtc->helper_private; in drm_helper_resume_force_mode()
906 (*crtc_funcs->dpms) (crtc, in drm_helper_resume_force_mode()
907 drm_helper_choose_crtc_dpms(crtc)); in drm_helper_resume_force_mode()
934 int drm_helper_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *mode, in drm_helper_crtc_mode_set() argument
939 const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; in drm_helper_crtc_mode_set()
942 if (crtc->funcs->atomic_duplicate_state) in drm_helper_crtc_mode_set()
943 crtc_state = crtc->funcs->atomic_duplicate_state(crtc); in drm_helper_crtc_mode_set()
944 else if (crtc->state) in drm_helper_crtc_mode_set()
945 crtc_state = kmemdup(crtc->state, sizeof(*crtc_state), in drm_helper_crtc_mode_set()
951 crtc_state->crtc = crtc; in drm_helper_crtc_mode_set()
960 ret = crtc_funcs->atomic_check(crtc, crtc_state); in drm_helper_crtc_mode_set()
968 swap(crtc->state, crtc_state); in drm_helper_crtc_mode_set()
970 crtc_funcs->mode_set_nofb(crtc); in drm_helper_crtc_mode_set()
973 if (crtc->funcs->atomic_destroy_state) in drm_helper_crtc_mode_set()
974 crtc->funcs->atomic_destroy_state(crtc, crtc_state); in drm_helper_crtc_mode_set()
979 return drm_helper_crtc_mode_set_base(crtc, x, y, old_fb); in drm_helper_crtc_mode_set()
997 int drm_helper_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y, in drm_helper_crtc_mode_set_base() argument
1001 struct drm_plane *plane = crtc->primary; in drm_helper_crtc_mode_set_base()
1013 plane_state->crtc = crtc; in drm_helper_crtc_mode_set_base()
1014 drm_atomic_set_fb_for_plane(plane_state, crtc->primary->fb); in drm_helper_crtc_mode_set_base()
1017 plane_state->crtc_h = crtc->mode.vdisplay; in drm_helper_crtc_mode_set_base()
1018 plane_state->crtc_w = crtc->mode.hdisplay; in drm_helper_crtc_mode_set_base()
1021 plane_state->src_h = crtc->mode.vdisplay << 16; in drm_helper_crtc_mode_set_base()
1022 plane_state->src_w = crtc->mode.hdisplay << 16; in drm_helper_crtc_mode_set_base()