Lines Matching refs:crtc

139  * @crtc: CRTC to check
141 * Checks whether @crtc is with the current mode setting output configuration
146 * True if @crtc is used, false otherwise.
148 bool drm_helper_crtc_in_use(struct drm_crtc *crtc)
151 struct drm_device *dev = crtc->dev;
163 if (encoder->crtc == crtc && drm_helper_encoder_in_use(encoder))
186 struct drm_crtc *crtc;
194 encoder->crtc = NULL;
198 drm_for_each_crtc(crtc, dev) {
199 const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
201 crtc->enabled = drm_helper_crtc_in_use(crtc);
202 if (!crtc->enabled) {
204 (*crtc_funcs->disable)(crtc);
206 (*crtc_funcs->dpms)(crtc, DRM_MODE_DPMS_OFF);
207 crtc->primary->fb = NULL;
258 if (encoder->crtc == NULL)
265 * @crtc: CRTC to program
271 * Try to set @mode on @crtc. Give @crtc and its associated connectors a chance
283 bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
288 struct drm_device *dev = crtc->dev;
290 const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
301 saved_enabled = crtc->enabled;
302 crtc->enabled = drm_helper_crtc_in_use(crtc);
303 if (!crtc->enabled)
308 crtc->enabled = saved_enabled;
312 drm_mode_init(&saved_mode, &crtc->mode);
313 drm_mode_init(&saved_hwmode, &crtc->hwmode);
314 saved_x = crtc->x;
315 saved_y = crtc->y;
317 /* Update crtc values up front so the driver can rely on them for mode
320 drm_mode_copy(&crtc->mode, mode);
321 crtc->x = x;
322 crtc->y = y;
330 if (encoder->crtc != crtc)
348 if (!(ret = crtc_funcs->mode_fixup(crtc, mode,
354 DRM_DEBUG_KMS("[CRTC:%d:%s]\n", crtc->base.id, crtc->name);
356 drm_mode_copy(&crtc->hwmode, adjusted_mode);
361 if (encoder->crtc != crtc)
375 crtc_funcs->prepare(crtc);
380 ret = !crtc_funcs->mode_set(crtc, mode, adjusted_mode, x, y, old_fb);
386 if (encoder->crtc != crtc)
400 crtc_funcs->commit(crtc);
404 if (encoder->crtc != crtc)
419 drm_calc_timestamping_constants(crtc, &crtc->hwmode);
425 crtc->enabled = saved_enabled;
426 drm_mode_copy(&crtc->mode, &saved_mode);
427 drm_mode_copy(&crtc->hwmode, &saved_hwmode);
428 crtc->x = saved_x;
429 crtc->y = saved_y;
438 * @crtc: CRTC to check
448 int drm_crtc_helper_atomic_check(struct drm_crtc *crtc, struct drm_atomic_state *state)
450 struct drm_crtc_state *new_crtc_state = drm_atomic_get_new_crtc_state(state, crtc);
460 drm_crtc_helper_disable(struct drm_crtc *crtc)
462 struct drm_device *dev = crtc->dev;
466 /* Decouple all encoders and their attached connectors from this crtc */
470 if (encoder->crtc != crtc)
570 BUG_ON(!set->crtc);
571 BUG_ON(!set->crtc->helper_private);
577 crtc_funcs = set->crtc->helper_private;
579 dev = set->crtc->dev;
587 set->crtc->base.id, set->crtc->name,
592 set->crtc->base.id, set->crtc->name);
593 drm_crtc_helper_disable(set->crtc);
622 save_encoder_crtcs[count++] = encoder->crtc;
631 save_set.crtc = set->crtc;
632 save_set.mode = &set->crtc->mode;
633 save_set.x = set->crtc->x;
634 save_set.y = set->crtc->y;
635 save_set.fb = set->crtc->primary->fb;
639 if (set->crtc->primary->fb != set->fb) {
641 if (set->crtc->primary->fb == NULL) {
642 DRM_DEBUG_KMS("crtc has no fb, full mode set\n");
644 } else if (set->fb->format != set->crtc->primary->fb->format) {
650 if (set->x != set->crtc->x || set->y != set->crtc->y)
653 if (!drm_mode_equal(set->mode, &set->crtc->mode)) {
655 drm_mode_debug_printmodeline(&set->crtc->mode);
702 * the appropriate crtc will be set later.
705 connector->encoder->crtc = NULL;
722 if (connector->encoder->crtc == set->crtc)
725 new_crtc = connector->encoder->crtc;
729 new_crtc = set->crtc;
739 if (new_crtc != connector->encoder->crtc) {
740 DRM_DEBUG_KMS("crtc changed, full mode switch\n");
742 connector->encoder->crtc = new_crtc;
760 if (drm_helper_crtc_in_use(set->crtc)) {
764 set->crtc->primary->fb = set->fb;
765 if (!drm_crtc_helper_set_mode(set->crtc, set->mode,
769 set->crtc->base.id, set->crtc->name);
770 set->crtc->primary->fb = save_set.fb;
783 set->crtc->x = set->x;
784 set->crtc->y = set->y;
785 set->crtc->primary->fb = set->fb;
786 ret = crtc_funcs->mode_set_base(set->crtc,
789 set->crtc->x = save_set.x;
790 set->crtc->y = save_set.y;
791 set->crtc->primary->fb = save_set.fb;
804 encoder->crtc = save_encoder_crtcs[count++];
824 !drm_crtc_helper_set_mode(save_set.crtc, save_set.mode, save_set.x,
864 static int drm_helper_choose_crtc_dpms(struct drm_crtc *crtc)
869 struct drm_device *dev = crtc->dev;
873 if (connector->encoder && connector->encoder->crtc == crtc)
905 struct drm_crtc *crtc = encoder ? encoder->crtc : NULL;
919 /* from off to on, do crtc then encoder */
921 if (crtc) {
922 const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
925 (*crtc_funcs->dpms) (crtc,
926 drm_helper_choose_crtc_dpms(crtc));
932 /* from on to off, do encoder then crtc */
936 if (crtc) {
937 const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
940 (*crtc_funcs->dpms) (crtc,
941 drm_helper_choose_crtc_dpms(crtc));
977 struct drm_crtc *crtc;
986 drm_for_each_crtc(crtc, dev) {
988 if (!crtc->enabled)
991 ret = drm_crtc_helper_set_mode(crtc, &crtc->mode,
992 crtc->x, crtc->y, crtc->primary->fb);
996 DRM_ERROR("failed to set mode on crtc %p\n", crtc);
999 if (drm_helper_choose_crtc_dpms(crtc)) {
1002 if(encoder->crtc != crtc)
1011 crtc_funcs = crtc->helper_private;
1013 (*crtc_funcs->dpms) (crtc,
1014 drm_helper_choose_crtc_dpms(crtc));
1039 struct drm_crtc *crtc;
1043 drm_for_each_crtc(crtc, dev)
1044 if (crtc->enabled) {
1046 .crtc = crtc,