From patchwork Thu Aug 20 09:14:55 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Bader X-Patchwork-Id: 42849 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n7K9FNoB025184 for ; Thu, 20 Aug 2009 09:15:24 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752796AbZHTJO5 (ORCPT ); Thu, 20 Aug 2009 05:14:57 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753353AbZHTJO4 (ORCPT ); Thu, 20 Aug 2009 05:14:56 -0400 Received: from adelie.canonical.com ([91.189.90.139]:43053 "EHLO adelie.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752796AbZHTJO4 (ORCPT ); Thu, 20 Aug 2009 05:14:56 -0400 Received: from hutte.canonical.com ([91.189.90.181]) by adelie.canonical.com with esmtp (Exim 4.69 #1 (Debian)) id 1Me3jU-0005V2-Il; Thu, 20 Aug 2009 10:14:56 +0100 Received: from p5b2e66b4.dip.t-dialin.net ([91.46.102.180] helo=[192.168.2.105]) by hutte.canonical.com with esmtpsa (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.69) (envelope-from ) id 1Me3jU-0007Kp-Ex; Thu, 20 Aug 2009 10:14:56 +0100 Message-ID: <4A8D140F.1090909@canonical.com> Date: Thu, 20 Aug 2009 11:14:55 +0200 From: Stefan Bader User-Agent: Thunderbird 2.0.0.17 (X11/20080914) MIME-Version: 1.0 To: linux-acpi@vger.kernel.org CC: rui.zhang@intel.com, Matthew Garrett Subject: Less strict requirements for video device detection Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org Hardware: Acer 6920G (from a bug report) Another case of a broken BIOS. In this case there are several definitions for video bus devices but only one has _DOS and _DOD defined. All other definitions only have _DOD. In the past (2.6.27) _ADR was not evaluated to make sure of using a present video device, but with that bug brightness could be changed. Now the video bus having _DOS and _DOD is detected as not being present. The other definitions are not considered because they are lacking the _DOS method. Using the attached patch, would cause the detection code to consider the other definitions and has been tested to enable backlight control. Would this be an acceptable approach? From the ACPI spec it rather sounds like _DOD and _DOS must be present for a device for display switching and _DOS would indicate possible backlight control as well. So the question might not be so much is it the right thing than is it safe enough to allow more compatibility with broken implementations without causing other problems... -Stefan From 302f148a5eee5226b15c1dec1dbdfb8326bfa17a Mon Sep 17 00:00:00 2001 From: Stefan Bader Date: Thu, 20 Aug 2009 10:45:58 +0200 Subject: [PATCH] acpi: video: Loosen strictness of video bus detection code BugLink: http://bugs.launchpad.net/bugs/333386 Currently a video bus device must (beside other criteria) define _DOD and _DOS methods to be considered a video device. Some broken BIOSes prevented working backlight control by only defining both for one (non-existing bus) and only _DOD for the rest. With this patch in place the other bus definitions were considered too and backlight control started to work again. Signed-off-by: Stefan Bader --- drivers/acpi/video.c | 2 +- drivers/acpi/video_detect.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c index 8851315..f9efeb8 100644 --- a/drivers/acpi/video.c +++ b/drivers/acpi/video.c @@ -1083,7 +1083,7 @@ static int acpi_video_bus_check(struct acpi_video_bus *video) */ /* Does this device support video switching? */ - if (video->cap._DOS) { + if (video->cap._DOS || video->cap._DOD) { video->flags.multihead = 1; status = 0; } diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c index 7cd2b63..bee5e34 100644 --- a/drivers/acpi/video_detect.c +++ b/drivers/acpi/video_detect.c @@ -82,7 +82,7 @@ long acpi_is_video_device(struct acpi_device *device) return 0; /* Does this device able to support video switching ? */ - if (ACPI_SUCCESS(acpi_get_handle(device->handle, "_DOD", &h_dummy)) && + if (ACPI_SUCCESS(acpi_get_handle(device->handle, "_DOD", &h_dummy)) || ACPI_SUCCESS(acpi_get_handle(device->handle, "_DOS", &h_dummy))) video_caps |= ACPI_VIDEO_OUTPUT_SWITCHING; -- 1.5.4.3