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,
351 crtc->base.id, crtc->name);
355 drm_dbg_kms(dev, "[CRTC:%d:%s]\n", crtc->base.id, crtc->name);
357 drm_mode_copy(&crtc->hwmode, adjusted_mode);
362 if (encoder->crtc != crtc)
376 crtc_funcs->prepare(crtc);
381 ret = !crtc_funcs->mode_set(crtc, mode, adjusted_mode, x, y, old_fb);
387 if (encoder->crtc != crtc)
401 crtc_funcs->commit(crtc);
405 if (encoder->crtc != crtc)
420 drm_calc_timestamping_constants(crtc, &crtc->hwmode);
426 crtc->enabled = saved_enabled;
427 drm_mode_copy(&crtc->mode, &saved_mode);
428 drm_mode_copy(&crtc->hwmode, &saved_hwmode);
429 crtc->x = saved_x;
430 crtc->y = saved_y;
439 * @crtc: CRTC to check
449 int drm_crtc_helper_atomic_check(struct drm_crtc *crtc, struct drm_atomic_state *state)
451 struct drm_crtc_state *new_crtc_state = drm_atomic_get_new_crtc_state(state, crtc);
461 drm_crtc_helper_disable(struct drm_crtc *crtc)
463 struct drm_device *dev = crtc->dev;
467 /* Decouple all encoders and their attached connectors from this crtc */
471 if (encoder->crtc != crtc)
569 BUG_ON(!set->crtc);
570 BUG_ON(!set->crtc->helper_private);
576 crtc_funcs = set->crtc->helper_private;
578 dev = set->crtc->dev;
589 set->crtc->base.id, set->crtc->name,
594 set->crtc->base.id, set->crtc->name);
595 drm_crtc_helper_disable(set->crtc);
624 save_encoder_crtcs[count++] = encoder->crtc;
633 save_set.crtc = set->crtc;
634 save_set.mode = &set->crtc->mode;
635 save_set.x = set->crtc->x;
636 save_set.y = set->crtc->y;
637 save_set.fb = set->crtc->primary->fb;
641 if (set->crtc->primary->fb != set->fb) {
643 if (set->crtc->primary->fb == NULL) {
645 set->crtc->base.id, set->crtc->name);
647 } else if (set->fb->format != set->crtc->primary->fb->format) {
653 if (set->x != set->crtc->x || set->y != set->crtc->y)
656 if (!drm_mode_equal(set->mode, &set->crtc->mode)) {
658 set->crtc->base.id, set->crtc->name);
659 drm_dbg_kms(dev, DRM_MODE_FMT "\n", DRM_MODE_ARG(&set->crtc->mode));
708 * the appropriate crtc will be set later.
711 connector->encoder->crtc = NULL;
728 if (connector->encoder->crtc == set->crtc)
731 new_crtc = connector->encoder->crtc;
735 new_crtc = set->crtc;
745 if (new_crtc != connector->encoder->crtc) {
749 connector->encoder->crtc = new_crtc;
767 if (drm_helper_crtc_in_use(set->crtc)) {
769 set->crtc->base.id, set->crtc->name, DRM_MODE_ARG(set->mode));
770 set->crtc->primary->fb = set->fb;
771 if (!drm_crtc_helper_set_mode(set->crtc, set->mode,
775 set->crtc->base.id, set->crtc->name);
776 set->crtc->primary->fb = save_set.fb;
781 set->crtc->base.id, set->crtc->name);
790 set->crtc->x = set->x;
791 set->crtc->y = set->y;
792 set->crtc->primary->fb = set->fb;
793 ret = crtc_funcs->mode_set_base(set->crtc,
796 set->crtc->x = save_set.x;
797 set->crtc->y = save_set.y;
798 set->crtc->primary->fb = save_set.fb;
811 encoder->crtc = save_encoder_crtcs[count++];
831 !drm_crtc_helper_set_mode(save_set.crtc, save_set.mode, save_set.x,
871 static int drm_helper_choose_crtc_dpms(struct drm_crtc *crtc)
876 struct drm_device *dev = crtc->dev;
880 if (connector->encoder && connector->encoder->crtc == crtc)
912 struct drm_crtc *crtc = encoder ? encoder->crtc : NULL;
926 /* from off to on, do crtc then encoder */
928 if (crtc) {
929 const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
932 (*crtc_funcs->dpms) (crtc,
933 drm_helper_choose_crtc_dpms(crtc));
939 /* from on to off, do encoder then crtc */
943 if (crtc) {
944 const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
947 (*crtc_funcs->dpms) (crtc,
948 drm_helper_choose_crtc_dpms(crtc));
984 struct drm_crtc *crtc;
993 drm_for_each_crtc(crtc, dev) {
995 if (!crtc->enabled)
998 ret = drm_crtc_helper_set_mode(crtc, &crtc->mode,
999 crtc->x, crtc->y, crtc->primary->fb);
1003 drm_err(dev, "failed to set mode on crtc %p\n", crtc);
1006 if (drm_helper_choose_crtc_dpms(crtc)) {
1009 if(encoder->crtc != crtc)
1018 crtc_funcs = crtc->helper_private;
1020 (*crtc_funcs->dpms) (crtc,
1021 drm_helper_choose_crtc_dpms(crtc));
1046 struct drm_crtc *crtc;
1050 drm_for_each_crtc(crtc, dev)
1051 if (crtc->enabled) {
1053 .crtc = crtc,