summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2014-05-29 22:28:20 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2014-05-30 10:04:36 -0400
commita1ec657213b4abb00e59385171554a3e11eec27c (patch)
treef0401522eb90acee967c21660a4e3144b8276741
parentd34afa9de4447367b734ec407e5a9e10617d6ec3 (diff)
ACPI / scan: always register container scan handler
Prevent platform devices from being created for ACPI containers if CONFIG_ACPI_CONTAINER is unset by compiling out the container scan handler's callbacks only in that case and still compiling its device ID list in and registering the scan handler in either case. This change is based on a prototype from Zhang Rui. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
-rw-r--r--drivers/acpi/Makefile2
-rw-r--r--drivers/acpi/container.c15
-rw-r--r--drivers/acpi/internal.h4
3 files changed, 16 insertions, 5 deletions
diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
index 144671a2030f..4f23f3295b12 100644
--- a/drivers/acpi/Makefile
+++ b/drivers/acpi/Makefile
@@ -64,7 +64,7 @@ obj-$(CONFIG_ACPI_FAN) += fan.o
64obj-$(CONFIG_ACPI_VIDEO) += video.o 64obj-$(CONFIG_ACPI_VIDEO) += video.o
65obj-$(CONFIG_ACPI_PCI_SLOT) += pci_slot.o 65obj-$(CONFIG_ACPI_PCI_SLOT) += pci_slot.o
66obj-$(CONFIG_ACPI_PROCESSOR) += processor.o 66obj-$(CONFIG_ACPI_PROCESSOR) += processor.o
67obj-$(CONFIG_ACPI_CONTAINER) += container.o 67obj-y += container.o
68obj-$(CONFIG_ACPI_THERMAL) += thermal.o 68obj-$(CONFIG_ACPI_THERMAL) += thermal.o
69obj-$(CONFIG_ACPI_HOTPLUG_MEMORY) += acpi_memhotplug.o 69obj-$(CONFIG_ACPI_HOTPLUG_MEMORY) += acpi_memhotplug.o
70obj-$(CONFIG_ACPI_BATTERY) += battery.o 70obj-$(CONFIG_ACPI_BATTERY) += battery.o
diff --git a/drivers/acpi/container.c b/drivers/acpi/container.c
index 63119d09b354..76f7cff64594 100644
--- a/drivers/acpi/container.c
+++ b/drivers/acpi/container.c
@@ -41,6 +41,8 @@ static const struct acpi_device_id container_device_ids[] = {
41 {"", 0}, 41 {"", 0},
42}; 42};
43 43
44#ifdef CONFIG_ACPI_CONTAINER
45
44static int acpi_container_offline(struct container_dev *cdev) 46static int acpi_container_offline(struct container_dev *cdev)
45{ 47{
46 struct acpi_device *adev = ACPI_COMPANION(&cdev->dev); 48 struct acpi_device *adev = ACPI_COMPANION(&cdev->dev);
@@ -109,5 +111,18 @@ static struct acpi_scan_handler container_handler = {
109 111
110void __init acpi_container_init(void) 112void __init acpi_container_init(void)
111{ 113{
114 acpi_scan_add_handler(&container_handler);
115}
116
117#else
118
119static struct acpi_scan_handler container_handler = {
120 .ids = container_device_ids,
121};
122
123void __init acpi_container_init(void)
124{
112 acpi_scan_add_handler_with_hotplug(&container_handler, "container"); 125 acpi_scan_add_handler_with_hotplug(&container_handler, "container");
113} 126}
127
128#endif /* CONFIG_ACPI_CONTAINER */
diff --git a/drivers/acpi/internal.h b/drivers/acpi/internal.h
index 5c16cb6bc76d..cc93efd22a24 100644
--- a/drivers/acpi/internal.h
+++ b/drivers/acpi/internal.h
@@ -32,11 +32,7 @@ void acpi_processor_init(void);
32void acpi_platform_init(void); 32void acpi_platform_init(void);
33void acpi_pnp_init(void); 33void acpi_pnp_init(void);
34int acpi_sysfs_init(void); 34int acpi_sysfs_init(void);
35#ifdef CONFIG_ACPI_CONTAINER
36void acpi_container_init(void); 35void acpi_container_init(void);
37#else
38static inline void acpi_container_init(void) {}
39#endif
40#ifdef CONFIG_ACPI_DOCK 36#ifdef CONFIG_ACPI_DOCK
41void register_dock_dependent_device(struct acpi_device *adev, 37void register_dock_dependent_device(struct acpi_device *adev,
42 acpi_handle dshandle); 38 acpi_handle dshandle);