All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Brownell <david-b@pacbell.net>
To: linux-pm@lists.linux-foundation.org
Cc: Thomas Renninger <trenn@suse.de>, linux-acpi@vger.kernel.org
Subject: [patch 2.6.25-rc6 1/7] crosslink ACPI and "real" device nodes
Date: Thu, 20 Mar 2008 14:09:28 -0700	[thread overview]
Message-ID: <200803201409.28330.david-b@pacbell.net> (raw)
In-Reply-To: <200803201408.33466.david-b@pacbell.net>

From: David Brownell <dbrownell@users.sourceforge.net>

Add cross-links between ACPI device and "real" devices in sysfs,
exposing otherwise-hidden interrelationships between the various
device nodes which ACPI creates.  As a representative example one
hardware device is exposed as two logical devices (PNP and ACPI):

  .../pnp0/00:06/
  .../LNXSYSTM:00/device:00/PNP0A03:00/device:15/PNP0B00:00/

The PNP device gets a "firmware_node" link pointing to the ACPI device.
The ACPI device has a "physical_node" link pointing to the PNP device.
Linux drivers currently bind only to the "physical" device nodes.

Other device trees provided by firmware tables could be exported
using the same scheme; these names aren't ACPI-specific.

(Based on a patch from Zhang Rui.  This version is modified to not
depend on the patch teaching ACPI about driver model wakeup flags.)

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Cc: Zhang Rui <rui.zhang@intel.com> 
---
Change from previous version:  if creating the link fails, a
pr_debug level message is emitted.

 drivers/acpi/glue.c |   27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

--- g26.orig/drivers/acpi/glue.c	2008-03-08 11:11:18.000000000 -0800
+++ g26/drivers/acpi/glue.c	2008-03-08 11:29:07.000000000 -0800
@@ -142,6 +142,7 @@ EXPORT_SYMBOL(acpi_get_physical_device);
 
 static int acpi_bind_one(struct device *dev, acpi_handle handle)
 {
+	struct acpi_device *acpi_dev;
 	acpi_status status;
 
 	if (dev->archdata.acpi_handle) {
@@ -157,6 +158,23 @@ static int acpi_bind_one(struct device *
 	}
 	dev->archdata.acpi_handle = handle;
 
+	status = acpi_bus_get_device(handle, &acpi_dev);
+	if (!ACPI_FAILURE(status)) {
+		int ret;
+
+		ret = sysfs_create_link(&dev->kobj, &acpi_dev->dev.kobj,
+				"firmware_node");
+		if (ret != 0)
+			pr_debug(PREFIX "Can't create %s link for %s\n",
+				"firmware_node", dev->bus_id);
+
+		ret = sysfs_create_link(&acpi_dev->dev.kobj, &dev->kobj,
+				"physical_node");
+		if (ret != 0)
+			pr_debug(PREFIX "Can't create %s link for %s\n",
+				"physical_node", acpi_dev->dev.bus_id);
+	}
+
 	return 0;
 }
 
@@ -165,8 +183,17 @@ static int acpi_unbind_one(struct device
 	if (!dev->archdata.acpi_handle)
 		return 0;
 	if (dev == acpi_get_physical_device(dev->archdata.acpi_handle)) {
+		struct acpi_device *acpi_dev;
+
 		/* acpi_get_physical_device increase refcnt by one */
 		put_device(dev);
+
+		if (!acpi_bus_get_device(dev->archdata.acpi_handle,
+					&acpi_dev)) {
+			sysfs_remove_link(&dev->kobj, "firmware_node");
+			sysfs_remove_link(&acpi_dev->dev.kobj, "physical_node");
+		}
+
 		acpi_detach_data(dev->archdata.acpi_handle,
 				 acpi_glue_data_handler);
 		dev->archdata.acpi_handle = NULL;

  reply	other threads:[~2008-03-20 21:30 UTC|newest]

Thread overview: 111+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-20 21:08 [patch 2.6.25-rc6 0/7] misc pm wake patches David Brownell
2008-03-20 21:09 ` David Brownell [this message]
2008-03-21  6:43   ` [patch 2.6.25-rc6 1/7] crosslink ACPI and "real" device nodes Zhao Yakui
2008-03-21  7:31     ` David Brownell
2008-03-21  8:34       ` Zhao Yakui
2008-03-21  8:34       ` Zhao Yakui
2008-03-21  9:04         ` David Brownell
2008-03-21  9:04         ` David Brownell
2008-03-21  7:31     ` David Brownell
2008-03-21  6:43   ` Zhao Yakui
2008-03-20 21:09 ` David Brownell
2008-03-20 21:10 ` [patch 2.6.25-rc6 2/7] acpi_pm_device_sleep_state() cleanup David Brownell
2008-03-20 21:10 ` David Brownell
2008-03-24 16:30   ` [linux-pm] " Pavel Machek
2008-03-24 16:30   ` Pavel Machek
2008-04-19  4:11   ` [RESEND patch 2.6.25] " David Brownell
2008-04-29 20:33   ` [RE-RESEND patch 2.6.25-git] " David Brownell
2008-04-29 20:33   ` David Brownell
2008-04-29 21:49     ` Rafael J. Wysocki
2008-04-29 21:49     ` Rafael J. Wysocki
2008-04-29 22:12       ` David Brownell
2008-04-30 12:07         ` Rafael J. Wysocki
2008-04-30 12:07         ` Rafael J. Wysocki
2008-04-29 22:12       ` David Brownell
2008-03-20 21:12 ` [patch 2.6.25-rc6 3/7] pci_choose_state() cleanup and fixes David Brownell
2008-03-20 21:12 ` David Brownell
2008-03-20 22:37   ` Rafael J. Wysocki
2008-03-20 22:37   ` Rafael J. Wysocki
2008-03-20 23:03     ` David Brownell
2008-03-20 23:03     ` David Brownell
2008-03-21  0:22       ` Rafael J. Wysocki
2008-03-21  0:22       ` Rafael J. Wysocki
2008-03-21  0:55         ` [linux-pm] " Alan Stern
2008-03-21  1:47           ` Rafael J. Wysocki
2008-03-21  1:47           ` [linux-pm] " Rafael J. Wysocki
2008-03-21  8:15             ` David Brownell
2008-03-21 16:23               ` Rafael J. Wysocki
2008-03-21 16:23               ` [linux-pm] " Rafael J. Wysocki
2008-03-22 17:55                 ` David Brownell
2008-03-22 18:11                   ` Rafael J. Wysocki
2008-03-22 18:29                     ` David Brownell
2008-03-22 18:29                     ` [linux-pm] " David Brownell
2008-03-22 18:11                   ` Rafael J. Wysocki
2008-03-22 17:55                 ` David Brownell
2008-03-21  8:15             ` David Brownell
2008-03-21  0:55         ` Alan Stern
2008-03-21  7:53         ` David Brownell
2008-03-21  7:53         ` David Brownell
2008-03-21 16:38           ` Rafael J. Wysocki
2008-03-22 17:49             ` David Brownell
2008-03-22 18:34               ` Rafael J. Wysocki
2008-04-14  4:59                 ` David Brownell
2008-04-14  4:59                 ` David Brownell
2008-03-22 18:34               ` Rafael J. Wysocki
2008-03-22 17:49             ` David Brownell
2008-03-21 16:38           ` Rafael J. Wysocki
2008-03-20 21:15 ` [patch 2.6.25-rc6 4/7] USB uses pci_choose_state() David Brownell
2008-03-20 21:15 ` David Brownell
2008-03-20 21:20 ` [patch 2.6.25-rc6 5/7] ACPI sets up device.power.can_wakeup flags David Brownell
2008-03-20 21:20 ` David Brownell
2008-03-21  7:43   ` Zhao Yakui
2008-03-21  7:43   ` Zhao Yakui
2008-04-19  4:14   ` [RESEND patch 2.6.25] " David Brownell
2008-04-19  4:14   ` David Brownell
2008-04-22  2:48     ` Zhang Rui
2008-04-22  2:48     ` Zhang Rui
2008-03-20 21:22 ` [patch 2.6.25-rc6 6/7] ACPI uses device_may_wakeup() policy inputs David Brownell
2008-03-20 21:22 ` David Brownell
2008-04-19  4:18   ` [RESEND patch 2.6.25] " David Brownell
2008-04-22  2:42     ` Zhang Rui
2008-04-22  2:42     ` Zhang Rui
2008-04-26 19:29       ` David Brownell
2008-04-26 19:29       ` David Brownell
2008-04-22 13:30     ` Zhao Yakui
2008-04-26 19:37       ` David Brownell
2008-04-26 19:37       ` David Brownell
2008-04-28 12:48         ` Zhao Yakui
2008-04-28 12:48         ` Zhao Yakui
2008-04-28  8:50           ` Zhang Rui
2008-04-28  8:50           ` Zhang Rui
2008-04-28 13:43             ` Alan Stern
2008-04-28 13:43             ` [linux-pm] " Alan Stern
2008-04-29 23:38               ` David Brownell
2008-04-29 23:38               ` [linux-pm] " David Brownell
2008-04-30 13:58                 ` Alan Stern
2008-04-30 13:58                 ` [linux-pm] " Alan Stern
2008-05-14 14:56                   ` Pavel Machek
2008-05-14 14:56                   ` [linux-pm] " Pavel Machek
2008-04-28 22:28             ` David Brownell
2008-04-28 22:28             ` David Brownell
2008-04-28 21:35           ` Henrique de Moraes Holschuh
2008-04-28 21:35           ` Henrique de Moraes Holschuh
2008-04-28 22:20             ` David Brownell
2008-04-28 22:54               ` Henrique de Moraes Holschuh
2008-04-29  0:20                 ` David Brownell
2008-04-29  0:20                 ` David Brownell
2008-04-28 22:54               ` Henrique de Moraes Holschuh
2008-04-29 20:32               ` David Brownell
2008-04-29 20:32               ` David Brownell
2008-04-28 22:20             ` David Brownell
2008-04-28 22:24           ` David Brownell
2008-04-28 22:24           ` David Brownell
2008-04-28 22:26           ` David Brownell
2008-04-28 22:26           ` David Brownell
2008-04-22 13:30     ` Zhao Yakui
2008-03-20 21:25 ` [patch 2.6.25-rc6 7/7] PCI set up device.power.can_wakeup flags David Brownell
2008-03-20 21:53   ` [linux-pm] " Alan Stern
2008-03-20 22:22     ` David Brownell
2008-03-20 22:22     ` David Brownell
2008-03-20 21:53   ` Alan Stern
2008-03-20 21:25 ` David Brownell

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=200803201409.28330.david-b@pacbell.net \
    --to=david-b@pacbell.net \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-pm@lists.linux-foundation.org \
    --cc=trenn@suse.de \
    /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.