xfree86: Disable cursor whenever turning off CRTC during modeset
This makes sure the CRTC's cursor is hidden before we hand the CRTC over to some other application. Signed-off-by: Keith Packard <keithp@keithp.com> Reviewed-by: Michel Dänzer <michel.daenzer@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
29f79bedf2
commit
4d5aab66c0
|
@ -2651,6 +2651,14 @@ xf86InitialConfiguration(ScrnInfoPtr scrn, Bool canGrow)
|
|||
return success;
|
||||
}
|
||||
|
||||
/* Turn a CRTC off, using the DPMS function and disabling the cursor */
|
||||
static void
|
||||
xf86DisableCrtc(xf86CrtcPtr crtc)
|
||||
{
|
||||
crtc->funcs->dpms(crtc, DPMSModeOff);
|
||||
xf86_crtc_hide_cursor(crtc);
|
||||
}
|
||||
|
||||
/*
|
||||
* Check the CRTC we're going to map each output to vs. it's current
|
||||
* CRTC. If they don't match, we have to disable the output and the CRTC
|
||||
|
@ -2706,9 +2714,9 @@ xf86PrepareCrtcs(ScrnInfoPtr scrn)
|
|||
* we need to disable it
|
||||
*/
|
||||
if (desired_outputs != current_outputs || !desired_outputs)
|
||||
(*crtc->funcs->dpms) (crtc, DPMSModeOff);
|
||||
xf86DisableCrtc(crtc);
|
||||
#else
|
||||
(*crtc->funcs->dpms) (crtc, DPMSModeOff);
|
||||
xf86DisableCrtc(crtc);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
@ -3004,7 +3012,7 @@ xf86DisableUnusedFunctions(ScrnInfoPtr pScrn)
|
|||
xf86CrtcPtr crtc = xf86_config->crtc[c];
|
||||
|
||||
if (!crtc->enabled) {
|
||||
crtc->funcs->dpms(crtc, DPMSModeOff);
|
||||
xf86DisableCrtc(crtc);
|
||||
memset(&crtc->mode, 0, sizeof(crtc->mode));
|
||||
xf86RotateDestroy(crtc);
|
||||
crtc->active = FALSE;
|
||||
|
@ -3455,7 +3463,7 @@ xf86DetachAllCrtc(ScrnInfoPtr scrn)
|
|||
RRCrtcDetachScanoutPixmap(crtc->randr_crtc);
|
||||
|
||||
/* dpms off */
|
||||
(*crtc->funcs->dpms) (crtc, DPMSModeOff);
|
||||
xf86DisableCrtc(crtc);
|
||||
/* force a reset the next time its used */
|
||||
crtc->randr_crtc->mode = NULL;
|
||||
crtc->mode.HDisplay = 0;
|
||||
|
|
|
@ -998,6 +998,12 @@ static _X_INLINE _X_DEPRECATED void xf86_reload_cursors(ScreenPtr screen) {}
|
|||
extern _X_EXPORT Bool
|
||||
xf86_show_cursors(ScrnInfoPtr scrn);
|
||||
|
||||
/**
|
||||
* Called by the driver to turn a single crtc's cursor off
|
||||
*/
|
||||
extern _X_EXPORT void
|
||||
xf86_crtc_hide_cursor(xf86CrtcPtr crtc);
|
||||
|
||||
/**
|
||||
* Called by the driver to turn cursors off
|
||||
*/
|
||||
|
|
|
@ -320,7 +320,7 @@ xf86_set_cursor_colors(ScrnInfoPtr scrn, int bg, int fg)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
xf86_crtc_hide_cursor(xf86CrtcPtr crtc)
|
||||
{
|
||||
if (crtc->cursor_shown) {
|
||||
|
|
Loading…
Reference in New Issue