summaryrefslogtreecommitdiff
path: root/src/drmmode_display.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/drmmode_display.c')
-rw-r--r--src/drmmode_display.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index bd8e701f..c366203d 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -247,7 +247,7 @@ int drmmode_get_current_ust(int drm_fd, CARD64 *ust)
}
static void
-drmmode_crtc_dpms(xf86CrtcPtr crtc, int mode)
+drmmode_do_crtc_dpms(xf86CrtcPtr crtc, int mode)
{
drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
ScrnInfoPtr scrn = crtc->scrn;
@@ -308,6 +308,12 @@ drmmode_crtc_dpms(xf86CrtcPtr crtc, int mode)
drmmode_crtc->dpms_mode = mode;
}
+static void
+drmmode_crtc_dpms(xf86CrtcPtr crtc, int mode)
+{
+ /* Nothing to do. drmmode_do_crtc_dpms() is called as appropriate */
+}
+
static PixmapPtr
create_pixmap_for_fbcon(drmmode_ptr drmmode,
ScrnInfoPtr pScrn, int fbcon_id)
@@ -973,9 +979,14 @@ drmmode_output_dpms(xf86OutputPtr output, int mode)
drmModeConnectorPtr koutput = drmmode_output->mode_output;
drmmode_ptr drmmode = drmmode_output->drmmode;
+ if (mode != DPMSModeOn && output->crtc)
+ drmmode_do_crtc_dpms(output->crtc, mode);
+
drmModeConnectorSetProperty(drmmode->fd, koutput->connector_id,
drmmode_output->dpms_enum_id, mode);
- return;
+
+ if (mode == DPMSModeOn && output->crtc)
+ drmmode_do_crtc_dpms(output->crtc, mode);
}
@@ -1833,6 +1844,7 @@ Bool drmmode_set_desired_modes(ScrnInfoPtr pScrn, drmmode_ptr drmmode)
/* Skip disabled CRTCs */
if (!crtc->enabled) {
+ drmmode_do_crtc_dpms(crtc, DPMSModeOff);
drmModeSetCrtc(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id,
0, 0, 0, NULL, 0, NULL);
continue;