From fda1ffb07e17469771bba7a8d53fd44c43ee3333 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Thu, 11 Sep 2014 08:11:34 +0100 Subject: [PATCH] sna: Request the backlight to be disabled along with DPMS off When we turn off the screen, either at the user request or when disabling an output, request that the associated backlight (which may only be known to userspace) also be disabled. Signed-off-by: Chris Wilson --- src/sna/sna_display.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c index 6e80d1bd..f136c20a 100644 --- a/src/sna/sna_display.c +++ b/src/sna/sna_display.c @@ -624,6 +624,31 @@ sna_output_backlight_set(struct sna_output *sna_output, int level) return ret; } +static void +sna_output_backlight_off(struct sna_output *sna_output) +{ + DBG(("%s(%s)\n", __FUNCTION__, output->name)); + backlight_off(&sna_output->backlight); + sna_output_backlight_set(sna_output, 0); +} + +static void +sna_output_backlight_on(struct sna_output *sna_output) +{ + DBG(("%s(%s)\n", __FUNCTION__, output->name)); + sna_output_backlight_set(sna_output, + sna_output->backlight_active_level); + if (backlight_on(&sna_output->backlight) < 0) { + xf86OutputPtr output = sna_output->base; + + backlight_disable(&sna_output->backlight); + if (output->randr_output) { + RRDeleteOutputProperty(output->randr_output, backlight_atom); + RRDeleteOutputProperty(output->randr_output, backlight_deprecated_atom); + } + } +} + static int sna_output_backlight_get(xf86OutputPtr output) { @@ -3001,7 +3026,7 @@ sna_output_dpms(xf86OutputPtr output, int dpms) __FUNCTION__, sna_output->backlight_active_level)); } sna_output->dpms_mode = dpms; - sna_output_backlight_set(sna_output, 0); + sna_output_backlight_off(sna_output); } if (output->crtc && @@ -3014,8 +3039,7 @@ sna_output_dpms(xf86OutputPtr output, int dpms) if (sna_output->backlight.iface && dpms == DPMSModeOn) { DBG(("%s: restoring previous backlight %d\n", __FUNCTION__, sna_output->backlight_active_level)); - sna_output_backlight_set(sna_output, - sna_output->backlight_active_level); + sna_output_backlight_on(sna_output); } sna_output->dpms_mode = dpms;