diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2014-09-11 08:11:34 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2014-09-11 08:11:34 +0100 |
commit | fda1ffb07e17469771bba7a8d53fd44c43ee3333 (patch) | |
tree | b4278bd9132ed82428baedaf1040c575623ce357 | |
parent | 08921e4bda0114c66270e500090e4cfd29f74d39 (diff) |
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 <chris@chris-wilson.co.uk>
-rw-r--r-- | src/sna/sna_display.c | 30 |
1 files 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; |