svn commit: r203935 - head/sys/dev/acpica
Jung-uk Kim
jkim at FreeBSD.org
Mon Feb 15 19:30:29 UTC 2010
Author: jkim
Date: Mon Feb 15 19:30:28 2010
New Revision: 203935
URL: http://svn.freebsd.org/changeset/base/203935
Log:
Add support for `cycle' and `zero' events for LCD brightness control.
Submitted by: Daniel Walter (d dot walter at 0x90 dot at) (intial version)
Modified:
head/sys/dev/acpica/acpi_video.c
Modified: head/sys/dev/acpica/acpi_video.c
==============================================================================
--- head/sys/dev/acpica/acpi_video.c Mon Feb 15 19:18:46 2010 (r203934)
+++ head/sys/dev/acpica/acpi_video.c Mon Feb 15 19:30:28 2010 (r203935)
@@ -103,8 +103,10 @@ static void vo_set_device_state(ACPI_HAN
/* events */
#define VID_NOTIFY_SWITCHED 0x80
#define VID_NOTIFY_REPROBE 0x81
+#define VID_NOTIFY_CYC_BRN 0x85
#define VID_NOTIFY_INC_BRN 0x86
#define VID_NOTIFY_DEC_BRN 0x87
+#define VID_NOTIFY_ZRO_BRN 0x88
/* _DOS (Enable/Disable Output Switching) argument bits */
#define DOS_SWITCH_MASK 3
@@ -645,20 +647,41 @@ acpi_video_vo_notify_handler(ACPI_HANDLE
vo = context;
ACPI_SERIAL_BEGIN(video_output);
- if (vo->handle != handle) {
- ACPI_SERIAL_END(video_output);
- return;
- }
+ if (vo->handle != handle)
+ goto out;
switch (notify) {
+ case VID_NOTIFY_CYC_BRN:
+ if (vo->vo_numlevels <= 3)
+ goto out;
+ /* FALLTHROUGH */
case VID_NOTIFY_INC_BRN:
case VID_NOTIFY_DEC_BRN:
+ case VID_NOTIFY_ZRO_BRN:
if (vo->vo_levels == NULL)
- break;
+ goto out;
level = vo_get_brightness(handle);
if (level < 0)
- break;
- new_level = level;
+ goto out;
+ break;
+ default:
+ printf("unknown notify event 0x%x from %s\n",
+ notify, acpi_name(handle));
+ goto out;
+ }
+
+ new_level = level;
+ switch (notify) {
+ case VID_NOTIFY_CYC_BRN:
+ for (i = 2; i < vo->vo_numlevels; i++)
+ if (vo->vo_levels[i] == level) {
+ new_level = vo->vo_numlevels > i + 1 ?
+ vo->vo_levels[i + 1] : vo->vo_levels[2];
+ break;
+ }
+ break;
+ case VID_NOTIFY_INC_BRN:
+ case VID_NOTIFY_DEC_BRN:
for (i = 0; i < vo->vo_numlevels; i++) {
j = vo->vo_levels[i];
if (notify == VID_NOTIFY_INC_BRN) {
@@ -671,15 +694,21 @@ acpi_video_vo_notify_handler(ACPI_HANDLE
new_level = j;
}
}
- if (new_level != level) {
- vo_set_brightness(handle, new_level);
- vo->vo_brightness = new_level;
- }
break;
- default:
- printf("unknown notify event 0x%x from %s\n",
- notify, acpi_name(handle));
+ case VID_NOTIFY_ZRO_BRN:
+ for (i = 0; i < vo->vo_numlevels; i++)
+ if (vo->vo_levels[i] == 0) {
+ new_level = 0;
+ break;
+ }
+ break;
}
+ if (new_level != level) {
+ vo_set_brightness(handle, new_level);
+ vo->vo_brightness = new_level;
+ }
+
+out:
ACPI_SERIAL_END(video_output);
}
More information about the svn-src-all
mailing list