From: Dave Airlie <airl...@redhat.com> This will detach any scanout pixmaps attached to slave crtcs.
Signed-off-by: Dave Airlie <airl...@redhat.com> --- hw/xfree86/modes/xf86Crtc.c | 20 ++++++++++++++++++++ hw/xfree86/modes/xf86Crtc.h | 3 +++ 2 files changed, 23 insertions(+) diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c index 238fb91..68291c4 100644 --- a/hw/xfree86/modes/xf86Crtc.c +++ b/hw/xfree86/modes/xf86Crtc.c @@ -3248,3 +3248,23 @@ xf86SetCurrentRole(ScrnInfoPtr scrn, uint32_t role) RRProviderSetCurrentRole(config->provider->randr_provider, scrn->current_role); } +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 ae4b5e0..662157b 100644 --- a/hw/xfree86/modes/xf86Crtc.h +++ b/hw/xfree86/modes/xf86Crtc.h @@ -1038,4 +1038,7 @@ xf86ProviderCreate(ScrnInfoPtr scrn, extern _X_EXPORT void xf86SetCurrentRole(ScrnInfoPtr scrn, uint32_t role); +extern _X_EXPORT void +xf86DetachAllCrtc(ScrnInfoPtr scrn); + #endif /* _XF86CRTC_H_ */ -- 1.7.10.2 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel