Lines Matching refs:crtc
119 bool drm_helper_crtc_in_use(struct drm_crtc *crtc) in drm_helper_crtc_in_use() argument
122 struct drm_device *dev = crtc->dev; in drm_helper_crtc_in_use()
132 if (encoder->crtc == crtc && drm_helper_encoder_in_use(encoder)) in drm_helper_crtc_in_use()
158 struct drm_crtc *crtc; in __drm_helper_disable_unused_functions() local
166 encoder->crtc = NULL; in __drm_helper_disable_unused_functions()
170 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { in __drm_helper_disable_unused_functions()
171 struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; in __drm_helper_disable_unused_functions()
172 crtc->enabled = drm_helper_crtc_in_use(crtc); in __drm_helper_disable_unused_functions()
173 if (!crtc->enabled) { in __drm_helper_disable_unused_functions()
175 (*crtc_funcs->disable)(crtc); in __drm_helper_disable_unused_functions()
177 (*crtc_funcs->dpms)(crtc, DRM_MODE_DPMS_OFF); in __drm_helper_disable_unused_functions()
178 crtc->primary->fb = NULL; in __drm_helper_disable_unused_functions()
215 if (encoder->crtc == NULL) in drm_crtc_prepare_encoders()
219 encoder->crtc != (*encoder_funcs->get_crtc)(encoder)) in drm_crtc_prepare_encoders()
244 bool drm_crtc_helper_set_mode(struct drm_crtc *crtc, in drm_crtc_helper_set_mode() argument
249 struct drm_device *dev = crtc->dev; in drm_crtc_helper_set_mode()
251 struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; in drm_crtc_helper_set_mode()
260 saved_enabled = crtc->enabled; in drm_crtc_helper_set_mode()
261 crtc->enabled = drm_helper_crtc_in_use(crtc); in drm_crtc_helper_set_mode()
262 if (!crtc->enabled) in drm_crtc_helper_set_mode()
267 crtc->enabled = saved_enabled; in drm_crtc_helper_set_mode()
271 saved_mode = crtc->mode; in drm_crtc_helper_set_mode()
272 saved_x = crtc->x; in drm_crtc_helper_set_mode()
273 saved_y = crtc->y; in drm_crtc_helper_set_mode()
278 crtc->mode = *mode; in drm_crtc_helper_set_mode()
279 crtc->x = x; in drm_crtc_helper_set_mode()
280 crtc->y = y; in drm_crtc_helper_set_mode()
288 if (encoder->crtc != crtc) in drm_crtc_helper_set_mode()
308 if (!(ret = crtc_funcs->mode_fixup(crtc, mode, adjusted_mode))) { in drm_crtc_helper_set_mode()
312 DRM_DEBUG_KMS("[CRTC:%d]\n", crtc->base.id); in drm_crtc_helper_set_mode()
317 if (encoder->crtc != crtc) in drm_crtc_helper_set_mode()
333 crtc_funcs->prepare(crtc); in drm_crtc_helper_set_mode()
338 ret = !crtc_funcs->mode_set(crtc, mode, adjusted_mode, x, y, old_fb); in drm_crtc_helper_set_mode()
344 if (encoder->crtc != crtc) in drm_crtc_helper_set_mode()
359 crtc_funcs->commit(crtc); in drm_crtc_helper_set_mode()
363 if (encoder->crtc != crtc) in drm_crtc_helper_set_mode()
377 crtc->hwmode = *adjusted_mode; in drm_crtc_helper_set_mode()
383 drm_calc_timestamping_constants(crtc, &crtc->hwmode); in drm_crtc_helper_set_mode()
389 crtc->enabled = saved_enabled; in drm_crtc_helper_set_mode()
390 crtc->mode = saved_mode; in drm_crtc_helper_set_mode()
391 crtc->x = saved_x; in drm_crtc_helper_set_mode()
392 crtc->y = saved_y; in drm_crtc_helper_set_mode()
400 drm_crtc_helper_disable(struct drm_crtc *crtc) in drm_crtc_helper_disable() argument
402 struct drm_device *dev = crtc->dev; in drm_crtc_helper_disable()
408 if (encoder->crtc != crtc) in drm_crtc_helper_disable()
460 BUG_ON(!set->crtc); in drm_crtc_helper_set_config()
461 BUG_ON(!set->crtc->helper_private); in drm_crtc_helper_set_config()
467 crtc_funcs = set->crtc->helper_private; in drm_crtc_helper_set_config()
474 set->crtc->base.id, set->fb->base.id, in drm_crtc_helper_set_config()
477 DRM_DEBUG_KMS("[CRTC:%d] [NOFB]\n", set->crtc->base.id); in drm_crtc_helper_set_config()
478 drm_crtc_helper_disable(set->crtc); in drm_crtc_helper_set_config()
482 dev = set->crtc->dev; in drm_crtc_helper_set_config()
517 save_set.crtc = set->crtc; in drm_crtc_helper_set_config()
518 save_set.mode = &set->crtc->mode; in drm_crtc_helper_set_config()
519 save_set.x = set->crtc->x; in drm_crtc_helper_set_config()
520 save_set.y = set->crtc->y; in drm_crtc_helper_set_config()
521 save_set.fb = set->crtc->primary->fb; in drm_crtc_helper_set_config()
525 if (set->crtc->primary->fb != set->fb) { in drm_crtc_helper_set_config()
527 if (set->crtc->primary->fb == NULL) { in drm_crtc_helper_set_config()
533 set->crtc->primary->fb->pixel_format) { in drm_crtc_helper_set_config()
539 if (set->x != set->crtc->x || set->y != set->crtc->y) in drm_crtc_helper_set_config()
542 if (set->mode && !drm_mode_equal(set->mode, &set->crtc->mode)) { in drm_crtc_helper_set_config()
544 drm_mode_debug_printmodeline(&set->crtc->mode); in drm_crtc_helper_set_config()
580 connector->encoder->crtc = NULL; in drm_crtc_helper_set_config()
595 if (connector->encoder->crtc == set->crtc) in drm_crtc_helper_set_config()
598 new_crtc = connector->encoder->crtc; in drm_crtc_helper_set_config()
602 new_crtc = set->crtc; in drm_crtc_helper_set_config()
611 if (new_crtc != connector->encoder->crtc) { in drm_crtc_helper_set_config()
614 connector->encoder->crtc = new_crtc; in drm_crtc_helper_set_config()
631 if (drm_helper_crtc_in_use(set->crtc)) { in drm_crtc_helper_set_config()
635 set->crtc->primary->fb = set->fb; in drm_crtc_helper_set_config()
636 if (!drm_crtc_helper_set_mode(set->crtc, set->mode, in drm_crtc_helper_set_config()
640 set->crtc->base.id); in drm_crtc_helper_set_config()
641 set->crtc->primary->fb = save_set.fb; in drm_crtc_helper_set_config()
654 set->crtc->x = set->x; in drm_crtc_helper_set_config()
655 set->crtc->y = set->y; in drm_crtc_helper_set_config()
656 set->crtc->primary->fb = set->fb; in drm_crtc_helper_set_config()
657 ret = crtc_funcs->mode_set_base(set->crtc, in drm_crtc_helper_set_config()
660 set->crtc->x = save_set.x; in drm_crtc_helper_set_config()
661 set->crtc->y = save_set.y; in drm_crtc_helper_set_config()
662 set->crtc->primary->fb = save_set.fb; in drm_crtc_helper_set_config()
685 !drm_crtc_helper_set_mode(save_set.crtc, save_set.mode, save_set.x, in drm_crtc_helper_set_config()
733 static int drm_helper_choose_crtc_dpms(struct drm_crtc *crtc) in drm_helper_choose_crtc_dpms() argument
737 struct drm_device *dev = crtc->dev; in drm_helper_choose_crtc_dpms()
740 if (connector->encoder && connector->encoder->crtc == crtc) in drm_helper_choose_crtc_dpms()
759 struct drm_crtc *crtc = encoder ? encoder->crtc : NULL; in drm_helper_connector_dpms() local
773 if (crtc) { in drm_helper_connector_dpms()
774 struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; in drm_helper_connector_dpms()
776 (*crtc_funcs->dpms) (crtc, in drm_helper_connector_dpms()
777 drm_helper_choose_crtc_dpms(crtc)); in drm_helper_connector_dpms()
787 if (crtc) { in drm_helper_connector_dpms()
788 struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; in drm_helper_connector_dpms()
790 (*crtc_funcs->dpms) (crtc, in drm_helper_connector_dpms()
791 drm_helper_choose_crtc_dpms(crtc)); in drm_helper_connector_dpms()
847 struct drm_crtc *crtc; in drm_helper_resume_force_mode() local
854 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { in drm_helper_resume_force_mode()
856 if (!crtc->enabled) in drm_helper_resume_force_mode()
859 ret = drm_crtc_helper_set_mode(crtc, &crtc->mode, in drm_helper_resume_force_mode()
860 crtc->x, crtc->y, crtc->primary->fb); in drm_helper_resume_force_mode()
864 DRM_ERROR("failed to set mode on crtc %p\n", crtc); in drm_helper_resume_force_mode()
867 if (drm_helper_choose_crtc_dpms(crtc)) { in drm_helper_resume_force_mode()
870 if(encoder->crtc != crtc) in drm_helper_resume_force_mode()
879 crtc_funcs = crtc->helper_private; in drm_helper_resume_force_mode()
881 (*crtc_funcs->dpms) (crtc, in drm_helper_resume_force_mode()
882 drm_helper_choose_crtc_dpms(crtc)); in drm_helper_resume_force_mode()