PNP: add interface to retrieve ACPI device from a PNPACPI device
authorBjorn Helgaas <bjorn.helgaas@hp.com>
Wed, 18 Nov 2009 00:05:19 +0000 (17:05 -0700)
committerLen Brown <len.brown@intel.com>
Tue, 15 Dec 2009 22:35:26 +0000 (17:35 -0500)
Add pnp_acpi_device(pnp_dev), which takes a PNP device and returns the
associated ACPI device (or NULL, if the device is not a PNPACPI device).

This allows us to write a PNP driver that can manage both traditional
PNPBIOS and ACPI devices, treating ACPI-only functionality as an optional
extension.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: Len Brown <len.brown@intel.com>
drivers/pnp/pnpacpi/core.c
include/linux/pnp.h

index b2348fc2378e7e41fe145da879d8dfa739de54f0..5314bf630bc4c7fe1b227e4eb0e39b6cf618e79b 100644 (file)
@@ -144,7 +144,7 @@ static int pnpacpi_resume(struct pnp_dev *dev)
 }
 #endif
 
-static struct pnp_protocol pnpacpi_protocol = {
+struct pnp_protocol pnpacpi_protocol = {
        .name    = "Plug and Play ACPI",
        .get     = pnpacpi_get_resources,
        .set     = pnpacpi_set_resources,
@@ -154,6 +154,7 @@ static struct pnp_protocol pnpacpi_protocol = {
        .resume = pnpacpi_resume,
 #endif
 };
+EXPORT_SYMBOL(pnpacpi_protocol);
 
 static int __init pnpacpi_add_device(struct acpi_device *device)
 {
index fddfafaed0247318ca33482513c89fc7d6ef42ed..7c4193eb007248f31307d58b333edc11d0233bc3 100644 (file)
@@ -334,6 +334,19 @@ extern struct pnp_protocol pnpbios_protocol;
 #define pnp_device_is_pnpbios(dev) 0
 #endif
 
+#ifdef CONFIG_PNPACPI
+extern struct pnp_protocol pnpacpi_protocol;
+
+static inline struct acpi_device *pnp_acpi_device(struct pnp_dev *dev)
+{
+       if (dev->protocol == &pnpacpi_protocol)
+               return dev->data;
+       return NULL;
+}
+#else
+#define pnp_acpi_device(dev) 0
+#endif
+
 /* status */
 #define PNP_READY              0x0000
 #define PNP_ATTACHED           0x0001