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>
This commit is contained in:
Chris Wilson 2014-09-11 08:11:34 +01:00
parent 08921e4bda
commit fda1ffb07e
1 changed files with 27 additions and 3 deletions

View File

@ -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;