All of lore.kernel.org
 help / color / mirror / Atom feed
From: Aaron Lu <aaron.lu@intel.com>
To: linux-acpi@vger.kernel.org, intel-gfx@lists.freedesktop.org,
	dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org
Cc: "Daniel Vetter" <daniel@ffwll.ch>,
	"Rafael J. Wysocki" <rjw@sisk.pl>,
	"Matthew Garrett" <matthew.garrett@nebula.com>,
	"Seth Forshee" <seth.forshee@canonical.com>,
	"Lee Chun-Yi" <joeyli.kernel@gmail.com>,
	"Richard Purdie" <rpurdie@rpsys.net>,
	"Igor Gnatenko" <i.gnatenko.brain@gmail.com>,
	"Yves-Alexis Perez" <corsac@debian.org>,
	"Felipe Contreras" <felipe.contreras@gmail.com>,
	"Henrique de Moraes Holschuh" <ibm-acpi@hmh.eng.br>,
	"Jani Nikula" <jani.nikula@linux.intel.com>,
	"Aaron Lu" <aaron.lu@intel.com>, "Ben Jencks" <ben@bjencks.net>,
	"Steven Newbury" <steve@snewbury.org.uk>,
	"James Hogan" <james@albanarts.com>,
	"Kamal Mostafa" <kamal@canonical.com>,
	"Joerg Platte" <jplatte@naasa.net>,
	"Kalle Valo" <kvalo@adurom.com>,
	"Martin Steigerwald" <Martin@lichtvoll.de>,
	"Jörg Otte" <jrg.otte@gmail.com>,
	"Mike Galbraith" <bitbucket@online.de>
Subject: [PATCH v3 4/4] thinkpad-acpi: fix handle locate for video and query of _BCL
Date: Tue, 24 Sep 2013 17:47:32 +0800	[thread overview]
Message-ID: <1380016052-15315-5-git-send-email-aaron.lu@intel.com> (raw)
In-Reply-To: <1380016052-15315-1-git-send-email-aaron.lu@intel.com>

The tpacpi_acpi_handle_locate function makes use of acpi_get_devices to
locate handle for ACPI video by HID, the problem is, ACPI video node
doesn't really have HID defined(i.e. no _HID control method is defined
for video device), so.. that function would fail. This can be solved by
enhancing the callback function for acpi_get_devices, where we can use
acpi_device_hid function to check if the ACPI node corresponds to a
video controller.

In addition to that, the _BCL control method only exists under a video
output device node, not a video controller device node. So to evaluate
_BCL, we need the handle of a video output device node, which is child
of the located video controller node from tpacpi_acpi_handle_locate.

The two fix are necessary for some Thinkpad models to emit notification
on backlight hotkey press as a result of evaluation of _BCL.

Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Tested-by: Igor Gnatenko <i.gnatenko.brain@gmail.com>
---
 drivers/platform/x86/thinkpad_acpi.c | 31 ++++++++++++++++++++++++-------
 1 file changed, 24 insertions(+), 7 deletions(-)

diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index 03ca6c1..170f278 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -700,6 +700,14 @@ static void __init drv_acpi_handle_init(const char *name,
 static acpi_status __init tpacpi_acpi_handle_locate_callback(acpi_handle handle,
 			u32 level, void *context, void **return_value)
 {
+	struct acpi_device *dev;
+	if (!strcmp(context, "video")) {
+		if (acpi_bus_get_device(handle, &dev))
+			return AE_OK;
+		if (strcmp(ACPI_VIDEO_HID, acpi_device_hid(dev)))
+			return AE_OK;
+	}
+
 	*(acpi_handle *)return_value = handle;
 
 	return AE_CTRL_TERMINATE;
@@ -712,10 +720,10 @@ static void __init tpacpi_acpi_handle_locate(const char *name,
 	acpi_status status;
 	acpi_handle device_found;
 
-	BUG_ON(!name || !hid || !handle);
+	BUG_ON(!name || !handle);
 	vdbg_printk(TPACPI_DBG_INIT,
 			"trying to locate ACPI handle for %s, using HID %s\n",
-			name, hid);
+			name, hid ? hid : "NULL");
 
 	memset(&device_found, 0, sizeof(device_found));
 	status = acpi_get_devices(hid, tpacpi_acpi_handle_locate_callback,
@@ -6090,19 +6098,28 @@ static int __init tpacpi_query_bcl_levels(acpi_handle handle)
 {
 	struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
 	union acpi_object *obj;
+	struct acpi_device *device, *child;
 	int rc;
 
-	if (ACPI_SUCCESS(acpi_evaluate_object(handle, "_BCL", NULL, &buffer))) {
+	if (acpi_bus_get_device(handle, &device))
+		return 0;
+
+	rc = 0;
+	list_for_each_entry(child, &device->children, node) {
+		acpi_status status = acpi_evaluate_object(child->handle, "_BCL",
+							  NULL, &buffer);
+		if (ACPI_FAILURE(status))
+			continue;
+
 		obj = (union acpi_object *)buffer.pointer;
 		if (!obj || (obj->type != ACPI_TYPE_PACKAGE)) {
 			pr_err("Unknown _BCL data, please report this to %s\n",
-			       TPACPI_MAIL);
+				TPACPI_MAIL);
 			rc = 0;
 		} else {
 			rc = obj->package.count;
 		}
-	} else {
-		return 0;
+		break;
 	}
 
 	kfree(buffer.pointer);
@@ -6118,7 +6135,7 @@ static unsigned int __init tpacpi_check_std_acpi_brightness_support(void)
 	acpi_handle video_device;
 	int bcl_levels = 0;
 
-	tpacpi_acpi_handle_locate("video", ACPI_VIDEO_HID, &video_device);
+	tpacpi_acpi_handle_locate("video", NULL, &video_device);
 	if (video_device)
 		bcl_levels = tpacpi_query_bcl_levels(video_device);
 
-- 
1.8.4.12.g2ea3df6


  parent reply	other threads:[~2013-09-24  9:47 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-24  9:47 [PATCH v3 0/4] Fix Win8 backlight issue Aaron Lu
2013-09-24  9:47 ` [PATCH v3 1/4] backlight: introduce backlight_device_registered Aaron Lu
2013-09-24  9:47 ` [PATCH v3 2/4] ACPI / video: seperate backlight control and event interface Aaron Lu
2013-09-24  9:54   ` Aaron Lu
2013-09-24  9:54     ` Aaron Lu
2013-10-07 12:09     ` Rafael J. Wysocki
2013-10-07 12:09       ` Rafael J. Wysocki
2013-09-24  9:47 ` [PATCH v3 3/4] ACPI / video: Do not register backlight if win8 and native interface exists Aaron Lu
2013-09-25 17:53   ` Rafael J. Wysocki
2013-09-25 17:53     ` Rafael J. Wysocki
2013-09-26  5:15     ` Aaron Lu
2013-09-26  5:15       ` Aaron Lu
2013-09-24  9:47 ` Aaron Lu [this message]
2013-09-25 19:58   ` [PATCH v3 4/4] thinkpad-acpi: fix handle locate for video and query of _BCL Henrique de Moraes Holschuh
2013-09-25 19:58     ` Henrique de Moraes Holschuh
2013-09-26  1:44     ` Aaron Lu
2013-09-26  1:44       ` Aaron Lu
2013-09-27 15:16       ` Henrique de Moraes Holschuh
2013-09-27 15:16         ` Henrique de Moraes Holschuh
2013-09-27 15:20   ` Henrique de Moraes Holschuh
2013-09-27 15:20     ` Henrique de Moraes Holschuh
2013-09-27 15:33     ` Yves-Alexis Perez
2013-09-27 15:33       ` Yves-Alexis Perez
2013-09-27 18:05       ` Henrique de Moraes Holschuh
2013-09-27 18:05         ` Henrique de Moraes Holschuh
2013-09-28 12:28         ` Yves-Alexis Perez
2013-09-28 12:28           ` Yves-Alexis Perez
2013-09-24 12:42 ` [PATCH v3 0/4] Fix Win8 backlight issue Igor Gnatenko
2013-09-25  8:29   ` Jörg Otte
2013-09-25  9:17     ` Aaron Lu
2013-09-25  9:17       ` Aaron Lu
2013-09-25 10:41       ` Jani Nikula
2013-09-25 10:41         ` Jani Nikula
2013-09-25 15:51         ` Jörg Otte
2013-09-25 15:51           ` Jörg Otte
2013-09-25 16:17           ` Jani Nikula
2013-09-25 16:17             ` Jani Nikula
2013-09-26  7:49             ` Jörg Otte
2013-09-26  7:49               ` Jörg Otte
2013-09-27  0:26               ` Rafael J. Wysocki
2013-09-27  0:26                 ` Rafael J. Wysocki
2013-09-28 16:34                 ` Jörg Otte
2013-09-28 16:34                   ` Jörg Otte
2013-09-25  9:09 ` Jörg Otte
2013-09-27 11:02 ` Mika Westerberg
2013-09-27 11:02   ` Mika Westerberg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1380016052-15315-5-git-send-email-aaron.lu@intel.com \
    --to=aaron.lu@intel.com \
    --cc=Martin@lichtvoll.de \
    --cc=ben@bjencks.net \
    --cc=bitbucket@online.de \
    --cc=corsac@debian.org \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=felipe.contreras@gmail.com \
    --cc=i.gnatenko.brain@gmail.com \
    --cc=ibm-acpi@hmh.eng.br \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=james@albanarts.com \
    --cc=jani.nikula@linux.intel.com \
    --cc=joeyli.kernel@gmail.com \
    --cc=jplatte@naasa.net \
    --cc=jrg.otte@gmail.com \
    --cc=kamal@canonical.com \
    --cc=kvalo@adurom.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=matthew.garrett@nebula.com \
    --cc=rjw@sisk.pl \
    --cc=rpurdie@rpsys.net \
    --cc=seth.forshee@canonical.com \
    --cc=steve@snewbury.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.