diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c index 31efd83f6569704a4d2793ca3e111fc69616113c..6a005cd7bbb0edea88a35cd8588f2b236f5e1738 100644 --- a/hw/xfree86/modes/xf86Crtc.c +++ b/hw/xfree86/modes/xf86Crtc.c @@ -3228,3 +3228,23 @@ xf86ProviderSetup(ScrnInfoPtr scrn, #endif } +void +xf86DetachAllCrtc(ScrnInfoPtr scrn) +{ + xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); + int i; + + for (i = 0; i < xf86_config->num_crtc; i++) { + xf86CrtcPtr crtc = xf86_config->crtc[i]; + + if (crtc->randr_crtc) + RRCrtcDetachScanoutPixmap(crtc->randr_crtc); + + /* dpms off */ + (*crtc->funcs->dpms) (crtc, DPMSModeOff); + /* force a reset the next time its used */ + crtc->randr_crtc->mode = NULL; + crtc->mode.HDisplay = 0; + crtc->x = crtc->y = 0; + } +} diff --git a/hw/xfree86/modes/xf86Crtc.h b/hw/xfree86/modes/xf86Crtc.h index 25fb34d721c8c0280480451236739327d0d68003..38b9ea58a5fcbf1f9e1bceadc503c9c90f38ce1c 100644 --- a/hw/xfree86/modes/xf86Crtc.h +++ b/hw/xfree86/modes/xf86Crtc.h @@ -1014,4 +1014,7 @@ extern _X_EXPORT void xf86ProviderSetup(ScrnInfoPtr scrn, const xf86ProviderFuncsRec * funcs, const char *name); +extern _X_EXPORT void +xf86DetachAllCrtc(ScrnInfoPtr scrn); + #endif /* _XF86CRTC_H_ */