Lines Matching refs:crtc
241 bool drm_helper_crtc_in_use(struct drm_crtc *crtc) in drm_helper_crtc_in_use() argument
244 struct drm_device *dev = crtc->dev; in drm_helper_crtc_in_use()
247 if (encoder->crtc == crtc && drm_helper_encoder_in_use(encoder)) in drm_helper_crtc_in_use()
278 struct drm_crtc *crtc; in drm_helper_disable_unused_functions() local
291 encoder->crtc = NULL; in drm_helper_disable_unused_functions()
295 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { in drm_helper_disable_unused_functions()
296 struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; in drm_helper_disable_unused_functions()
297 crtc->enabled = drm_helper_crtc_in_use(crtc); in drm_helper_disable_unused_functions()
298 if (!crtc->enabled) { in drm_helper_disable_unused_functions()
300 (*crtc_funcs->disable)(crtc); in drm_helper_disable_unused_functions()
302 (*crtc_funcs->dpms)(crtc, DRM_MODE_DPMS_OFF); in drm_helper_disable_unused_functions()
303 crtc->fb = NULL; in drm_helper_disable_unused_functions()
317 struct drm_crtc *crtc) in drm_encoder_crtc_ok() argument
323 if (crtc == NULL) in drm_encoder_crtc_ok()
326 dev = crtc->dev; in drm_encoder_crtc_ok()
329 if (tmp == crtc) in drm_encoder_crtc_ok()
353 if (encoder->crtc == NULL) in drm_crtc_prepare_encoders()
357 encoder->crtc != (*encoder_funcs->get_crtc)(encoder)) in drm_crtc_prepare_encoders()
385 bool drm_crtc_helper_set_mode(struct drm_crtc *crtc, in drm_crtc_helper_set_mode() argument
390 struct drm_device *dev = crtc->dev; in drm_crtc_helper_set_mode()
392 struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; in drm_crtc_helper_set_mode()
398 crtc->enabled = drm_helper_crtc_in_use(crtc); in drm_crtc_helper_set_mode()
399 if (!crtc->enabled) in drm_crtc_helper_set_mode()
406 saved_hwmode = crtc->hwmode; in drm_crtc_helper_set_mode()
407 saved_mode = crtc->mode; in drm_crtc_helper_set_mode()
408 saved_x = crtc->x; in drm_crtc_helper_set_mode()
409 saved_y = crtc->y; in drm_crtc_helper_set_mode()
414 crtc->mode = *mode; in drm_crtc_helper_set_mode()
415 crtc->x = x; in drm_crtc_helper_set_mode()
416 crtc->y = y; in drm_crtc_helper_set_mode()
424 if (encoder->crtc != crtc) in drm_crtc_helper_set_mode()
434 if (!(ret = crtc_funcs->mode_fixup(crtc, mode, adjusted_mode))) { in drm_crtc_helper_set_mode()
438 DRM_DEBUG_KMS("[CRTC:%d]\n", crtc->base.id); in drm_crtc_helper_set_mode()
443 if (encoder->crtc != crtc) in drm_crtc_helper_set_mode()
452 crtc_funcs->prepare(crtc); in drm_crtc_helper_set_mode()
457 ret = !crtc_funcs->mode_set(crtc, mode, adjusted_mode, x, y, old_fb); in drm_crtc_helper_set_mode()
463 if (encoder->crtc != crtc) in drm_crtc_helper_set_mode()
474 crtc_funcs->commit(crtc); in drm_crtc_helper_set_mode()
478 if (encoder->crtc != crtc) in drm_crtc_helper_set_mode()
487 crtc->hwmode = *adjusted_mode; in drm_crtc_helper_set_mode()
493 drm_calc_timestamping_constants(crtc); in drm_crtc_helper_set_mode()
499 crtc->hwmode = saved_hwmode; in drm_crtc_helper_set_mode()
500 crtc->mode = saved_mode; in drm_crtc_helper_set_mode()
501 crtc->x = saved_x; in drm_crtc_helper_set_mode()
502 crtc->y = saved_y; in drm_crtc_helper_set_mode()
511 drm_crtc_helper_disable(struct drm_crtc *crtc) in drm_crtc_helper_disable() argument
513 struct drm_device *dev = crtc->dev; in drm_crtc_helper_disable()
519 if (encoder->crtc != crtc) in drm_crtc_helper_disable()
553 struct drm_crtc *save_crtcs, *new_crtc, *crtc; in drm_crtc_helper_set_config() local
570 if (!set->crtc) in drm_crtc_helper_set_config()
573 if (!set->crtc->helper_private) in drm_crtc_helper_set_config()
576 crtc_funcs = set->crtc->helper_private; in drm_crtc_helper_set_config()
583 set->crtc->base.id, set->fb->base.id, in drm_crtc_helper_set_config()
586 DRM_DEBUG_KMS("[CRTC:%d] [NOFB]\n", set->crtc->base.id); in drm_crtc_helper_set_config()
587 return drm_crtc_helper_disable(set->crtc); in drm_crtc_helper_set_config()
590 dev = set->crtc->dev; in drm_crtc_helper_set_config()
619 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { in drm_crtc_helper_set_config()
620 save_crtcs[count++] = *crtc; in drm_crtc_helper_set_config()
633 save_set.crtc = set->crtc; in drm_crtc_helper_set_config()
634 save_set.mode = &set->crtc->mode; in drm_crtc_helper_set_config()
635 save_set.x = set->crtc->x; in drm_crtc_helper_set_config()
636 save_set.y = set->crtc->y; in drm_crtc_helper_set_config()
637 save_set.fb = set->crtc->fb; in drm_crtc_helper_set_config()
641 if (set->crtc->fb != set->fb) { in drm_crtc_helper_set_config()
643 if (set->crtc->fb == NULL) { in drm_crtc_helper_set_config()
648 } else if (set->fb->depth != set->crtc->fb->depth) { in drm_crtc_helper_set_config()
651 set->crtc->fb->bits_per_pixel) { in drm_crtc_helper_set_config()
657 if (set->x != set->crtc->x || set->y != set->crtc->y) in drm_crtc_helper_set_config()
660 if (set->mode && !drm_mode_equal(set->mode, &set->crtc->mode)) { in drm_crtc_helper_set_config()
662 drm_mode_debug_printmodeline(&set->crtc->mode); in drm_crtc_helper_set_config()
692 connector->encoder->crtc = NULL; in drm_crtc_helper_set_config()
707 if (connector->encoder->crtc == set->crtc) in drm_crtc_helper_set_config()
710 new_crtc = connector->encoder->crtc; in drm_crtc_helper_set_config()
714 new_crtc = set->crtc; in drm_crtc_helper_set_config()
723 if (new_crtc != connector->encoder->crtc) { in drm_crtc_helper_set_config()
726 connector->encoder->crtc = new_crtc; in drm_crtc_helper_set_config()
743 set->crtc->enabled = drm_helper_crtc_in_use(set->crtc); in drm_crtc_helper_set_config()
744 if (set->crtc->enabled) { in drm_crtc_helper_set_config()
748 old_fb = set->crtc->fb; in drm_crtc_helper_set_config()
749 set->crtc->fb = set->fb; in drm_crtc_helper_set_config()
750 if (!drm_crtc_helper_set_mode(set->crtc, set->mode, in drm_crtc_helper_set_config()
754 set->crtc->base.id); in drm_crtc_helper_set_config()
755 set->crtc->fb = old_fb; in drm_crtc_helper_set_config()
768 set->crtc->x = set->x; in drm_crtc_helper_set_config()
769 set->crtc->y = set->y; in drm_crtc_helper_set_config()
771 old_fb = set->crtc->fb; in drm_crtc_helper_set_config()
772 if (set->crtc->fb != set->fb) in drm_crtc_helper_set_config()
773 set->crtc->fb = set->fb; in drm_crtc_helper_set_config()
774 ret = crtc_funcs->mode_set_base(set->crtc, in drm_crtc_helper_set_config()
777 set->crtc->fb = old_fb; in drm_crtc_helper_set_config()
790 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { in drm_crtc_helper_set_config()
791 *crtc = save_crtcs[count++]; in drm_crtc_helper_set_config()
806 !drm_crtc_helper_set_mode(save_set.crtc, save_set.mode, save_set.x, in drm_crtc_helper_set_config()
830 static int drm_helper_choose_crtc_dpms(struct drm_crtc *crtc) in drm_helper_choose_crtc_dpms() argument
834 struct drm_device *dev = crtc->dev; in drm_helper_choose_crtc_dpms()
837 if (connector->encoder && connector->encoder->crtc == crtc) in drm_helper_choose_crtc_dpms()
856 struct drm_crtc *crtc = encoder ? encoder->crtc : NULL; in drm_helper_connector_dpms() local
867 if (crtc) { in drm_helper_connector_dpms()
868 struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; in drm_helper_connector_dpms()
870 (*crtc_funcs->dpms) (crtc, in drm_helper_connector_dpms()
871 drm_helper_choose_crtc_dpms(crtc)); in drm_helper_connector_dpms()
889 if (crtc) { in drm_helper_connector_dpms()
890 struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; in drm_helper_connector_dpms()
892 (*crtc_funcs->dpms) (crtc, in drm_helper_connector_dpms()
893 drm_helper_choose_crtc_dpms(crtc)); in drm_helper_connector_dpms()
922 struct drm_crtc *crtc; in drm_helper_resume_force_mode() local
928 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { in drm_helper_resume_force_mode()
930 if (!crtc->enabled) in drm_helper_resume_force_mode()
933 ret = drm_crtc_helper_set_mode(crtc, &crtc->mode, in drm_helper_resume_force_mode()
934 crtc->x, crtc->y, crtc->fb); in drm_helper_resume_force_mode()
937 DRM_ERROR("failed to set mode on crtc %p\n", crtc); in drm_helper_resume_force_mode()
940 if (drm_helper_choose_crtc_dpms(crtc)) { in drm_helper_resume_force_mode()
943 if(encoder->crtc != crtc) in drm_helper_resume_force_mode()
952 crtc_funcs = crtc->helper_private; in drm_helper_resume_force_mode()
954 (*crtc_funcs->dpms) (crtc, in drm_helper_resume_force_mode()
955 drm_helper_choose_crtc_dpms(crtc)); in drm_helper_resume_force_mode()