Resotre LCD brightness level on resuming.

MFC after:	3 days
This commit is contained in:
Mitsuru IWASAKI 2012-06-17 16:19:09 +00:00
parent f39e915e19
commit 5e33d57ff1

View File

@ -75,6 +75,7 @@ static void acpi_video_identify(driver_t *driver, device_t parent);
static int acpi_video_probe(device_t);
static int acpi_video_attach(device_t);
static int acpi_video_detach(device_t);
static int acpi_video_resume(device_t);
static int acpi_video_shutdown(device_t);
static void acpi_video_notify_handler(ACPI_HANDLE, UINT32, void *);
static void acpi_video_power_profile(void *);
@ -155,6 +156,7 @@ static device_method_t acpi_video_methods[] = {
DEVMETHOD(device_probe, acpi_video_probe),
DEVMETHOD(device_attach, acpi_video_attach),
DEVMETHOD(device_detach, acpi_video_detach),
DEVMETHOD(device_resume, acpi_video_resume),
DEVMETHOD(device_shutdown, acpi_video_shutdown),
{ 0, 0 }
};
@ -304,6 +306,36 @@ acpi_video_detach(device_t dev)
return (0);
}
static int
acpi_video_resume(device_t dev)
{
struct acpi_video_softc *sc;
struct acpi_video_output *vo, *vn;
int level;
sc = device_get_softc(dev);
/* Restore brightness level */
ACPI_SERIAL_BEGIN(video);
ACPI_SERIAL_BEGIN(video_output);
STAILQ_FOREACH_SAFE(vo, &sc->vid_outputs, vo_next, vn) {
if ((vo->adr & DOD_DEVID_MASK_FULL) != DOD_DEVID_LCD &&
(vo->adr & DOD_DEVID_MASK) != DOD_DEVID_INTDFP)
continue;
if ((vo_get_device_status(vo->handle) & DCS_ACTIVE) == 0)
continue;
level = vo_get_brightness(vo->handle);
if (level != -1)
vo_set_brightness(vo->handle, level);
}
ACPI_SERIAL_END(video_output);
ACPI_SERIAL_END(video);
return (0);
}
static int
acpi_video_shutdown(device_t dev)
{