aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/acpi/glue.c16
-rw-r--r--drivers/acpi/scan.c4
-rw-r--r--include/acpi/acpi_bus.h2
-rw-r--r--include/linux/device.h18
4 files changed, 27 insertions, 13 deletions
diff --git a/drivers/acpi/glue.c b/drivers/acpi/glue.c
index 3e75d6e5a469..01551840d236 100644
--- a/drivers/acpi/glue.c
+++ b/drivers/acpi/glue.c
@@ -134,12 +134,12 @@ static int acpi_bind_one(struct device *dev, acpi_handle handle)
134 char physical_node_name[sizeof(PHYSICAL_NODE_STRING) + 2]; 134 char physical_node_name[sizeof(PHYSICAL_NODE_STRING) + 2];
135 int retval = -EINVAL; 135 int retval = -EINVAL;
136 136
137 if (dev->acpi_handle) { 137 if (ACPI_HANDLE(dev)) {
138 if (handle) { 138 if (handle) {
139 dev_warn(dev, "ACPI handle is already set\n"); 139 dev_warn(dev, "ACPI handle is already set\n");
140 return -EINVAL; 140 return -EINVAL;
141 } else { 141 } else {
142 handle = dev->acpi_handle; 142 handle = ACPI_HANDLE(dev);
143 } 143 }
144 } 144 }
145 if (!handle) 145 if (!handle)
@@ -181,8 +181,8 @@ static int acpi_bind_one(struct device *dev, acpi_handle handle)
181 181
182 mutex_unlock(&acpi_dev->physical_node_lock); 182 mutex_unlock(&acpi_dev->physical_node_lock);
183 183
184 if (!dev->acpi_handle) 184 if (!ACPI_HANDLE(dev))
185 dev->acpi_handle = handle; 185 ACPI_HANDLE_SET(dev, acpi_dev->handle);
186 186
187 if (!physical_node->node_id) 187 if (!physical_node->node_id)
188 strcpy(physical_node_name, PHYSICAL_NODE_STRING); 188 strcpy(physical_node_name, PHYSICAL_NODE_STRING);
@@ -200,7 +200,7 @@ static int acpi_bind_one(struct device *dev, acpi_handle handle)
200 return 0; 200 return 0;
201 201
202 err: 202 err:
203 dev->acpi_handle = NULL; 203 ACPI_HANDLE_SET(dev, NULL);
204 put_device(dev); 204 put_device(dev);
205 return retval; 205 return retval;
206 206
@@ -217,10 +217,10 @@ static int acpi_unbind_one(struct device *dev)
217 acpi_status status; 217 acpi_status status;
218 struct list_head *node, *next; 218 struct list_head *node, *next;
219 219
220 if (!dev->acpi_handle) 220 if (!ACPI_HANDLE(dev))
221 return 0; 221 return 0;
222 222
223 status = acpi_bus_get_device(dev->acpi_handle, &acpi_dev); 223 status = acpi_bus_get_device(ACPI_HANDLE(dev), &acpi_dev);
224 if (ACPI_FAILURE(status)) 224 if (ACPI_FAILURE(status))
225 goto err; 225 goto err;
226 226
@@ -246,7 +246,7 @@ static int acpi_unbind_one(struct device *dev)
246 246
247 sysfs_remove_link(&acpi_dev->dev.kobj, physical_node_name); 247 sysfs_remove_link(&acpi_dev->dev.kobj, physical_node_name);
248 sysfs_remove_link(&dev->kobj, "firmware_node"); 248 sysfs_remove_link(&dev->kobj, "firmware_node");
249 dev->acpi_handle = NULL; 249 ACPI_HANDLE_SET(dev, NULL);
250 /* acpi_bind_one increase refcnt by one */ 250 /* acpi_bind_one increase refcnt by one */
251 put_device(dev); 251 put_device(dev);
252 kfree(entry); 252 kfree(entry);
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index d842569395a9..e92ca67d0e46 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -386,8 +386,8 @@ const struct acpi_device_id *acpi_match_device(const struct acpi_device_id *ids,
386{ 386{
387 struct acpi_device *adev; 387 struct acpi_device *adev;
388 388
389 if (!ids || !dev->acpi_handle 389 if (!ids || !ACPI_HANDLE(dev)
390 || ACPI_FAILURE(acpi_bus_get_device(dev->acpi_handle, &adev))) 390 || ACPI_FAILURE(acpi_bus_get_device(ACPI_HANDLE(dev), &adev)))
391 return NULL; 391 return NULL;
392 392
393 return __acpi_match_device(adev, ids); 393 return __acpi_match_device(adev, ids);
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
index bb1537c5e672..d1659904f2a0 100644
--- a/include/acpi/acpi_bus.h
+++ b/include/acpi/acpi_bus.h
@@ -410,7 +410,7 @@ acpi_handle acpi_get_child(acpi_handle, u64);
410int acpi_is_root_bridge(acpi_handle); 410int acpi_is_root_bridge(acpi_handle);
411acpi_handle acpi_get_pci_rootbridge_handle(unsigned int, unsigned int); 411acpi_handle acpi_get_pci_rootbridge_handle(unsigned int, unsigned int);
412struct acpi_pci_root *acpi_pci_find_root(acpi_handle handle); 412struct acpi_pci_root *acpi_pci_find_root(acpi_handle handle);
413#define DEVICE_ACPI_HANDLE(dev) ((acpi_handle)((dev)->acpi_handle)) 413#define DEVICE_ACPI_HANDLE(dev) ((acpi_handle)ACPI_HANDLE(dev))
414 414
415int acpi_enable_wakeup_device_power(struct acpi_device *dev, int state); 415int acpi_enable_wakeup_device_power(struct acpi_device *dev, int state);
416int acpi_disable_wakeup_device_power(struct acpi_device *dev); 416int acpi_disable_wakeup_device_power(struct acpi_device *dev);
diff --git a/include/linux/device.h b/include/linux/device.h
index cc3aee57a46e..05292e488346 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -578,6 +578,12 @@ struct device_dma_parameters {
578 unsigned long segment_boundary_mask; 578 unsigned long segment_boundary_mask;
579}; 579};
580 580
581struct acpi_dev_node {
582#ifdef CONFIG_ACPI
583 void *handle;
584#endif
585};
586
581/** 587/**
582 * struct device - The basic device structure 588 * struct device - The basic device structure
583 * @parent: The device's "parent" device, the device to which it is attached. 589 * @parent: The device's "parent" device, the device to which it is attached.
@@ -618,7 +624,7 @@ struct device_dma_parameters {
618 * @dma_mem: Internal for coherent mem override. 624 * @dma_mem: Internal for coherent mem override.
619 * @archdata: For arch-specific additions. 625 * @archdata: For arch-specific additions.
620 * @of_node: Associated device tree node. 626 * @of_node: Associated device tree node.
621 * @acpi_handle: Associated ACPI device node's namespace handle. 627 * @acpi_node: Associated ACPI device node.
622 * @devt: For creating the sysfs "dev". 628 * @devt: For creating the sysfs "dev".
623 * @id: device instance 629 * @id: device instance
624 * @devres_lock: Spinlock to protect the resource of the device. 630 * @devres_lock: Spinlock to protect the resource of the device.
@@ -683,7 +689,7 @@ struct device {
683 struct dev_archdata archdata; 689 struct dev_archdata archdata;
684 690
685 struct device_node *of_node; /* associated device tree node */ 691 struct device_node *of_node; /* associated device tree node */
686 void *acpi_handle; /* associated ACPI device node */ 692 struct acpi_dev_node acpi_node; /* associated ACPI device node */
687 693
688 dev_t devt; /* dev_t, creates the sysfs "dev" */ 694 dev_t devt; /* dev_t, creates the sysfs "dev" */
689 u32 id; /* device instance */ 695 u32 id; /* device instance */
@@ -704,6 +710,14 @@ static inline struct device *kobj_to_dev(struct kobject *kobj)
704 return container_of(kobj, struct device, kobj); 710 return container_of(kobj, struct device, kobj);
705} 711}
706 712
713#ifdef CONFIG_ACPI
714#define ACPI_HANDLE(dev) ((dev)->acpi_node.handle)
715#define ACPI_HANDLE_SET(dev, _handle_) (dev)->acpi_node.handle = (_handle_)
716#else
717#define ACPI_HANDLE(dev) (NULL)
718#define ACPI_HANDLE_SET(dev, _handle_) do { } while (0)
719#endif
720
707/* Get the wakeup routines, which depend on struct device */ 721/* Get the wakeup routines, which depend on struct device */
708#include <linux/pm_wakeup.h> 722#include <linux/pm_wakeup.h>
709 723