summaryrefslogtreecommitdiff
path: root/backport-include/linux/acpi.h
diff options
context:
space:
mode:
Diffstat (limited to 'backport-include/linux/acpi.h')
-rw-r--r--backport-include/linux/acpi.h72
1 files changed, 72 insertions, 0 deletions
diff --git a/backport-include/linux/acpi.h b/backport-include/linux/acpi.h
new file mode 100644
index 0000000..2f1072f
--- /dev/null
+++ b/backport-include/linux/acpi.h
@@ -0,0 +1,72 @@
+#ifndef __BACKPORT_LINUX_ACPI_H
+#define __BACKPORT_LINUX_ACPI_H
+#include_next <linux/acpi.h>
+#include <linux/version.h>
+
+#if LINUX_VERSION_IS_LESS(3,8,0)
+/*
+ * Backports
+ *
+ * commit 95f8a082b9b1ead0c2859f2a7b1ac91ff63d8765
+ * Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+ * Date: Wed Nov 21 00:21:50 2012 +0100
+ *
+ * ACPI / driver core: Introduce struct acpi_dev_node and related macros
+ *
+ * To avoid adding an ACPI handle pointer to struct device on
+ * architectures that don't use ACPI, or generally when CONFIG_ACPI is
+ * not set, in which cases that pointer is useless, define struct
+ * acpi_dev_node that will contain the handle pointer if CONFIG_ACPI is
+ * set and will be empty otherwise and use it to represent the ACPI
+ * device node field in struct device.
+ *
+ * In addition to that define macros for reading and setting the ACPI
+ * handle of a device that don't generate code when CONFIG_ACPI is
+ * unset. Modify the ACPI subsystem to use those macros instead of
+ * referring to the given device's ACPI handle directly.
+ *
+ * Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+ * Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
+ * Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+ */
+#ifdef CONFIG_ACPI
+#define ACPI_HANDLE(dev) DEVICE_ACPI_HANDLE(dev)
+#else
+#define ACPI_HANDLE(dev) (NULL)
+#endif /* CONFIG_ACPI */
+#endif /* LINUX_VERSION_IS_LESS(3,8,0) */
+
+#ifndef ACPI_COMPANION
+#ifdef CONFIG_ACPI
+static inline struct acpi_device *_acpi_get_companion(struct device *dev)
+{
+ struct acpi_device *adev;
+ int ret;
+
+ ret = acpi_bus_get_device(ACPI_HANDLE(dev), &adev);
+ if (ret < 0)
+ adev = NULL;
+
+ return adev;
+}
+#define ACPI_COMPANION(dev) _acpi_get_companion(dev)
+#else
+#define ACPI_COMPANION(dev) (NULL)
+#endif /* CONFIG_ACPI */
+#endif /* ACPI_COMPANION */
+
+#if LINUX_VERSION_IS_LESS(3,19,0)
+#define acpi_dev_remove_driver_gpios LINUX_BACKPORT(acpi_dev_remove_driver_gpios)
+static inline void acpi_dev_remove_driver_gpios(struct acpi_device *adev) {}
+#endif /* LINUX_VERSION_IS_LESS(3, 19, 0) */
+
+#if LINUX_VERSION_IN_RANGE(3,19,0, 4,13,0)
+#define devm_acpi_dev_add_driver_gpios LINUX_BACKPORT(devm_acpi_dev_add_driver_gpios)
+static inline int devm_acpi_dev_add_driver_gpios(struct device *dev,
+ const struct acpi_gpio_mapping *gpios)
+{
+ return -ENXIO;
+}
+#endif /* LINUX_VERSION_IN_RANGE(3,19,0, 4,13,0) */
+
+#endif /* __BACKPORT_LINUX_ACPI_H */