From owner-svn-src-all@FreeBSD.ORG Mon Feb 15 19:30:29 2010 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 25F7F106566B; Mon, 15 Feb 2010 19:30:29 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 15D698FC0A; Mon, 15 Feb 2010 19:30:29 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o1FJUSP1093257; Mon, 15 Feb 2010 19:30:28 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o1FJUSkR093255; Mon, 15 Feb 2010 19:30:28 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201002151930.o1FJUSkR093255@svn.freebsd.org> From: Jung-uk Kim Date: Mon, 15 Feb 2010 19:30:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r203935 - head/sys/dev/acpica X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Feb 2010 19:30:29 -0000 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); }